As a Senior Software Engineer of many years experience, I am involved in every aspect of the life-cycle of a piece of software. From the design through to implementation and testing I get involved in every part of the creation and delivery of a software project.
A question that I am often asked by various colleagues is “What makes a Senior Software Engineer?”. There is no single or simple answer to this question. I am sure that every Senior Software Engineer will answer this differently. They will consider depth and breadth of knowledge or years of service amongst other traits. Both of these are perfectly reasonable and sensible answers. I would say that it all boils down to one trait.
A Junior Software Engineer builds using frameworks and architectures. A Senior Software Engineer builds the frameworks and architectures.
I think this statement cuts to the core of the difference between Junior and Senior. A Junior will take the frameworks and architectures that are available to them, and build applications with them. A Senior will build the frameworks and architectures used by the Juniors. They enable the Juniors to do their day-to-day job by building the tools and providing the structure they need.
Where I currently work, we have developed a mobile app for the car fleet sector. The mobile app needs to consume various services to retrieve and / or update data. These services need to be highly secure, available and scalable. The services also needed to be consumed by web applications as well as the mobile app, so they need to be ubiquitous by all devices that are capable of using the HTTP protocol.
The final solution utilised a service bus architecture in conjunction with ASP.NET Web API. The service bus was bound to a web enabled listener which monitored new service requests as they were created, and routed the service request to the appropriate endpoint. The mobile app sent many different types of data to these services, so the services needed to be flexible enough to handle any type of incoming data, and be extensible enough so that additional data types could be added later downstream.
It should be obvious that creating such an architecture is beyond what a Junior would be capable of producing, which is why a Senior should instead be tasked with creating such an architecture. Only someone with sufficient knowledge, design and architectural skill would be capable of architecting, designing and implementing such a complex piece of software. There are many moving parts requiring a deep understanding of the system and its interactions with the various other components. Appropriate abstractions need to be created, coupled with suitable design patterns, base classes and structure.
When I first started out as a software developer all those years ago as a novice straight from university, such a challenge would have scared me half to death. I wouldn’t have known where to start. Now I relish such challenges, and enjoy building the frameworks and architectures which are used by the rest of the team. It takes time to gain the requisite skills, knowledge and confidence. Over time, you are slowly able to create bigger and more complex software systems. From your first “Hello world” to building an entire framework or architecture takes many years of continued learning and mastery of your craft.
So to become a Senior you need to enable other software engineers. By enabling other software engineers is the path to becoming a truly great Senior Software Engineer.
If this article was helpful to you, please do hit the 💚 button below. Thanks!