I think it's fair to say that almost everyone wants to move forward in their career. For some, that means becoming a Senior Developer.
Since there are a lot of people that have this dream, there are also lots of people that write about how to attain it. Instead of contributing to all that noise, I decided to do a survey of as much of the existing noise as I could find.
So I went through 21 articles that came up when I searched for "How to become a senior developer" and adjacent searches.
The articles typically discussed the things you need in order to become a senior developer. There were not a lot of step by step guides like I was expecting, but more checklists of things that senior devs should be able to do. These fell into two major categories:
- Soft Skills
- Hard Skills
The vertical bar on the letter T represents the depth of related skills and expertise in a single field, whereas the horizontal bar is the ability to collaborate across disciplines with experts in other areas and to apply knowledge in areas of expertise other than one's own.
T shaped knowledge is really useful as a developer, since we have to dive deep in order to get any work done at all, and nobody can have deep in all areas of development, so being able to collaborate is very important.
Here is a great article on how exactly to develop T shaped knowledge.
There were three major threads that came up around the topic of mentorship.
The first is to have a solid mentor or mentorship network. In addition to being able to contribute individually at a high level (being good at making software), senior developers are also expected to have good interpersonal skills. In order to develop those skills, you really need mentorship by someone who already has them. It's not really possible to develop those skills in a vacuum.
The second thread goes along with the first. You need to know when to ask for help. Working with others means being able to rely on them, and knowing your own limits.
The third thread is providing mentorship to others. The real value of a senior developer is that they empower others to be better developers too. This means little things like not being a jerk in code reviews, but also being a good teacher to newer developers. This also takes practice.
"The Big Picture" is one of those things that people say a whole lot but can mean so many different things. Going through all of these articles, they tend to mean any (or all) of these things:
- The Business Stuff- how to meet KPIs or the current big deadline or whatever.
- The User Stuff- how to actually provide value to the people who use what you make.
- The Technology Stuff- how to build something that will last a long time.
I don't get the impression that there is a quick way to build these skills. It seems to be that it's just a matter of experience.
Part of this is accountability. Being able to accept responsibility for the big picture can take you a long way.
Senior developers are more cautious, thoughtful, pragmatic, practical and simple in their approaches to solving problems.
This includes thinking about the impacts of your code in the long term, and being able to craft elegant solutions to the problems you encounter.
This one is really simple to express, but very hard to do. Make it known at your place of work, especially to those who make decisions: "I want to be a senior developer". If you don't tell people that this is the path you want, they probably won't just assume it.
As my favorite article said:
It’s not by learning new hot framework or language... To put it bluntly, it’s more about understanding what to build and if it’s worth building instead of how to build it... [A] Single person possessing knowledge of both “what” to build and “how” to make it happen can deliver superior results.
I think these are a lot more indicative of the developer culture, but aren't really all that useful. Don't take these too seriously, just have a laugh.
This came up so often that it made me laugh. As we all know, you can't get better if you don't type like a hacker on tv. A lot of similar advice to get good at your IDE of choice (gotta know all the shortcuts!). I think the kernel of truth here is you should feel comfortable with your tools, whatever that means for you.
A lot of advice to make sure you know the favorite thing of whoever wrote the article. Considering that there are still a ton of COBOL jobs out there, there is no particular technology that you need to know.
There is this pervasive idea in tech that you need to work on side projects in order to grow as a developer. This is just not true. You don't need to be spending every waking moment of your life working on some kind of programming thing.
In my experience there are three reasons to work on a side project:
- Learning- picking up a specific skill you didn't have before.
- Experience- doing more programming in total (making you more experienced).
- Fun- sometimes programming is a fun thing to do!
If you want to do all three at the same time, then side projects would probably be perfect for you! If that's you, then you're in the right place! Check out WeeklyProject.Club.
If that's not you, don't feel bad about it!
This didn't come up nearly as often, but a lot of people tell you that you need to read Knuth, or Pragmatic Programming, or Clean Code, or some other popular book.
Here's the list of articles I went over. Each article has a breakdown of its key takeaway. Since most of them are listicles, they just have each point of the listicle, since that was typically the only substance the article had.
- T shaped skills
- Feeling experienced in solving problems and being able to relate your current problem to problems you've seen before
- Develop quickly
- Find the ideal solution
- Teach others and help others grow
- Share what you already know
- Choose your path and stick to it
- Read "the pragmatic programmer"
- Master your programming language
- Learn your framework
- Become a master of your text editor / IDE
- Use your Version Control System like a pro
- Commit to doing Test Driven Development
- Refactor as a habit
- Learn software architecture
- Unleash the power of the command line
- Practice coding
- Asking good questions
- Be able to connect the dots
- Emotional intelligence
- Be able to teach
- Be able to learn
- Invest in your tools
- Typing speed matters
- Explore a different problem domains
- Write tests in your mind
- Spend some time in your enemy’s framework
- Figure out 5 things you wish were different about your current tools
- Be inquisitive of old sores in your company.
- How to Improve Web Performance
- Progressive Web Apps
- Popular Frontend Library + How to Manage Complex State
- Client Side Rendering vs Server Side Rendering
- Securing Your applications
- Docker and Containers
- Different Types of Databases
- How to Manage Sign In + Sessions In Your App
- Infrastructure as a Service and Platform as a Service
- About Continuous Integration
- Delivery, and Deployment
- Asking for help
- Communicating & collaborating
- Problem solving
- Design & back-end architecture
- Keeping up to date with emerging technologies
- Take responsibilities and execute
- Always go the extra mile
- Be a problem solver
- Be continuously learning
- Market yourself
- Be likable
- Be a mentor
- Always Choose Responsibility Over Pay
- Take Initiative
- Invest In Your Education
- Make Your Goals Known
- Make Yourself Valuable Outside Your Company
- Become An Asset
- Ask For A Specific Number
- Don’t Make Threats
- Don’t Talk About Why You Need The Money
- If All Else Fails, Go Elsewhere
- Read Stack Overflow
- Zoom out
- Do your own QA
- Don’t ignore the world around your work
- Separate your concerns
- Write short methods
- Seek constructive criticism
- Find a mentor
- Get really familiar with your text editor/IDE, and know its keyboard shortcuts
- Pair program with more experienced developers
- Listen to and respect more senior developers around you, as well as other juniors
- Use good method/variable names instead of comments
- Expose your ignorance, daily, Have side projects.
- Promotable Technical Skill Sets
- Promotable Intellectual Skills and Work Habits
- Be professional
- Think Business First
- Technology Second
- Raise the Bar … and Leave It There
- Hold Your Nose and Raise Your Hand (volunteer for projects)
- Don’t Pass the Buck
- Be a Lone Voice in the Wilderness (be a leader)
- Back Down Gracefully
- Develop a Killer App
- Stay on the Cutting Edge
- Feed Your Mind
- Find Your Yoda (get a mentor)
- Take Deadlines Personally
- Share the Wealth (teach others)
- Be Your Own Cheerleader
- Build Your Own Portfolio
- Schmooze It or Lose It
- Walk and Talk
- Hire Your Own Replacements
- Embrace the Gray Areas
- Keep Your Nose Clean (Not Brown)
- Consider a Switch -- for the Right Reasons
- Less Coding
- Architecting or “Hands On”
- More “paperwork”
- Thinking more strategically than tactically
- Less control
- An increase in responsibility
- More time resolving issues
- Toeing the company line
- You become “one of them”
- More meetings and more communications
- Potential for more external relationships
- Programming ability
- Critical thinking
- Challenge yourself
- Study the masters – and mastering
- Learn the classics
- Practice mindfully
- Mind your body
- Find & Embrace "Team"
- Learn to Say “No” the Right Way
- Get Your Code Reviewed
- Review Code for Others
- Code Accessibly
- Code for the Future
- Don’t Be Naive
- Security Matters
- Use Coding Standards
- At the End of the Day
- It Has to Work
- Code for Fun
- Follow the right people on Twitter and use it diligently
- Create your reusable code arsenal
- Don’t take everyone's word as gospel
- Listen to music without lyrics while you work
- Work on side projects
- Take a break
- Ignore Imposter Syndrome
- Learn something different (language, system, application type)
- Share your work
It’s not by learning new hot framework or language... To put it bluntly, it’s more about understanding what to build and if it’s worth building instead of how to build it... [A] Single people possessing knowledge of both “what” to build and “how” to make it happen can deliver superior results.
- Practice key skills
- Find Your Own Projects
- Diligence and attention at work
- Collaboration and learning from others
- Code, Test, Ship, Iterate
- Join a community
- Read extensively
- Work on pet projects
- Join or start a geek club at work.
- User interview skills
And there you go! Now you never have to read another article about "How to Become a Senior Developer" again. What will you do with the extra hours of your life? Let me know in the comments! Alternatively, reply with which of these you struggle with the most.