Good practices as a Senior software developer
Tags: testing, programming, codequality
Published: 2023-04-28 02:40:15

As a senior software developer and team player it is good to help your team to produce high-quality software that satisfies your customers' and users' needs according to the budget and timeline you have. Understanding the issue, choosing the proper technology stack, testing, CI/CD and mentorship are a few solid practices you should adhere to in order to achieve this.

## Understanding the problem

The first and most important step in creating excellent software is comprehending the issue at hand and making sure your team does as well.  In order to create a clear and coherent set of specs that can direct the development process, you must collaborate extensively with your team, clients and users to understand their needs and expectations to define an MVP(Minimum viable product) always keeping in mind the timeline to lunch the product and the budget.

## Tech stack

The next stage is to get all the team on the same page to choose the best technological stack to approach the problem once you have a clear understanding of it, this decision may be directly affected by the timeline and budget.

There are several programming languages, frameworks, and tools available, and picking the best ones in terms of architecture flexibility/adaptability can have a big impact on how well your project turns out at the moment of grow. The team should be able to weigh the benefits and drawbacks of several solutions and select the ones that are most appropriate for their projects according to the budget and timeline.

As a frontend example, let's say that the team decides to use React, we might take a crucial decision here about the UI (User interface) components.
In case the budget and the timeline allows it we could create our own UI components by using Sass, Css or Styled components or even more, we could have our own component library by using Storybook. 
In the opposite case, if the budget is not enough, or the project has a reduced timeline we could use a UI component library for React such as Material-UI, Ant Design (AntD), React Bootstrap, Chakra UI.

If the project succeeds and there is more budget to invest on it we could follow the MVR (Minimum viable replacement) which consists in the improvement of our own existing product.

## Testing

This is another critical aspect of software development directly affected by budget and timeline. You should be well-versed in testing methodologies and practices, and be able to lead your team in creating robust test suites that cover all aspects of your software. There are several types of tests that you should consider, including unit tests, integration tests, and end-to-end tests. By incorporating testing into every step of the development process and encouraging your team to adopt a test-driven development approach, you can ensure that your software is reliable and performs as expected.

Following the previous example, this step is highly affected by the budget most of the time. 
On one hand if we decided to build our own components, we would need unit test for each of them. On the other hand, if we choose to use components from any UI library, we asume that they have already been tested.
Anyway in case we decided the first approach and the timeline is too short for testing we could tackle this in the MVR.

## Continuous Integration/Continuous Delivery

Also known as CI/CD, this is a crucial technique that helps you to reliably and quickly produce high-quality software. The testing, building, and deployment procedures can be automated to lower the margin of errors and to make sure that updates reach users as soon as possible. You should be able to set up and manage a strong CI/CD pipeline that fits with your development workflow.

This step might not be affected by the timeline but by the budget, the timeline might not affect it because this is part of the whole software development process and it might be tackled during the setup of the project. On the other hand, the budget might affect the tools we could use such as RedHat, AWS, etc.
Anyway, there are free tools to use like CircleCI, GitLab or GitHub.

## Branch protection and tag versions 

Branch protection allows to control over different environments like development, testing and production by adding different rules like branches name conventions, pull request rules like amounts of approvals, etc. I Personally suggest following git-flow branch convention, in order to launch a release you can use tags that allows you to have control over each release version in case a rollback it’s needed.

## Mentorship

Last but not least, you could serve as a mentor to your team. You ought to be able to offer direction and encouragement so that your team members can advance and sharpen their abilities. You could also serve as an example, demonstrating professionalism, attention to detail, and a dedication to producing high-quality software and something that’s the key for teamwork that’s to be open minded.

In conclusion, you can play a crucial role as a senior software engineer by motivating your team to produce excellent software. You can make sure that your software is dependable, operates as intended, and satisfies the needs of your clients and users by adhering to best practices like comprehending the issue, choosing the right technological stack, testing, CI/CD, and mentorship.