I am working as a software developer for the past decade or two. For some time I have been asked by some of my friends about how difficult is to become a programmer or can I become being lawyer/engineer. As a result, I am trying to describe the world of creating software and what roles are available in case somebody wants to enter the softwareverse.
I will try to describe the software building team, I hope to include all roles, even if the roles are not present in every team. I will avoid writing about any particular technology as I want to focus on the team structure and member roles, including descriptions of skills. I will not include any tutorials as well.
What does it mean to code?
I initially want to explain what does mean to create an application, which means a website as well. Let start with a simple explanation of what is an application, it is a list of instruction which processor can understand and execute. These instructions are quite hard to be written by most people, as a result, we write code in a *programming language* which is later compiled into the application. There are a lot of programming languages with various merits and flows and various uses.
Process of creating software.
So to create an application for the client we tend to follow a few simple steps. First, we need to obtain the knowledge of what we need to do. This is a step when we go somebody called domain expert. His or her role is to understand the requirements and processes on the client side and to try to explain them to developers. This role is quite crucial as all the work is going to be based on such requirements.
After obtaining the requirements we can start "coding". This step is always taking more time than expected. One reason is that Clients usually do not know what they want or rather do not know how to talk to developers to tell them what they want.
How to do it?
To help the process run smoothly there are two main management methodologies. We can call them old(waterfall) and new (Agile). Both practices have merits and flaws, but currently Agile, in various forms, is the king and Waterfall is hated.
Waterfall
Let’s call it the first software project methodology. It was based on the idea that you split software creation into 4 stages: Requirements gathering, design, development, delivery.
In the ideal world, where everybody knows what they want to achieve, it would work perfectly, unfortunate usually after the whole process Clients receive an application that does not match what we need, but usually is what they asked for.
Agile is the current go-to process management. Its idea should focus on delivering what the clients want, with constant communication between clients and developers. The process tends to run in fixed time( between a week and 3 weeks) sprints, which should contain the design, development, test and deliver steps. Additional, the sprint assumes that at the end the product should work, this means it might not contain 100% of the required features but should not break anything. One of the main problems with Agile is that it has to be implemented properly, otherwise we are getting Chaos.
In an Agile run project, the Client should be able to change the requirements between sprints without any issues.
Chaos
Unfortunately, most of the dev team are using this project. The origins are usually different but it tends to start with a company wanting to use Agile but never being able to implement it fully and/or properly. There are cases of dev teams using sprint and having standup but the requirements are already agreed upon and contracted with a client with a little chance to change them.
Team Roles
Developer
Let's call it a basic role. In a very large simplification, the role is to convert requirements into a solution. There are various languages, frameworks and techniques to help you to do so.
Architect
Usually the next step in the developer career. The Architect role is to design the application, how it is going to work, where to store data and communicate with other services or apps.
Tester
The role of the tester is to ensure that code created by the developer is working, which mean it is doing what it is supposed to do.
UI/UX
A User Interface/User Experience designer's task is to improve the application UI ( that mean what is seen by the user) so it is better. The main problem is to define where UI is not working correctly and how to solve it.
DevOps
Now a day, developers try to create everything with code, event infrastructure. As a result, a need for people who can talk with infrastructure and developers has arisen. So DevOps is a person who tries to help developers deploy their solutions.
Product Owner/Business Analytics/Domain expert.
It is generally a person who might not know how to code but know what the Client wants. These people tend to create the ticket, file with requirements for developers so they can create the application without domain knowledge.
Conclusion
I hope that I have managed to explain how the software development team is built and organised and how does it work. The truth is that every company and team is different and is a variation on the above explanation.