Shortly said, when you can handle entire development cycle, end to end.
Most of developers can quickly master the syntax of particular programming languages, but it does not mean Senior is a developer who mastered all syntaxes. Senior must be master of syntaxes as default , plus many other skills.
A software development cycle includes steps :
- Collect requirements from customer needs
- Choose programing methods and technical solution that fit requirements and the development team.
- Operate the continuous delivery process to bring the product to reality.
- Troubleshooting issues
- Provide guidances for other developers to let help them contribute to development process.
- Estimate development time.
Depends on each developer abilities, some can tackle all phases in 2 years, some can take 10 years, or even never for some reasons that I will mention at the end of this post too.
From above steps, we can deduce some skills that a Senior must have to afford the job
- Be patient enough to listen to customers to understand their real needs
- Have strong understanding about UI/UX to offer solutions, customers usually come with the imagination of the best scenario but most of time, bad things happen.
- Can explain technical terms to non-tech customers. Some time we need the customer to empathize with the development team on how difficult a feature can be, or why some feature is more expensive than others, or why something is impossible.
- Know how to integrate with popular 3rd party services. Those services focus on solving some common issues for common features such as sending & managing emails, upload / download file, or billing, etc. Integrate with 3rd parties helps to avoid re-inventing too much, reducing error prone and development time.
- Proficient with command lines & shell scripts. Most of processes of packaging products use command lines. Some modern IDEs provide features of package the product, we can use it instead of command lines, but in some situations such as deploying web servers , or to automatically build mobile application, we need to use command lines. A Senior of any kind of product must know how to build his application using command line only. IDE is a convenient tool only, does not dependent on it too much.
- Proficient with Version Control tools such as GitHub. Development process contains a lot of code change from many developers, some good, some bad, some worthy, some trashy, some full of risks. Senior must review other codes frequently to always aim the code quality to the highest.
- Proficient with debugging techniques to find out root cause of issues. Most IDE today support well breakpoints to stop the program at any point so that developers can double check everything. Some situation we have to use logs on console to figure out the problem.
- Can quickly understand the source code and project structure as well as business concepts to have quick diagnose for issues.
- Can create automation tests to early detect issues after each code change.
- Have knowledge about computer architecture & system design to provide optimizing solution when the application hit its limitation.
- Good at technical explaining, to provide guidances or support for lower levels developers, as well as to cooperate with other Seniors.
- Good at technical writing to contribute the knowledge base to the team.
- Have a few achievements in the past, such as completed features, completed projects, proven optimizing solutions.
- Have a sense of development time. Be able to give a reasonable estimation time is a point proving that a developer has seen thoroughly the development process.
To acquire above abilities, there is no way but Practicing. The point is we should know what to practice. Experience is not about number of years you go to work, it is number of things you have done. And the most important is, external validation is not necessary. You don’t need to wait for a validation exam or certificates to call yourself Senior, especially in the software development world. As I know that there is no official contest to generate the title for developers, but the modernness of current world is cultivated by many no-title heroes. We give respect to ones who contribute.
So now, what to practice ?
There are many ways to practice, via your work, on your free time, via courses , but I would like to suggest below :
- If you have a chance, do some small outsourcing projects. This will throw you to entire development process and get familiar with customer needs.
- If there is no chance to find an outsourcing projects, create one for yourself as a personal project. Do any application idea that you wish to have !
- If you have no idea, just try to clone some famous applications. !
- Watch Tech conferences. It’s easy to find them on Youtube now. This will up you to date on technology fields and listening to experts is a best way to learn.
- Read books about related subjects such as UI UX designs, Design Patterns, System Designs, Operating Systems, or even Management area if you are interested in or even Psychology if you feel you are having troubles when talking to clients. Books can gradually feed you with knowledge in an organized way and some day it will be useful all. Don’t expect any one book can change your life, one thousand books can !! .
- Be curios ! Spend your free time on learning new technology, compare to what you already know to see the different, the improvements or a new way to solve an old problem.
- Write down everything. Don’t trust your memory. Writing is a good way to learn again and learn deeper.
- Practice explaining complex & abstract concepts by talking to friends or writing blogs like me. 🙂
And last but not least, what will prevent you to level up ? , according to me :
- Do the same tasks by the same way in a long time. You won’t have a broad enough view and so you won’t have the deep view too.
- Too Passive. Remember that you are the change you need ! Never wait for a chance from somebody. People is tired enough to find chances for themself.
- Reject reading or learning.
- Satisfy with what you knew. You never know what you don’t know !
This post is just some thoughts with intent to provide more detail about an abstract term “Senior” in software development world. Hope this can help developers to double check the career status or help people on other fields to understand important criteria when finding or hiring developers.
Thanks for your time.