In our fourth article about product teams, we will explore the role of the Software Developer. Our goal is to focus on the doubts that arise about the work of this professional, the tools used, and the types of programming. Therefore, we have gathered a team of specialists who work in the development of digital products and services at SoftDesign. In the first article in this series, we explored the profiles, roles, and expertise needed by a product team. In the second article, we addressed the importance of Product Owners (PO) in the development journey, followed by the third article, which delves into the universe of Designers. To wrap up the series, we will still talk about the work developed by Testers and Product Marketing Managers. Needing IT professionals for your business? Get in touch.
What Does a Software Developer Really Do?
A Software Developer works mainly by writing software code – a set of instructions that are interpreted by the computer. To write such codes, it is necessary to use languages and follow their rules and structures. In general, these professionals know and use more than one specific language in their daily lives, such as Python, Java, C# and JavaScript. In addition to writing the code that creates the screens and business rules of the products, a SoftwareDeveloper also performs tasks such as:
- Writing unit testing codes – which is a small piece of software that tests every piece of the original software;
- Creating and changing the structure of databases;
- Configuring support tools – which usually also involves writing code;
- Working together with the team to help come up with the best solutions for the product’s challenges.
So, is learning a language enough to be a Software Developer?
Just knowing the language is not enough. The Software Developer also needs to understand the paradigm of that language – its “way of thinking”. There are functional, declarative, and other types of paradigms, and each one requires different skills. In a very simple analogy, we can say that Portuguese and Spanish are two languages of the same paradigm; however, Chinese – which has a very different grammatical structure and does not even have the concept of an alphabet – is considered another paradigm. In addition to mastering the paradigm and language, one must also master its libraries and frameworks. Libraries are sets of functions that aim to facilitate coding, while frameworks contain an initial structure that accelerates and standardizes development. Therefore, we already know that Software Developers know paradigms, languages, and frameworks. Moreover, it is also necessary to know a series of tools.
Many believe that programming is just opening a text editor and starting to write. However, the development environment also has its complexity and, of course, a whole set of specific tools.
IDE (Integrated Development Environment): brings several of the functions necessary for work together: editor, compiler, debugger – tools that help organize refactoring and test creation. Examples:
VS Code,
IntelliJ, and
XCode.
Repository: the place where the software source code is stored. Each Software Developer has a copy of this source code on his computer. During the development process, several versions are worked on in parallel, to later be assembled into a stable version for production. All historic, changes, and versions are saved in this shared repository. The best known today is
Git, which is present in the
GitHub,
Gitlab and
Bitbucket tools.
Virtualization and Containerization: tools that allow you to code the infrastructure. Thus, it is possible to have the production environment running on our computer or deploy the production environment quickly, with the guarantee that it is correct.
Orchestration or Pipelines: tools that help automate processes. A software change needs to be pushed to multiple environments throughout the work cycle. Initially, they are under development, and then they go to review and environments such as testing, approval, and production, among others. The deploy and remove processes must be automated through Orchestration (
Jenkins) or Pipelines (Gitlab,
Azure DevOps) tools. For
William Guimarães, Software Developer and Architect at SoftDesign, the correct use of these tools is essential nowadays. “Before, it was common to hear Programmers say things like: ‘This works on my machine’ or ‘I don’t know how this error reappeared after it was fixed’. This was said when the system was running normally on the development machine but exhibited unexpected behavior in production”.
What are the differences between a Software Developer and Architect?
Generally, a person responsible for architecture is someone who has extensive experience in
Software Development. However, it is not enough just to accumulate several years of programming: it is necessary to study and expand your point of view and skills. In the case of
Software Architecture, we can make an analogy with civil construction. Architects and engineers are the ones who think about structure, modeling, layers, and connections. Just as in a building, where these professionals need to gather diverse knowledge (electrical, plumbing, structural), the Software Architect needs to consider and analyze availability, security, continuity, fault tolerance, and much more. After the “blueprints” are developed by an Architect, a Software Developer can then build whatever is needed, according to this structural view. Of course, in software, the structure is not as concrete as it is in a bridge or building; therefore, Architects and Software Developers are always interacting in the decision-making that comes up with each Sprint.
What are the differences between a Software Developer, a DevOps, and a DBA?
In fact, DevOps is a working philosophy where Developers and Operations people work closely together to avoid bottlenecks and errors. The aim is to automate operational work as much as possible. However, currently, there is such a large volume of configuration and automation work that a new professional has appeared on the market: the DevOps Engineer. This professional also writes code, but it is not the code of the screens, rules or processes of the system itself. This is the automation code for Pipelines: publishing and infrastructure creation and monitoring processes. A DBA or Database Administrator, in turn, is a professional specializing in databases. When we are at the beginning of a project or working on a small product, it is normal for Developers themselves to be responsible for creating and maintaining this database. However, when demand increases, requirements become more challenging or the product becomes complex, it is important to have a more specialized person who works on structuring the database and its maintenance and optimization.
What are the differences between a Programmer and a Software Developer?
For many, these names mean the same thing. If we use the definition that comes from
Scrum, we can say that Software Developer is a more generic name for everyone who participates in some way in the development of a solution, even if they don’t write code. A programmer, on the other hand, is a specific function of one who writes the code. In short, every Programmer who participates in a team (squad) – and is concerned with the lifecycle of software delivery beyond the code – can also be considered a Software Developer.
How does the Software Developer interact with the rest of the product team?
This role is no longer associated with people who are introspective, shy and difficult to communicate. In fact, nowadays those who program have relevant participation in the product team. For example:
- Helping the Product Person to assess the feasibility of ideas or think about solution options;
- Actively participating in teamwork planning ceremonies;
- Collaborating with moments of interaction with stakeholders, such as the Review;
- Being a protagonist in the daily meetings, discussing impediments and plans to achieve the Sprint’s goals;
- Supporting process improvement through discussion in Retrospectives.
For Felipe Schultz, Software Developer at SoftDesign, collaboration is very important. “The active participation of Programmers throughout the product life cycle is one of the key concepts of agility and brings a lot of impact on the result of deliveries”, he emphasizes.
Bruna Nunes, Software Developer at SoftDesign, also believes in the importance of a co-creation culture. “A critical point is collaboration, which needs to take place daily between Front-End Programmers and Designers. This exchange is essential for making decisions that balance usability and technical complexity”.
Why is it ideal to have more than one Software Developer on the team?
A product’s code is often written in more than one language. Therefore, it requires the use of several integrated tools and the creation of the work environment. Rarely will a single person be skilled on all of these fronts. Therefore, it is better to unite professionals who have different specialties. Furthermore, the code of a software product is naturally large and complex. In other words, having only one person knowing all the code is a strategic risk for any product or company. Finally, it is important to follow an
eXtreme Programming (XP) practice called “collective code ownership”, which means that even if there are people on the team with certain specialties, they cannot be seen as owning a piece of code. The entire team needs to know and feel ownership of the entire product to improve knowledge sharing, code quality, and standardization.
What are the main types of Software Developers?
This is not an official and watertight categorization, but it is widely used in the market and can help to understand the various specialties:
- Mobile Programmer: Specialist in mobile technologies, generally well acquainted with the specific challenges of this platform and its usability standards. This professional can work with native iOS and Android technologies or with hybrid technologies such as React Native or Flutter.
- Back-End Programmer: specialist in building the entire back-end part of the software (the one we don’t see), consisting of business rules, processing, calculations, and validations, among others. Typically, this person works creating services and APIs. Some languages you may know are Java, Kotlin, C#, or JavaScript, and you may be working with frameworks like .NET, NodeJs, or Spring.
- Front-End Programmer: specialist in creating user interfaces (screens) and their validations and interactions, in addition to the integration between these screens and the Back-End. Generally knows HTML, CSS, and JavaScript well. This professional can work with frameworks like React, Angular, or Vue.
- Full Stack Programmer: works building both the Back-End and Front-End of applications. It is also said that a Full Stack Programmer has a good knowledge of the entire life cycle of the product, configuring the environment and Pipeline.
Software Development at SoftDesign
In our work process, Software Developers participate from the experimentation phase – where they support the construction of
Low-Code MVPs of the product – to the Software Development phase. At SoftDesign, our main mission is to deliver products that will be used, loved and that generate value. For this, competent, engaged and collaborative professionals are essential. If you need help developing successful products, please contact us. Together, we will connect technology, design and strategy!