As a non-technical founder, it can be difficult to determine if your development team is composed of engineers that are on a senior or junior level, or somewhere in between. This especially becomes a big challenge when it’s time to hire your first engineer or expand the existing development team. In this post, I hope to help you understand how to assess the skill level in your team and what you should expect from each level.
Equally important is understanding which roles your software development team is missing when your business needs to grow and how skilled your new hires should be to create the perfect team composition.
It’s worth understanding some principles and rules so I’ll take the time to explain what our view on developer seniority is. A common practice is to make a difference between three categories: junior, middle (medior or independent), and senior developer profiles, but I’d also like to throw the concept of a responsible developer in the mix. Ask yourself these questions in order to reach that next stage in shaping your product and business for future growth: What are the duties of software engineers; how can you assess seniority; and what profiles are lacking in your current team.
Table of contents
- Titles, roles and skill level: what are they and how do they relate to each other?
- In general, there are three levels of skill and seniority
- An alternative way of looking at seniority: being a responsible developer
- What are (some of) the tasks of a developer?
- What profiles do you need when building software development teams?
- How to assess skill level when hiring engineers?
- Things to consider before starting your hiring process
- Examples of screening questions when hiring technical profiles
- What do software developers earn worldwide?
- What do madewithlove employees think about seniority?
- How a due diligence audit can assess the seniority of your team
Titles, roles and skill level: what are they and how do they relate to each other?
Before sticking a “seniority” label on someone’s head, it’s good to understand the difference between a job title, the role in the company, and the level or impact an employee has achieved.
Job titles: something to brag about
A job title is nothing more than the name the company gave to describe that certain position in the team. Job titles describe positions and are mostly used for marketing purposes, employer branding, expectation management, and business cards. They seldomly reflect the true impact one has on the business. Creativity in job titles is totally fine, as it’s just a name for a position. At madewithlove for example, we have CTOs in residence, software engineers, engineering managers, and mobile engineers. My job title is “People and Marketing manager,” but that does not say anything about the level of seniority I have within our team.
Roles: what work you actually pick up in the team
The role given to your employees tells something about the position in the company and team they have and what they are responsible for. A role comes with expectations given when taking on the challenge. One software engineer at madewithlove may have a totally different role on one project than on another such as being in charge of DevOps or cloud infrastructure, making sure design principles and way of working are clearly communicated, writing communication and documentation, or contributing when auditing companies. To measure how well one is performing, we’ll look at the outcome of their role and the impact they make on product and business.
Skill level: how good you perform your roles, or how much impact you have
The concept of job levels or level of impact probably comes closest when deciding on seniority. A software engineer that has been with us for more than 5 years might not necessarily have more impact (read: has more seniority) than an engineering manager who just started fresh from school. Or to say it more clearly: job levels translate to the impact someone has on the business, the increasing value for the company, the way they influence business decisions, and how others collaborate with them.
Employees with little to no experience in working in the industry are easily (and sometimes mistakenly) called juniors, while people with at least X years of relevant experience are automatically labeled as senior profiles. Another wrong assumption is using the number of languages or frameworks this person knows to define seniority.
In general, there are three levels of skill and seniority
While skill levels (junior, medior, or senior) are usually based on years of service or relevant experience, I believe that this classification system does not always work. There are alternative metrics like impact and responsibility.
At madewithlove, we use the term of T-shaped profiles. There are two axes to measure skill: horizontal and vertical (hence the T). The vertical axis shows you the deep and thorough understanding of their main trait: for developers, this is being able to produce quality code in the language(s) they master. The horizontal axis shows areas this person can provide value to the business: DevOps, product, or team management just to name a few.
It’s also crucial to understand that not every team needs this breadth to the same degree. It might be very wise to hire an extremely junior profile that can be trained to a powerhouse developer and is willing to adapt to your way of working if you already have complementary skills in your existing team. There are no bad habits to unteach. Hiring this kind of profile is only interesting if you have sufficient bandwidth to mentor/coach them.
1 .Senior profiles
These developers take on a high responsibility and have a big impact on your business and product. Vertically, they are very good at their job and have deep knowledge on building quality software, in our case by writing robust, secure and performant PHP code. Horizontally, they bring good knowledge to the table by helping the team with other relevant topics like DevOps, product, operations, team management, sales, UI, or design. The real skill lies in knowing when to take on responsibility and adapting behavior when needed. Seniors excel in this chameleon-like behaviour.
Seniors see and understand the bigger picture, take ownership of the product (not just their own tasks), and understand that proper solutions are more important than their own egos. A senior engineer takes pride in educating, mentoring, and coaching but is also willing to learn from all of his peers. They understand failing is part of the job and will eliminate risks when taking dangerous routes so if they are to fail, they will do so safely.
2. Independent profiles
Independent profiles to us mean that the person has mastered their vertical skills and thus are able to produce quality in the codebases and environments with which they are working. Medior developers also have a rather broad horizontal skill palette without being real experts in these other areas.
3. Junior profiles
Junior developers take on a lower amount of responsibility and have a rising impact. They focus mainly on becoming better vertically by deepening their knowledge and understanding what to learn. With the right mentoring, they will reach a higher skill level in a short period of time. The focus on horizontal development is low.
An alternative way of looking at seniority: being a responsible developer
Being a responsible developer is an alternative way of looking at skill levels. Strictly speaking, however, being a responsible developer does not necessarily replace the seniority scale. It is rather an addition. You can have a junior responsible developer, they will prove to be more valuable to the team faster. You can have a senior responsible developer that provides added value to the team, for example by mentoring, being very conscious of team values, or being extra T-shaped. At madewithlove, we value this responsibility more than pure experience but still take background into account.
Responsible development is simply an extra set of traits that we look for, across all levels. The core of this responsibility is about their own work and proactivity rather than taking responsibility for others.
To us, seniority in skill means responsibility, given and taken. Seniority means trustworthiness and authenticity; it means influence and eagerness. Responsibility means being a team player and understanding that product and business logic, client expectations, and customer happiness play a crucial role in developing software.
This is why madewithlove often refers to being a responsible developer rather than being a senior developer. Read more about the responsible developer profile here.
What are (some of) the tasks of a developer?
To better understand what an engineer in a product or SaaS company can be responsible for, let’s look at our current job offers. There are soft skills and hard skills required to do the job. The most common recurring duties of software engineers in our industry boil down, but are not limited to (we are not looking for completeness here):
- writing modern code while understanding that continuous refactoring is part of the job
- guarding over the quality of the code with a critical and pragmatic approach
- being responsible for implementing automatic testing because they understand it’s an integral part of delivering high-quality features
- maintaining and improving CI/CD pipelines to ensure a steady and stable release pace
- collaborating with people or teams and aiming to improve others as much as themselves
- implementing and maintaining development processes
This list can help determine what you value in your team. Not all of these traits should be mastered by any skill level. Some can be considered a minimum, like good quality code, but others, like evaluating and correcting processes, are only for the more experienced. It also heavily depends on the other profiles at your disposal (such as engineering managers or CTOs) and the needs of your company before deciding which responsibilities your development team should take on.
What are hard skills?
Now that we understand some of the main tasks of a software engineer, let’s take a look at some of the skills and traits required to do the job. The hard skills are easy to define and heavily depend on the industry and business you work in. Things like frameworks, specific technologies, knowing how to use different tools, infrastructure, databases, version control platforms, testing, or API related skills can be listed here.
What are soft skills?
Equally important are the soft skills we expect our software engineers to have. They depend heavily on your company’s culture, values, and vision.
Our applicants should:
- Like working in a SaaS and startup environment
- Protect company values within and outside the company
- Understand time management and being flexible
- Give and be open to receive honest and constructive feedback
- Know where and when to find the right information and share knowledge
- Work independently but also thrive when collaborating in teams
- Take ownership of their tasks and always try to deliver the best quality possible for the job
- Clearly communicate, taking the audience into account
What profiles do you need when building software development teams?
This question can’t be answered in a few paragraphs because every company carries its own legacy. Next to that, the phase in the development process your product is in, will also greatly influence which profiles and which mix you need.
The most common roles in modern software development teams boil down to the list below. It’s worth pointing out that, depending on the size of your team, one person can (and should) take on multiple roles. Engineering, for example, is not the only role a software developer can perform. Expanding a team means thinking about which roles are missing and which skill level is needed to fill them.
Being able to transfer responsibilities according to the shape and state of your business is key in fast and successful growth. Experience has taught us that realizing this and making effective changes within your own internal team(s) is extremely difficult and daunting, unless you are a complete outsider. This is why we often conduct a due diligence audit before starting to work with our clients. We’ll explain more about why and how we do audits below. Let’s take a closer look at the different types of roles you have in the common tech startup scene.
In the list below, we show which roles (in our experience) can be handled by one person. We note this in the “combines with” section.
Core: translate problem descriptions into coded solutions
Combines with: tech leadership, people management, DevOps, PM, PO
Backend developers are responsible for creating clean code, solving technical challenges, and making things work under the hood. They will make complex problems understandable and will challenge non-technical people if there are more efficient ways to solve certain problems. During the growth of your product, it might be wise to invest in dedicated automation engineers for proper bug reporting, continuous test automation, and deployment flows.
Core: translate problem descriptions into coded solutions
Combines with: tech leadership, people management, UI, UX, PM
While some (wrongly) used to think that these engineers are just there to make things pretty, it’s now known that more and more solutions involve complexity in the frontend of the application. Frontend developers make for a smooth user experience, optimize performance, think of and create user interactions, and make sure all users have the same (or at least a consistent) experience, no matter what platform or device they are using.
Core: translate problem descriptions into coded solutions
Combines with: tech leadership, people management, UX, UI
There is quite some overlap between the job description of a mobile and frontend engineer. However, there are some differences as well. Mobile developers will create functional mobile and native applications in an ever-changing environment. They contribute to testing, design, and development of the application, but are also responsible for releasing, supporting, and deploying it.
Core: infrastructure and deployment, CI/CD pipeline, tools
Often a role spread out over multiple people
Where we said the project managers are the nurses and the engineers the beating heart, the DevOps engineer is the hospital and the architect. They are responsible for the infrastructure that the product lives in, the speed and loading times. They know everything about cloud services, server loads, and logging. DevOps engineers know what scaling options the product has and will keep an eye out for security issues. Infrastructure is probably one of the more scary and difficult things in software development, so at one point in time, it’s best to have a dedicated FTE assigned to it. But this is a role, not a title, and should be shared by more than one person since it could also involve 24/7 monitoring and response.
Quality Assurance engineers
Core: automate testing
Combines with: other engineering roles, DevOps
The main responsibility of Quality Assurance Engineers is automating the process of guarding the quality of the product. They implement the right tools and set up processes for the whole product and engineering team that help them keep the quality high.
Core: research and define what should be made, in which order, based on input from all stakeholders
Combines with: UX design, UI design
Building the right thing is as important as building something at all. Product managers help define and shape the context by interviewing users and stakeholders, testing hypotheses, and clearly defining the context for the rest of the organization.They conceive and shape features, rethink sales or any other possible funnels, analyze data, discover new areas the product can bloom in, and remodel specific functionality. Product managers can translate business goals into workable solutions while continuously evaluating what is being built and how the product is evolving.
Core: act as the voice of the customer, internally
Combines with: tech leadership
In traditional scrum, a product owner is normally included in meetings to act as the voice of the customer, at all steps in the process. They help define priorities and desired interactions. They help keep the customer close during the day to day development of a product but cannot replace direct customer research. They work closely with members of the development team.
UX Researchers, UX designers, and UI designers
Core: making sure things will be designed properly based on research and user input
You’ll find many definitions for designers on the web but the ones in vogue now are UX researcher, UX designer, and UI designer. These titles point out the most important roles within the design process but aren’t necessarily fulfilled by the same person.
The researcher figures out the needs of users; this can be done through quantitative analysis (interpretation of data or survey analysis) or qualitative research (interviewing or shadowing). A researcher focuses on getting a clear vision on the problem to solve. They also validate the solutions the design team have come up with.
The UX design role focuses on the solution: what features, in what hierarchy, and what flow. Their role is to think about the experience of the user from the first connection with the product until they churn.
The UI design role goes even deeper into the solution. They are specialists on the level of the interface and human-computer interaction. They define how a user will see and hear the product and how any interactions with it should work. UI designers make sure the product is designed in a consistent way. They are responsible for the aesthetic experience of your product. Think visual touchpoints, buttons, typography, colors, and animations.
CTO (or CTO at interim)
Core: technical strategy, culture
Combines with: product leadership, lead engineering
While the Chief Technology Officer will lead the technology and engineering department of the company, they will also be involved in road mapping, defining architecture, and guiding the team to find answers for the most challenging questions. However, the role of a CTO will heavily change depending on the state of your product and business. At the early stage, the CTO might be doing hands-on development while in bigger companies the CTO will usually be more involved in management and board meetings. They manage the product and engineering teams and are the visionary that steers the product in the right direction technically. Many companies make the mistake of promoting their best engineer to CTO when the skillsets are entirely different.
The ever changing nature of the CTO’s role is one of the reasons why madewithlove offers CTO at interim as one of our services. We have multiple profiles that can take the temporary role of a CTO in start-ups and scaleups to get the ball rolling. Once we are making progress, the search for our own replacement will start. In this phase, we help the clients with sourcing and recruiting.
CPO (or Head of Product)
Core: product strategy, defines why the product should be made
Combines with: product management, UX researcher, UX design
The Chief Product Officer or Head of Product sets the product vision and aligns it with the company vision and goals. They manage the roadmap while translating between company and business goals and the product changes needed. They also communicate these changes to the engineering team. CPOs have a similar role as CTOs, but the size of the company usually dictates if you need to hire multiple people: do they have to manage multiple product teams or just one, and are they performing the work themselves as individuals or mentoring and leading a team of product managers and engineers?
Core: technology choices and people management
Combines with: Engineering manager
The VP of Engineering is more focused on the operational and tactical side compared to the CTO who is more concerned with strategic decisions. A good VPoE helps the engineering team with best practices like knowledge sharing between teams (breaking down silos). They manage deadlines but also take care of the human aspect of managing people. Learn more about the tasks of a VP of Engineering if you have a larger organization.
Tech team lead
Core: decides how to build things tactically
Combines with: CTO, software engineer
The main tasks of a tech team lead are to mentor individuals on a technical point of view, to embolden engineers, and to spread knowledge teamwide. Tech team leads are responsible for the technical quality of the project and ensure that team members share that responsibility. Sometimes, they also help to shape technical discussions (but are not authoritarian). Sometimes this is referred to as a lead engineer.
Core: processes, people management
Combines with: PO, tech lead, other leadership roles
While developers may be the beating heart of the product, the engineering managers are the monitoring tools, the nurses and the prescriptions, all in one person. They make sure the product will reach the finish line and will keep an eye on all the processes in place while making sure everyone knows what to do. They monitor the working environment and will guard over communication and feedback loops, focused on the people and culture of a team. Guarding psychological safety within the team is an important aspect of their daily job.
A lot of modern software teams don’t have dedicated project managers anymore, but instead assign project management as a hybrid role throughout the team. The engineering manager makes sure the teams grow towards this mindset.
How to assess skill level when hiring engineers?
Madewithlove is an expert at hiring software engineers, CTOs, and engineering managers — we even offer it as a separate service to our clients. In the past five years, we’ve hosted thousands of interviews with applicants all over the world. When it comes to identifying senior talent and developing a hiring strategy, we know the secrets.
Especially in the uncertain times that 2020 has brought us, it’s important to think about your hiring strategy when business begins to pick up again. Andreessen Horowitz rightfully stated: “Like race car drivers restarting after a caution flag, the companies that can accelerate the fastest out of this forced slowdown will have a lasting advantage. Speed, quality, and precision in hiring will matter more than ever.“
Things to consider before starting your hiring process
- What is my ideal team composition?
- Which roles are missing? How many people, with which profile do I need?
- Which hard skills do I need? Which soft skills do I value?
- Is my hiring process ready for the speed I want to hire with?
The interviewing process
It’s extremely hard to assess the correct skill level when you don’t have a good recruitment process in place. As pointed out above, there are many things to consider before hiring. Let me explain how madewithlove takes these into account when hiring for our own team or for our customers.
When doing CV screenings, we don’t care about education. We briefly check if the technical skills roughly match what we have in mind for this position, but we are not looking for a 100% match.
We also evaluate on how candidates present themselves in the interviews. You can read a few tips on that on our LinkedIn page.
We’ve hired plenty of Symfony developers even though we use Laravel in most of our products. A senior developer should not rely on their expertise in one framework or language, but should be an expert in understanding design principles, clean code concepts like DDD and SOLID principles, and object-oriented programming. It’s easy enough to learn and become proficient in a new technology if you understand the bigger picture. The real question is, do they want to make this change if needed?
Soft skills & adaptability
Next to that, we look for signs of the aforementioned “T-shaped profile.” What makes responsible developers stand out for us is also their ability to enrich our company in other fields besides engineering. We call this “value add” rather than “value fit.” Are they good at writing or giving keynotes at conferences? Can they master complex challenges in the world of DevOps or maybe they are excellent mentors with leading capabilities? Do they have leadership or product experience? Being good at your job is one thing, but having skills in other aspects of the work will make you stand out. When working in a startup environment, your job will always be more than just programming and producing quality code.
Examples of screening questions when hiring technical profiles
Some questions I regularly ask during the first stage of the interview are:
- How do you build trust when starting with a new team?
- How would you describe seniority in software development?
- What project are you most proud of and what was your part in it?
- How does your perfect feedback loop look?
- What is the last thing you’ve taught yourself?
- How would your coworkers describe you?
How do we check for these abilities during interviews? Even in our non-technical phone screen, we can quite accurately assess what type of developer this person is and roughly what skill level they have. The main focus in the first interview is on soft skills.
We’ll ask what the applicant’s vision is on seniority levels, where they see themselves, and we’ll dig deeper on previous work they’ve done and what their responsibilities were. We ask what they are most proud of and why. Always ask why. We want to know how they grow, learn, and keep up and what they see themselves doing in our team and in their near future. We want to know their vision on company culture, feedback loops, organizing teams, and, most of all, we are interested in the questions they ask us during the interview.
A technical assignment is the easiest way to assess hard skills, but very difficult to get right. A good test can be solved by any skill level and should assess what you think is important. For example: should they use a specific framework or not; do they have the required problem-solving skills; do they have an understanding of a certain technology or technique; can they develop with the right paradigm like API-first; are they using functional programming or TDD or something else interesting?
Technical assignments remain a controversial topic. We always make sure the candidate gets plenty of feedback and not just a yes or no. There is a checklist of 8 criteria every reviewer goes through when evaluating the assignment. Next to that, we value anonymity to avoid any form of bias. This can’t be achieved in a technical interview or pair programming session for example. Read more on our hiring process.
Technical assignments are also controversial because they take time, for which candidates don’t get paid, and the assignment sometimes seems as if it is client work. There’s also the aspect of inclusion here: not everyone has the spare time to complete an assignment in only a few days. That is why we use a clearly non-production problem and give candidates plenty of time so that those who have to combine a job and other responsibilities (children, elderly people, or people with a disability to take care of, for example) still have a chance to apply. They get a full 2-3 weeks to complete the task at their leisure.
What do software developers earn worldwide?
What should they earn? Enough. The average a software engineer earns worldwide obviously depends on the country and industry they work in, but also their seniority level and expectations of growth. Most people want to grow, so make sure your company can accommodate that. Give the team the right support and tools to do this or your skilled developers may leave after receiving a more attractive offer elsewhere.
It’s clear that senior profiles should earn more than entry-level engineers, so it’s worthwhile for developers to keep focusing on continuous growth and pursuing the best and most responsible version of themselves. For managers, when building your company culture, make sure to prioritize the human part of the business and keeping your people happy. Especially in these times where working remotely is becoming the norm, you are no longer competing against the companies next door but the whole world is now your playground.
What do madewithlove employees think about seniority?
We recently asked our team how to know when a software developer has a high seniority level. Here’s what some of the madewithlove people said.
A senior knows when to slow down.— Wouter Sioen, software engineer @ madewithlove
Software engineers want to impress their colleagues and ship code quickly. A senior will take time to critically think about their approach then discuss and collaborate with colleagues. That collaboration is essential to the success of the product.
I like to think of it as a mountain guide versus a tourist doing trekking: you know the safe paths, what things to eat, and what animals inhabit the place.— Vicky Jáuregui, former software engineer @ madewithlove
A senior developer will guide the rest of the team and help them through the sticky bits. Your team members should take the time to answer questions from others, point out potential difficulties, and give proper feedback.
Understand that intuition is a reliable tool.— Jonas Drieghe, software engineer @ madewithlove
Gut instinct can be leveraged by senior developers with the confidence and experience to apply it appropriately. Intuition is not blindly trusted but instead recognized as another arrow in the quiver.
A senior can see the future.— Steve Tauber, CTO in residence @ madewithlove
Software development is less about creating new functionality and more about understanding how these changes will influence the larger product. A senior engineer will understand the impact of their decisions in the far future and incorporate the tradeoffs into their decision making.
It boils down to “why” vs “how.”— Geoffrey Dhuyvetters, frontend engineer @ madewithlove
Understanding the context behind the request will allow a senior developer to more adequately address the task at hand. Instead of “just coding things” they ask questions and think about what’s missing from the issue. They see the forest.
They understand they are working with computers, but working for humans.— Yannick De Pauw, Talent and marketing manager @ madewithlove
Although developers are creating code that is interpreted by computers, ultimately it’s in the service of humans. The goal is not to create the most efficient code, but instead, one that is understandable by other engineers and that solves the real-world problems of users.
Humans are complex and as such we evolve in complex manners.— Emma Fabre, software engineer @ madewithlove
Although a developer might have a lot of experience, they will still make mistakes. There will be times when they need to revisit things they’ve previously mastered. Senior developers recognize this is part of being human and that there is no point where they can say “no mistakes past here.” It is an exercise of ego.
How a due diligence audit can assess the seniority of your team
Why do most startups fail? We have a separate blog post for that. But thoroughly auditing your startup can help you achieve success. This is how we do it.
As mentioned earlier, it’s often easier for outsiders to judge the state of your product and team. We have discovered that thoroughly auditing a company before blindly building the product and features the client had in mind will always result in delivering higher quality.
By doing a technical due diligence audit, our team uses interview techniques to understand the state of product and engineering. We point out problem areas, scale the team on different indications, and provide a clear conclusion by analyzing codebase, toolings, unnecessary abstractions, test coverage, and overall infrastructure. Good engineering policies and procedures are essential so we’ll also look for improvements from conception to delivery, covering product planning, task prioritization, code review, and releases. If you are interested in knowing more, take a look at our audit service.