If you think the main focus in software development company is about programming source code, you are wrong. The “fruit” of the work is the code, yes. But, to reach the coding phase, there are several other roles to fill, other tasks to execute, before a company could archive the thing called business.
The philosophical goal of technology is having less human labor. So, it sounds absurd having people occupied with software. Unfortunately, whatever type the software is, at some point, there are humans or the environment that interacts with it. There are also endless number of legal frames that restrict reuse of programming code and create a lot of implementations of the same thing. The software does not builds itself. People need to fulfill the work associated with some task and the software needs improvements all the time – it is never perfect. Managers create roles for better separation of responsibilities and the work between workers. Even with a software company, people-soft skills is the core.
In a typical software corporation you may find the following roles:
Front-end web developer
The person responsible for implementing web pages. The result is HTML, CSS, JavaScript code drawing the required design. Front-End means the code that is in front of the users. In latest years these coders use a lot more concepts and abstractions than the above abbreviations. The latest development of tools and frameworks is bringing more and more complexity that is required to be learned by the poor front-end dev.
Android / iOS / Mobile developer
These developers specialize in bringing the front-end design to the specific platform framework.
Back-end developer
Limited number and types of applications work entirely and only on the devices. Every system needs to do something away from the user. When the work is small and the amount of users is small, the back-end system is small. Whenever some of the above things grows, many times the back-end developer needs to tune up the application. As it is invisible to the user, the options of implementation are endless – programming languages, frameworks, approaches, etc.
Full-stack developer
Individuals that know both the back-end and the front-end side of the software. Many developers are full in a sense that they know some server-side languages, the web stack and are also open to mobile development.
Some custom language or framework developer
A lot of software development companies have legacy systems that need support or improvement. The majority of them are written in old programming languages. United States of America for example – In year 2020 – had a need for Fortran Developers. Learn it and you’ll be able to work on their Job Management Systems.
Software Developer
It is a general position – а person for everything about. With this title an individual could be tasked to do basically anything around source code. This could be Desktop, Mobile, Web development, server management, basic software installation and setup, documentation, automation, testing, business analysis, deployment and publishing of the product, etc.
Team Leader
An individual that manages specialized people. He has their technical knowledge and knows their pain. But, instead of diving deeply into technical perfection, he has chosen soft-skill based career path. In the end, in whatever area, many members will be needed to get the work done. Even the most productive has up to 24 hours a day.
Software Architect
An engineer that has chosen to specialize in perfecting in the way systems are made. He doesn’t implement every small detail of the system, but he places the base. He must keep an eye that the team uses the best technical practices, so the software is fast, secure, scalable and also modular, so many developers could work on it simultaneously.
Database Engineer/Developer
The creator of the database structure. The technical person that must design relational (or other) data model of the application. It is of crucial importance for the performance. As I [Toma Velev] have written before, having more logic in the database system could bring better performance because of less transfer of data between software modules separated by different Software processes or even hardware machines. In the same time it could bring less options for scaling up, but, that is another thing. It is a problem for the architect, not the database engineer.
Database Administrator
The person that manages the database system. If the information is encrypted and password protected, he could probably have no human readable access to the data. The administrator may give appropriate access to the developers and the other system components. He could monitor the database load and add some optimizations – more memory, more disk size, more copies of the database or even he could make readonly replicas for the read operations.
System Administrator
Same as Database Administrator, but – he manages the application servers, operating system or container that serves the application. In self-managed environments – there is a load-balancer in front of the application and it does redirect to replicas of the application server or the database server – according to the number of requests.
Dev-Ops
Because the Systems have migrated to the “cloud”, the System Administrators does not manage Linux servers. Instead, they manage pool of containers (with Kubernetes or something else). The skills required for managing containers are similar to managing OS nodes, but a little bit different. Dev-Ops specialist must wrap the same old basic application components, but packaged with more modern paint.
Manager
Every brand of a company could potentially need a management. When the number of employees increases, the productivity decreases in too many cases. It is because of the dispersing the responsibility – who must execute what. So, here come managers to stick and glue teams together, so the common goal could be archived faster and more efficiently.
Human Resources
The human resources role is born when finances is separated from the management of people. There are two types of Human Resource Specialists – The one that must find and hire new people and others, that must keep current employees happy and content, se they could keep up working productively.
Accountant
Keeping up the total numbers positive – of the income above the expenses is of a crucial importance of actually having a business. There are salaries, taxes, paid leaves, liabilities that must get covered by the prices of the products and services and the amount of sales, so a company could float above bankruptcy.
Content Moderator
Moderators are needed in platforms where users are able to enter data freely, that will be visible to the other users (consumers of the content). Moderators need to look up for violent, harmful, pornographic, insulting, spammy and any other type of bad content. They could delete it and block/ban the ill-acting actors.
Content Creator
These are Video Makers, Article writers, Ghost Writers, Podcast Script Producers, and many more. Creating different, valuable content is not an easy task with the ever-changing and repeating world. In some sense – everything exists somewhere. Inventing something new and describing it in a new way is tricky and important. It is especially important for SЕО.
Designer (UI/UX)
Software developers tend to be bad at the visual arts. There are no less things to consider before the logic, so the software could be usable. There are color combinations, positions of the visual components, animations and screen transitions, etc.
QA / Tester
In a medium or big software companies, there is a separate role responsible for checking and verifying that the software delivered is working as expected. If the individuals that do that are executing it by hand, they are called manual testers. If the quality assurance specialist knows to code, or to use the automation tools, testers could become automation QAs.
Business Analysis
At some point, the clients are mere mortal individuals. That is the end goal of technology – to ease the lives of all people. The ideas, the concepts and the way of thinking of every day individual is not technical – technology, algorithmic, code oriented. But, if a software engineer must program some logic, he must knows how the software should work. Business analyst roles are the ones responsible for translating the general ideas of the clients and users to specifications and expected logic.
Sales
Sales is a universal role. Everything is somehow a sale. Whatever the type of the detail – there is an individual that could have the position of a sales person.
The software is an area with a lot of variations in the packaging. You could read the article – Ways to Make Money from Software. In short, here are some the ways:
- As an Employee/Freelancer
- As a onetime fee/license
- Ads within the content managed by the software / or within the screens of the product
- Subscription model /time limited access to the software/
- Sell of the Data managed by the software
Marketing Specialists
Marketing and Branding employees are responsible for packaging the product or a service in a humane way – in stories, words, pictures, psychological clicks and tricks, that will make the sale passively. It is the answer of the question “Why” about the Software.
Scrum Master
Many big companies choose SCRUM as a procedure/organizational guideline/ for managing people that are developing software. Coders, testers, designer, the “End Product or Service” builders are protected by layers of management. When they feel protected, workers focus better on their detailed tasks. The closest to them “protection” is the Scrum Master. He/She coordinates the team and talks with the clients and negotiates the deadlines of the “Sprints” – the batches of work that produce some partially done product.
Product Owner
He is the responsible for coordinating the functionalities of the product from the client side. The owner also checks whether the end result is being build the way it is paid for. Having a person look it up while it is being build could prevent wasting work on invalid direction.
Conclusion
Roles are generally a good thing, so every worker has specific type of task that he will perfect and become expert in. With time and effort – an employee with strict position could improve, get the work done faster and with higher quality. Roles help other know – what responsibility that individual has in a company, so the organization to not become chaotic and unproductive.
There is of course another point of view – from the worker side. Putting an individual in a role/position is like limiting him. The organizational machine often ignores the individuality and a personality of the human individual. Another aspect is limiting the amount of fee an employee could get with the specific type of work he has expertise in.
Which aspect of having roles do you see?