Why is it that some senior developers are highly successful and have no trouble getting promotion after promotion, while others with the same technical skill set struggle?
Being a software developer isn’t all about having good technical skills.
Successful developers know that technical ability will only get you so far. If you really want to be successful as a senior developer, then you need to foster the following habits.
1. Not being afraid to ask questions
If you don’t understand something, then ask.
I have seen this time and time again from junior and mid-level developers.
They are afraid of asking questions because they think it will make them look stupid. There is so much to learn in software development, but no one knows everything.
If you don’t understand something, then chances are someone else on your team won’t understand it either.
You will often see developers preface the question with “I should probably know this, but…”.
If you really want to be a good senior developer and team leader, then ask the questions you think your team should be asking, even if you already know the answer.
"Once you have learned to ask questions – relevant and appropriate and substantial questions – you have learned how to learn and no one can keep you from learning whatever you want or need to know."
2. Test your own code
Most software developers will do some testing of their own code before handing it over to the QA to test.
Usually, however, this is limited to just “happy path” testing.
Senior developers won’t just test what the application is supposed to do, but also test everything that the application is not supposed to do.
By the time your code gets to the QA to test, it should be incredibly difficult for them to find an issue with it.
3. Being quick to ask for help
This one comes down to developer pride. Yes, you do need to work things out for yourself, however, at some point you need to admit defeat.
I have seen junior developers spend the whole day stuck on one problem. They keep hitting their head against a brick wall trying to solve it.
It is not usually until the next day at stand up, they admit they are blocked and wasted a whole day trying to fix their code.
Usually another member of the team had exactly the same issue, also wasted a day trying to fix it, but can show you how to fix it in less than 10 minutes.
Don’t be afraid to ask for help. If you don’t have a team, then ask the strangers on the internet. Stack Overflow or even Twitter can be great places to ask for help.
“No one goes it alone. You have no archenemies planning your demise. The world wants you to be happy and to succeed. Ask for help. There are people who have made the journey before you. Reach out to them.”
4. Be reliable
The most successful developers and successful people in general are very reliable. The best way to build trust is to always do what you say you will do, repeatedly.
Keep a running to-do list of all the things that you need to get done. List them by priority order and tick them off throughout the day.
“If you’re unreliable it doesn’t matter what your virtues are, you’re going to crater immediately. So doing what you have faithfully engaged to do should be an automatic part of your conduct. You want to avoid sloth and unreliability.”
5. Question everything
Just because something has always been done a certain way doesn’t mean that it is right or the best way of doing it.
People often just follow what everyone else has done without asking, “Is there a better way?”.
This isn’t just true for software development, it is also true for life as well. If you are working 9 to 5 just to earn money, is that really the only way it could be done?
In many cases, you can learn a lot by trying to answer a question than you can from the answer itself.
6. Automate everything
Why do something twice when you can do it once?
If you find yourself doing the same thing over and over again, then it is probably worth your time automating it.
Maybe there is a report that you have to compile each month for your manager that takes you an hour to collect all the data each month. Even if it takes you 3 hours to automate it, you will still save yourself 9 hours over the course of the year.
Not everything is worth automating, but even small efficiencies when compounded over a long period of time will see big improvements.
Things like setting up aliases for frequently typed commands. You only save yourself 3 seconds each time but if you are typing the same command 10 times a day that is 30 seconds a day, 2.5 minutes a week, and 2 hours and 10 minutes a year.
Superproducers outsource and then automate all activities except those within the realm of their mastery, allowing for purity of focus and freeing up huge amounts of time.
7. Take ownership of your work
If you have written a piece of code, it is your responsibility to make sure it works and finds its way into production.
Senior developers take ownership of the work that they produce. It isn’t just about the work, it is also a reflection on themselves.
You are only as good as the work that you produce, own it.
8. Keep Learning
The best software developers are constant learners. When you get into software development, you are signing yourself up for lifelong learning.
There are always new languages and frameworks to learn. Follow your curiosity and you can’t go wrong.
Try and make it a habit to learn from others, no matter what level they are at. I have always been surprised by senior developers who don’t listen to junior developers, as if somehow they know better.
Everyone in life has their own mix of experiences, that is what makes us all unique. Learn from others and be open to sharing your knowledge freely.
9. Leave the code in a better state than you found it
Technical debt always has a way of growing exponentially over a project's lifespan. Tickets are created in JIRA, so they aren’t forgotten, but they never get touched and eventually get archived.
One way to combat this is to try and improve any code you are working on so that it is in a better state than when you left it.
Don’t just add to the spaghetti of code that is already there. Try and see if the code can be improved, so it is easier to add something in the future.
“I’m a pretty lazy person and am prepared to work quite hard in order to avoid work.”
10. Get very good at solving problems
Contrary to popular belief, your job as a software developer is not to write code, but to solve problems.
The best way to get good at solving problems is to look for them. Your Mum probably told you “Don’t go looking for trouble” but if you don’t have any problems to solve how are you supposed to get good at problem-solving.
Are there any issues that keep popping up time and time again, but everyone just solves the symptom rather than getting to the root cause?
While getting a coffee, have you overheard colleagues complain about how long something takes to run?
Problems are all around us, but most people are too lazy to look for solutions for them.
Dig deep, find the root cause and come up with a creative solution. Do this repeatedly. That is how you get good at solving problems.
11. See the big picture
Most developers have a very narrow field of vision. They don’t try and look beyond the application they are working on to see how it fits into the bigger puzzle.
Successful developers aren’t just great programmers, but are great business people as well.
They understand the key aspects of the business they are working in, which makes everything else they do more impactful.
Look around the company you work for and answer these questions:
- How does your business make money?
- What are the key problems that your company is facing?
- Who are your companies biggest competitors?
- How does the application you work on impact the rest of the company?
- How does the application you work on help make your company money? (What problem is it solving?)
While answering those questions, draw out a map of your companies applications and try and work out how they all link together.
12. Think first, code last
Most of the work for developing software is done in your head, not in your IDE.
Senior developers spend a lot of time planning out how software is going to work and how all the pieces are going to fit together before they even write one line of code.
Writing code is incredibly time-consuming, so you don’t want to waste time on writing code that you didn’t need.
Before you develop any new feature, plan out on paper first how it is going to work. Have you thought of every scenario? Are there any edge cases where your solution isn’t going to work?