At Apiumtech, we believe that it’s very important that each member of the team is aware of the career path and the possibilities of growth in the company. That is why we decided to write an article about it where we will be describing the Career path of a software developer at Apiumtech. Let’s start off by explaining why we believe it’s important to have it quite clear in mind.
THE IMPORTANCE OF A CAREER PATH
We absolutely believe in the power of the team, of a healthy team. By helping your employees develop their career plans within the organization, you’re keeping them engaged and encouraging them to work to reach that next step. We don’t want our employees to leave in order to advance in their career, we want them to stay with us and advance with us, and to be very honest, until this day, we have only been growing. Most of the ones that were here from the start are still here and we’ve had great new elements. We are loyal to our employees and can confirm it because we have gained loyalty from them, which means they trust us as much as we trust them. Actually, the success of Apiumtech relies on employees that are invested in the company.
THE SOFTWARE DEVELOPER SPIRIT
What is important to know about the way of thinking here at Apiumtech is that we don’t really look at the number of years of experience that you have. It’s not that we don’t care about it, it’s just that we don’t think that it’s what makes you a good developer. We want the members of our team to know the concepts of programming, the academic ones. Why? Because we believe that developers that don’t know about the concepts are developers that didn’t really ask themselves the why behind something. And that is primordial for us. You might not agree but that is how we think here at Apiumtech and, we have been able to find other individuals with the same vision! That is why we always say that curiosity is a must and we look for people that are quick when it comes to reacting to feedback.
FRIDAY OPEN SPACE
Every Friday is considered Apiumtech’s day. We all try to use this day to help each other in case we need to, to ask questions, etc. That’s when the Tech team has Open Space meetings where they all reunite and each one proposes a subject to be discussed. It’s related to the projects they are working on, if they encountered challenges, etc. in order to get the opinion and advice of their colleagues. Once the subjects or topics are pitched, the team votes for the most interesting topic and once the vote is done, discussion is opened! You can read more about it.
THE CAREER PATH OF A SOFTWARE DEVELOPER
In our “Tech Teams”, we have different roles and depending on your knowledge, you start in one of them. The first step is being a Junior Software Developer, then becoming a Full Stack Developer, a Senior Software Developer and to finally be a Tech Lead. For each of the four roles mentioned, there are three levels. To pass from a level to the other, you need practice and literature. So again, we don’t only believe in experience. Concepts, concepts and again, concepts! We don’t only look for concepts, we look for the perfect balance, we learn by doing.
JUNIOR SOFTWARE DEVELOPER
1 – Unit Testing Level
Unit testing is the minimum level that all of Apiumtech’s technical team members should have. If there is no such knowledge, the person will usually have to gain it during the probation period. At this level, a Junior Software Developer should at least understand concepts as refactoring, encapsulation and polymorphism. Also, he should know the differences between unit, integration and functional tests as well as their implementation.
2 – Object Oriented Design Principles Level
Every person that is part of the team should have a similar culture and a full understanding of all the concepts and technicist. At this point, we strongly recommend the developer to read this amazing book: Object-Oriented Design Heuristics by Arthur J. Riel. Also, that’s where you start getting comfortable with concepts as polymorphism, interface segregation, encapsulation and topology. Finally, we expect the developer to learn good & bad practices; avoid getter & setters, singleton pattern, procedural coding, etc.
3 – Design Patterns Level
Here we’re talking about a complete understanding and familiarisation of the main design patterns, you absolutely must be able to read, see and understand every single class that Apiumtech has in its prototype seeds. At this level, we suggest to read Design Patterns by Erich Gamma. Of course, we expect you to know about most of the used patterns and a total comprehension of the patterns that we use at Apiumtech.
FULL STACK DEVELOPER
1 – Test Driven Development Level
Here it’s basically the perfect cohesion between the advantages of unit testing and design patterns. At this point, you’re prepared to work with any technology. You must have noticed, at almost all the level we strongly recommend you to read a book that will help you will the concepts and increase your knowledge which you will apply at work. Here, we would recommend to read Refactoring by Martin Fowler. Also, you should obviously know all the advantages of TDD and the difference between TDD and FDD (feedback driven development).
2 – Basic Domain Driven Design Level
Guess what? Here you should be able to produce an almost perfect code, without duplications or coupling. What is the book at this level? Implementing Domain-Driven Design by Vaughn Vernon. You should also reach a complete understanding of all the layers in Apiumtech’s seeds projects and a strong understanding of the SOLID principle.
3 – Advanced Domain Driven Design Level
Besides producing a perfect code, we need to structure it correctly to achieve scalability, maintainability and system testing easiness. Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans is a great read here. You need to have an understanding of the bounded context, CQRS, infrastructure services and domain projections.
SENIOR SOFTWARE DEVELOPER
1 – Continuous Integration & Delivery Level
Every Apiumtech project has CI. We believe that it is essential not to lose time in building the project or deploying it and that’s why any repetitive manual task must be automated. What do you need to master? The set up and configuration of jenkins. You should be able to set up a CI project and do the automatisation of all the processes and create pipe lines.
2 – Enterprise Integration Patterns Level
A good testable code is only the top of the iceberg. There are techniques that allow you to build huge enterprise platforms. Those are the patterns about the connection of different modules and pieces of the same application. We ask the members of the team that have reached this level to read Camel in Action by Claus Ibsen and Jonathan Anstey. At this point. you will be able to some queue systems management and system idempotency.
3 – Concurrency Patterns Level
Once the sequential code is mastered, there are some upgrades to make it run in parallel. You must absolutely read Reactive Design Patterns by Roland Kuhn and Jamie Allen. At this level you’re nourishing your typesafe technology stack knowledge: scala, play & akka and you will be able to use async techniques.
4 – TECH LEAD
1 – Sprint Management Level
Obviously, every good team needs a leader, someone who can have a general overview, manage and monitor the tasks. In the sprint level, you need to read 2 books;
- Agile Estimating and Planning by Mike Cohn
- Peopleware: Productive Projects and Teams by Tom DeMarco
2 – Meetup Presentations Level
This level is to develop your ability and experience to organise a meetup and your ability to defend all the presented concepts. You need to have the capacity to motivate and encourage people. We believe you reach this level once you have given 10 successful presentations.
3 – Performance Test and Analysis Level
Other than producing a code that is perfect, it must meet the given performance requirements. You must know how to use tools for the performance data gathering and how to analyse them. You should ave a knowledge of a jmeter or of a similar framework as well as have the capacity to understand the results, analyse them and find the bottlenecks. I you think this type of career path is made for you and would like to grow with us, we always welcome people that think like us and are as passionate as us, so obviously we would love to meet you! You can check out our job section or even contact us!