How Software is Developed in Big Tech Corporations
Roles and structure of a software development team
I bet you remember your first full solo software project. You thought that this is how web apps are built and managed — by a single developer!
But then you did another project and this time it was a bigger project so you needed to work with other developers. You successfully built it and thought “OK this must really be how software is actually made for big projects.”
Except that now when you go out to the real workforce you find that companies are not just hiring developers but they have other roles as well, which makes you wonder, what does a software development team actually consist of?
You know that everything in this world is built mostly of atoms — of course, I know there are smaller things than atoms but bear with me.
It’s the same for tech companies. They consist of small teams working together. Each team acts as an independent unit with its own responsibility, project scope, and even culture.
Every software company starts first as a monolithic single team. To move faster and deliver more features they have to be divided and become smaller units or a “Microserve Team” and act like a small company within the main company.
But one thing that unifies all these teams is that they have similar roles in each one of them. Of course, there are more specialized teams that may have specific roles, like infrastructure or security, but other teams are mostly similar to each other.
There are five main roles each team must have: Software Engineers, QA Engineers, UI/UX Designer, Team Lead, and Product Manager.
How it Works
Let’s discuss each role in the context of developing a new feature for our Big Tech Corp that will generate more billions.
Everything starts with the C-Level and top management agreeing on the current year’s business goals — what they want to achieve and the various features that will help them achieve these goals.
Note: They discuss it from the business side and not from the technical side.
Then, after they have planned the quarterly goals, each feature is handed to the main gatekeepers, the Product Managers. All PMs align with each other what features they are going to take for their individual teams and how they will be distributed among them.
Basically, product managers act like coordinators among the teams inside an organization and work on dividing the big business goals of the company into smaller actionable goals.
They also plan the sprints for their teams, make sure that the designs are correct and that the end product is functioning.
Every product manager would then align with the Tech Lead on how this new feature is going to be really implemented technically and what the expected effort to implement it is.
Tech leads from different teams also coordinate which each other on how their microservice products will communicate among them and what the external dependencies are.
They have good technical, managerial, and business skills. They have a wide knowledge of different technologies and architectures. Business skills mean they are able to translate the business requirements into the technical implementation and managerial skills to manage their software engineering team.
Next, after the planning is done, the implementation comes.
First, ideas are handed to the UX/UI Designer who will translate the business requirements into their visual and experience looks that will help the application users to achieve their end goals.
They will do user research, create personas, conduct interviews, create wireframes, iterate on different prototypes and finally deliver the end-product as a design to the software engineers to build.
After designs are done, they are handed to us, Software Engineers, who convert these ideas and designs into real products.
They will discuss how it will be implemented and how the different parts are going to be divided into the frontend, backend, and DevOps parts.
Frontend engineers specialize in UI development and creating a unified and scalable web application that works correctly on different browsers and device sizes.
Backend engineers specialize in maintaining the business logic and data of the web application and ensure a stable and secure system.
DevOps engineers specialize in maintaining the availability of the service and making sure it is working 24/7. In some teams, frontend and backend engineers can be DevOps as well.
After the feature is ready, next comes the quality check. This is critical and is handled by QA Engineers.
They’re the ones who approve the work done by the software engineers and ensure it complies with the feature expectations and if it would work properly with other features.
They write end-to-end tests for different user journeys in the software and try to hack it and crash it to discover potential bugs before hackers can find them.
They can also check that developers have written correct integration and unit tests and that they have covered edge cases
Some big software companies even have bug bounty programs with very generous rewards, so that QA engineers from around the world will check for bugs and the security of their systems.
This process is repeated for every feature and every business quarter. It might seem a lengthy process compared to an indie developer or startup but there’s a saying:
If you want to go fast, go alone. If you want to go far, go together.
That’s why corporations go very far and implement complex features that take thousands of hours to develop. When everyone does their part it becomes very efficient, similar to how it works in a factory.