- Hero Home Blog
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. Experience having a reliable partner to your IT challenges. Let’s talk about our unique approach to discover and deliver outstanding solutions. Let’s build exceptional software solutions together!
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:
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”.
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.
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.
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.
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:
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”.
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.
This is not an official and watertight categorization, but it is widely used in the market and can help to understand the various specialties:
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!