Software developers (also known as coders or software engineers) develop software. Like firefighters and butchers, bakers and candlestick makers, the job title seems pretty self-explanatory. But that presumption wouldn’t do justice to the huge variety that the umbrella term ‘software developer’ covers.
In 2021, software development is a sprawling field. There is a huge and growing variety of different kinds of software out there and it has all been built by software developers. But while all software is built from code and ultimately runs on hardware of some kind, there is a vast world of variety within that.
There is the application software we are most used to interacting with as consumers and professionals. There is systems software that forms the layer between hardware like smartphones and laptops that application software runs on. There is embedded software essential to electronic devices and systems from household appliances to cars and industrial robotics. And that’s just three of the main categories of the different kinds of software designed and coded by software developers.
Software developers share some fundamental knowledge and skills but also tend to be specialists in a particular kind of software, for example, user-facing application software or embedded software. And within those broad fields, software developers have a particular skill set (tech stack), such as the programming languages and frameworks they are experienced in.
This blog post will give you a broad overview of:
K&C - Creating Beautiful Technology Solutions For 20+ Years . Can We Be Your Competitive Edge?
Drop us a line to discuss your needs or next project
Software developers, put simply, develop software. But what exactly does developing working software products involve? To understand the precise role of a software developer, it makes sense to take a step back and look at the whole software development life cycle and the other roles in a software development team.
Software developers mainly contribute to the development phase, which is where the actual code that a piece of working software consists of is written. As the infographic above illustrates, other kinds of IT specialists within a software development team are responsible for most of the work involved in the other five phases.
Some of the other roles, such as system or application architects, are usually held by former software developers. However, while they require a deep understanding of software development, they are not software developer roles.
An application or system architect is the person responsible for the high-level design and scope of a particular software project. Their role is mainly in the define phase before development begins and involves setting out how the software will achieve the goals and requirements set out in the analysis phase. The role can be compared to that of an architect in a construction project – which is where the name comes from.
Software developers are the members of the team who implement the high-level plan set out by the architect. In other words, they do the actual job of building the software by writing the code and joining it all up together as a working piece of software.
Software developers don’t just come in different levels of seniority but also across a wide range of programming languages and technologies. The programming languages and technologies a software developer has experience and expertise in is referred to as their ‘tech stack’.
Different programming languages and technologies like frameworks, libraries and software development tools, are used in the development of different kinds of software and the different parts, eg. the front end and back end, of software.
Some of the main categories of software development are:
Most software developers help build application software but there is a huge variety of different kinds of software applications that are built with a wide range of different programming languages and technologies.
Software applications range from computer games to web applications like SaaS products, enterprise portals and simple websites to native applications designed to run on a particular operating system like Windows, Android or iOS.
Application software can be quite straightforward, like a single-page application (website), involving a web page design on the front end and simple CMS on the back end. Or it can be an extremely complex cloud-native application designed to process and secure huge volumes of data on the back end, run algorithms and consist of large numbers of interconnected user stories.
The sheer breadth of variety across different kinds of software applications means it makes little practical sense to talk about ‘application software developers’. Instead, we categorise developers by their tech stack and level of seniority. The same can be said of software developers who specialise in other kinds of software like systems software, embedded software, databases and AI algorithms.
Let’s take a look at some of the main categories of software developers as defined by their technology stack:
Back end software developers code the infrastructure that the user interface is laid on top of – all of the elements that power an application the user cannot see and relate to functionality, CRM, databases, systems integration, core logic, hosting and security.
The complexity and depth of the back end of an application can vary hugely from the relatively straightforward infrastructure behind a simple web page (CMS, hosting and security) to sophisticated cloud-native architecture, database engineering and integration with wider systems that connect different software products.
Java, Python, Node.js, SQL, Bash/Shell, Kubernetes, Docker and Rancher figure among the most currently in-demand back end developer skills. The most used back end database technologies are mySQL, PostgreSQL, SQLite and Mongo DB.
Full stack software developers have a command of both front end and back end technologies and can code a whole app or take on both UI and infrastructure development tasks as part of a software development team. Stack Overflow’s 2021 Developer Survey shows full stack developer is the most common role software developers say they fill.
Mobile developers can also be front end, back end or full stack developers. The term simply means these software developers have specialised in technologies used in mobile app development, either cross-platform or native.
Cross-platform mobile apps run on a browser and Flutter, React Native and Ionic are the most popular frameworks used by mobile developers for this kind of increasingly popular app. Native mobile apps, built specifically to run on either the Android or iOS mobile operating systems use specialist programming languages, UI frameworks and development tools.
Swift and Objective-C are the languages used to code for iOS, complimented by UI frameworks UIKit and SwiftUI and toolsets like Appcode and Xcode. Java is the language most commonly used to code Android apps with Kotlin also popular, alongside UI frameworks Android UI and Jetpack Compose. Android Studio and Android Developer Tools (ADT) are the most popular Android developer toolsets.
The role of DevOps engineer can vary significantly between different software development projects and teams and can be more weighted towards operations or involve more development. DevOps unifies development and operations roles and responsibilities as a philosophy or methodology. It is designed to break down traditional ‘us to them’ processes of the development team handing software over to operations, who are then responsible for it working in the production environment the same way it did in the development environment.
DevOps engineers bridge development and operations and work on code with the developer team, oversee the code releases and also manage the deployment and operation processes. They also work with the operation team on the proper integration and running of the software developed.
A DevOps engineer typically requires programming skills plus management, agile and DevOps principles, problem-solving and organisational skills.
DevOps teams and consultants
Supercharge your next cloud development project!
Software developers tend to be broken down into four main categories of seniority:
If we extend the construction metaphor, a lead software developer takes the decisions on how best to execute the architect’s high-level requirements within the framework provided in a way that can be loosely compared to the role of a structural engineer. The lead developer will usually still be involved in the actual coding process, often taking on the most complex tasks themselves.
The lead developer will also usually be responsible for taking a final decision on any debates around the best technical solution to meet requirements.
The lead developer will usually be one of several senior software developers who could perform the role. Senior developers usually (there are exceptions where developers achieve a senior level of expertise more quickly than average) have several years of experience across numerous software development projects and are experts in at least one, often more, programming language and framework or library.
Senior software engineers demonstrate initiative, work without day-to-day supervision, and can efficiently execute more complex coding challenges. Senior developers are also often responsible for mentoring mid-level and junior colleagues as well as assessing the quality of their work and intervening when necessary.
Mid-level software developers are also reasonably proficient professionals able to code independently but have a level of expertise and experience that falls below that expected of a ‘senior’ colleague.
Mid-developers will most typically have between 1.5 and 3 years of full-time development experience (this can vary significantly from individual to individual) and be able to independently handle a majority of development tasks using the tech stack they have experience in. They may need input and support from more senior colleagues if working on more complex coding challenges and their work should still be regularly assessed for quality.
Junior software developers are the apprentices within a software development team, still in the relatively early stages of learning their trade. A junior software developer will have basic to lower-intermediate fluency in writing code in at least one programming language and framework and foundational computer science knowledge.
It is accepted junior devs require constant supervision and mentoring and any code they produce on their own should be reviewed by more experienced colleagues. They will be given simple, odd jobs and low-level coding work to build experience and fluency in coding in their chosen tech stack before gradually being given more responsibility as they grow as professionals.
Usually, only larger software development projects and teams have a genuine role for junior developers. However, like an apprentice in any field, a team may bring in a junior developer in a support role to facilitate their development into a mid-level developer.
As highly skilled and in-demand specialists, software developers earn attractive salaries. However, within that very broad description, there is a huge range. A junior developer gaining experience with a popular framework like React might expect to start on a relatively modest salary of around $2000 or €2000 a month. However, that could easily rise to $7000 or $8000 a month or more as a senior developer.
Geographical location does still influence the average salary levels of software developers with professionals in developer, higher-wage economies earning sometimes considerably more than similarly qualified and experienced peers based in nearshore and offshore locations.
However, the gap is noticeably narrowing as remote work becomes common and the demand to supply balance continues to develop in favour of the supply side. Especially highly skilled senior software developers are now in a strong enough negotiating position that their physical location has far less impact on the remuneration they can expect from employers.
If you are recruiting software developers via a third party such as a software development company or IT outsourcing provider you can typically expect to pay an average margin of roughly 30% on top of the salary cost to the direct employer.
The Stack Overflow 2021 Developer Survey offers more in-depth insight into median salary levels of software developers based on skills in programming languages, web frameworks, database technologies and cloud platforms. Here’s the table for median developer salaries by web framework expertise:
One of the beauties of software development as a profession is that it is close to being a genuine meritocracy. There is always room for improvement but, generally speaking, if you have software development skills, they will be rewarded with employment opportunities at a fair market rate.
If you are not a software developer but would like to become one, or at least explore the possibility, where to start? How does one become a software developer?
The most traditional route to becoming a software developer is to study for a computer science degree to gain a foundation in computer science and programming then specialise in a particular technology stack and move up the chain of seniority.
But that is just one way and not the route many successful software developers have followed. Lots of software developers come from other STEM disciplines, with mathematics an especially popular foundational education, especially for algorithmic programming but not only. Others come from a wide range of different educational backgrounds, including the arts and social sciences – there is no rule that precludes anyone of any background learning how to code.
For those who want to pivot into software development from educational backgrounds other than computer science, there is also plenty of choice around how to go about that. It could be through attending courses either at a traditional educational institute or at one of the growing number of specialist schools set up to teach software development and other IT specialisations. Nowadays there are often online-only study options.
You will usually have to pay fees to study software development at a formal educational institution or private software development school. But it is also perfectly possible, with dedication and hard work, to learn the skills needed to become a software developer without spending a penny on education.
There are also several quality and free online resources designed to teach software development skills through self-study. They don’t all purely focus on coding and IT specialistations but those listed offer plenty of fantastic courses for budding software developers). Some of the most highly recommended include:
If you need to hire software developers for a project, where is the best place to find and recruit the specialists you need? There are several different options and which is right for you or your organisation will depend on your particular circumstances and the needs of your development project. However, the main options are:
Permanent employees – either with the help of a specialist recruiter or if you are willing to dedicate the time and effort and feel comfortable you can personally assess level of expertise you could go DIY and place job ads on popular job sites and boards.
Freelancers – there are a number of platforms which match freelancers with those who want to hire specialists for a particular job or project, including Toptal.com, Upwork.com, YouTeam.io and Lemon.io.
IT outsourcing company or software agency – an IT outsourcing company or software agency will ‘lend’ you a tailor-made software development team to work on your project. This can include project/delivery management or just the software developers themselves with you taking control of the rest.
Working with a specialist IT outsourcing provider brings many of the advantages of hiring employees directly (and the added advantage of experts having hired and assessed the specialists and defined their level of seniority, tech stack and soft skills) but with far more flexibility. You can scale a team up or down as required by your project cycles without being locked into the overhead of permanent employees.
Can We Help You With Your Next Software Development Project?
Flexible models to fit your needs!