Becoming a senior developer, how to level up in your career.
I've been a senior developer for decades, worked in agencies (marketing and software) large and small, and interviewed 100s of candidates.
Here's everything I think you need to know...
Not being the best coder
Be passionate about coding, about the end result and every step in between.
If I was to drop one "truth bomb" #1 about becoming a senior, it's not about being the best coder.
I'd say that's not nearly as important as you might think. Being good is enough, but being open-minded is far more relevant.
Your ability to think is far more useful, to sit in a meeting with a client or colleague and be presented with a problem. It's not thinking "I could write that now, we can have that ready tomorrow" Being a senior is about thinking "what's the actual problem being presented here".
"What could we change about how we're going about this problem to make the problem either go away completely, or make the problem simpler". This will seem counterintuitive to most but it's the difference between delivering a solution to a problem, and being the solution to THE problem.
Being open-minded to the solution too is essential. Technology moves at such a pace these days, you may not know the answer to a particular problem. That's OK! Knowing where to look for the answer is what will separate you.
You could easily spend weeks coding an application that fits the brief built in something you know but that isn't necessarily correct.
For instance, recently I was researching how to do facial and object recognition on images and videos. There are some libraries available for PHP (my "primary" language") and I could have stormed in and started coding. However, opening up the possibilities I’ve discovered a ton of APIs already pre-built that do exactly what’s needed.
However, before you say “Duh, of course there are”, the next step is to evaluate the cost to implement these APIs. Upon further inspection and with the client’s expected scaling, the APIs were cost-prohibitive. The solution that was presented in the end was something based in Python, custom written in just a few lines of code, and I’ve never touched Python before!
Which leads me to being open-minded. Truth bomb #2.
Not everything thinks like you.
In fact, you’ll be hard-pressed to find anyone that thinks like you do.
Some of the best suggestions for problem solving have come from the most random of places, and the most junior of the team.
Learning to listen to others and their way of thinking will fundamentally change the way you approach problems. Coding is about a series of commands in a language a computer can understand, in the hope that it will produce the result you were looking for.
There are no right or wrong answers. Yes, there are certain practices and methods you should probably follow but if you put all your code into a single controller with a huge loop of if/else statements or produce the most elegant, testable code, separated in providers, services, traits and single invokable controllers, the result is largely the same.
This is a contentious issue, I can hear some juniors thinking “Yess!!” and some seniors thinking “This guy is mad, think of the technical debt”.
But here’s truth bomb #3 and #4.
The client doesn’t care
The client doesn’t care, and I’ve never worked on a single project that doesn't have technical debt regardless of the approach.
Once you get to a senior role, other than the person above you, I can assure they don’t care how pretty, refactored, efficient, documented and tested your code is, as long as it works, the client is happy and prepared to pay, that’s all that matters.
The next point could be truth bomb #5 but ultimately, it’s THE truth bomb.
You can know every language, framework, shortcut, and clever katas out there but if you can’t communicate your thinking effectively to your team or seniors, and you're not focused on delivering value to your clients, you’ll never make it.
It’s as simple as that, the above will change everything about your senior status.
Become a challenger. A challenger to yourself, and a challenger to the way things are done. Don’t sit in a meeting, receiving a brief from the client, or manager and think “Oh man, that’s a whole bunch of refactoring, we’ll need to migrate the data tables from x to y”.
Come out of that developer thinking, and listen to the requirements.
Could you do it a different way?
Is this just a hunch about the way the customer usage figures are pointing?
Could we test the theory first?
Or build a separate area for only some clients…
For instance, and it’s a very simple example, but a contact form on a custom website could be a form hooked into a POST request that generates a mailable which is sent through your SMTP configuration.
Or it could be a POST request to a Zapier endpoint, which ends up filtering to an email.
But the client, a week later, asks for the contact form to send the data to their Google spreadsheet or CRM system. Which ones is going to be easier for anyone to change moving forwards?
Always learning, always pushing
Final truth bomb, #6 for those counting, continue to push yourself into uncomfortable things.
Try a completely different language, setup or approach.
We are lucky to have so many well documented, open-source technologies at our fingertips.
For me, it’s PHP, Laravel, Tailwind, Alpine JS and the ecosystem around this.
But this isn’t everything and getting stuck in this tunnel-vision focus on just these technologies will not push you into a senior role.
Purchase one of the many Udemy courses for instance. Try Python, Django, Flutter, Dart, Vue.js, Angular, Go or even WordPress! Pick up a front end framework and try one of the many “no-code” options for a back end solution.
Without knowing what’s available to you, or your team, you’ll push away great ideas, simpler implementations and more effective and efficient solutions.
It’s ok that YOU don’t know how to do it, you can either pick it up as you go along, or find an expert who can guide or mentor you through it.
If, like me, you started (well) over 10 years ago in development, then things have definitely changed rapidly in the last 5 years alone.
How does your decade-old thinking and knowledge help with technology that was released 6 months ago?
Knowing the first version of CSS (remember CSS Zen Garden) definitely won’t help you configure Webpack, Gulp or Grunt.
Knowing just the framework is okay these days.
Knowing Laravel (or even WordPress) but not fundamentally PHP is fine.
Knowing Tailwind or Bootstrap but not <div style="clear: both;"><div> is amazing frankly, lucky you!
Finally, two classic phrases have stuck with me throughout my career, and I think of them often, especially when I'm stuck in a rut or need to change my way of thinking.
When you get to senior level you need to hold both of these close, and repeat them often!
CFO: “What happens if we invest in developing our people and then they leave us?”
CEO: “What happens if we don’t, and they stay?”
"The most dangerous phrase in the language is: we’ve always done it this way” - Grace Hopper.
I love to get feedback.
What are you struggling with? Within your team perhaps, or convincing your managers you deserve to go to the next level.
I'll try and help, so hit me up on Twitter @c_southam!