Sometimes it seems like junior and senior labels are applied to developers rather randomly. Obviously seniority is not a function of age or number of years of work experience. It is also not exclusively bound to technical skill - if it was, there would be no difference between whiz-kid and senior developer. If you want to be treated as senior developer, try to apply following behaviors.
Think
Thinking is fundamental prerequisity. If conscious thinking is not present, no other skill can balance it out for senior position. You are not humanoid voice controlled robot - so use your brain to evaluate what it’s asked from you instead of either doing exactly what being told or dismissing everything en-block. If you have lazy mind you still can be valued professional practicing software development trade, but do not complain if the most complex and exciting tasks get assigned to someone else.
Provide Value Beyond Specification
All software specifications are faulty, incomplete or contradictory. Try to understand the intention and infer the best solution. This behavior usually goes together with thinking but it is important enough I have special section for it.
Mind the Users
Always keep users in mind and decide in their best interest. Taking shortcuts and imposing unnecessary constraints on users just because they are easy to implement is a big no-no!
Develop Feeling for Trade-Offs
All decisions have trade offs. People with more experience should see various options and consciously choose one that fits the constraint best. Typical juniors tend to pick the first solution they stumble upon or blindly follow whatever they are instructed to do.
Strive for Understanding
Understand codebase, understrand problem you are fixing or understand the underlying technology. You have to be able to reason about your code. When you write a piece of code you need to understand what it does, how it behaves and why it behaves the way it does.
Become Comfortable at Any Abstraction Layer
You should be able to consider IO impact of the change, application design, user experience and business value in one breath. Move between abstraction layers with ease and focus on the audience appropriate level during discussion, but keep checking other levels in the background (e.g. to cross check business requirement with technical feasibility).
Push back
Having enough insight and courage to challenge the dubious ideas. Do not confuse with constant complaining.
Other Characteristics
I find following behaviours obvious and kind of buzzwordy, but they are still important and necessary for any developer who strives for seniority.
- Listen and make compromises - nothing is black and white
- Independently solve problems
- Focus on quality
- Pay attention to details
- Bring solutions
- Take responsibility