Basic Tips on Software Development
Published: 2024-01-24 19:10:39


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ekxwvagimbs4211jcrke.png)
*The Starting Point: Source Code and Software Categories*

In the world of software development, everything begins with the source code. It’s the foundation upon which the entire software structure is built. Understanding the business model is crucial to determine the software category, whether it’s a banking system, an ERP, or any other type. This initial stage is essential to direct future decisions and structure development aligned with the specific needs of the project.

*Business Model and Software Category:*

Typically, when a developer starts their career in software development, they begin by working on a project, and it becomes essential to identify what type of software is being developed from a business perspective. Based on the software type, it’s beneficial to research what types of functionalities usually exist in that software category.

Look at competitor software to see which features cover the scope of the software category. This will make a total difference in your career as a developer in the long term.

Details about the business models of the main types of software, such as Fintechs, Edtechs, HealthTechs, business management systems like ERPs, CRMs, MarketPlaces, SaaS, among others, will be covered in more detail in other articles.

*Documentation Tools:*

If the software you are going to develop has documentation, read it and pay attention to how the evolution and release of features of the project occurred, whether using release notes on Github, following versioning, a data dictionary, API documentation on Postman or Swagger, screen design on Figma or Adobe XD, ERD database modeling, UML modeling, requirements analysis document, diagrams with business rules on a Miro, documentation on Confluence, and in the last case, if there’s no more precise type of documentation, you can even look at the history of pull requests to understand and even help create documentation for the project, and in some cases, you can also use the history of tasks and sprints done on Jira.

I will write other articles and make more videos detailing a developer’s use of each of these tools soon.

*Choosing the Technological Stack:*

Choosing the technological stack is a critical step in software development. It consists of the set of technologies that will be used in the project, including programming languages, frameworks, and tools. Each stack has its peculiarities and is chosen based on the project’s requirements and the team’s skills. Php, Golang, Javascript, and Python are examples of common technologies, each suitable for different types of projects and needs.

It’s important that the developer at the beginning of their career has solid knowledge of Algorithms, Data Structures, Object Orientation, and in some cases, knowledge of the mathematical basis of logic for computing, discrete mathematics, and analysis of algorithm complexity. This will give the developer theoretical tools to understand, in some cases, problem-solving through code. I believe that at the beginning of the career, it’s important for the developer to focus more on the concepts and principles than the technology itself.

Typically, when a developer enters a project, the most common thing to happen is that they already enter a project with a pre-defined stack, so in addition to the academic and theoretical knowledge base, some practical experience and technical understanding of the programming language to be worked on are necessary. For this, there are various books about specific technologies, videos on the internet, communities, web tools for learning based on challenges and tasks using a particular technology.

For each of the technologies mentioned above, I intend to produce an article and videos dealing with the details of each. For the next step, what will be necessary is for the developer to understand and choose between front or back-end technologies.

Here’s an article I wrote about the Python programming language:https://medium.com/@rafaellevissa/exploring-python-and-frameworks-my-experiences-in-software-architecture-7af943fd8e30

*Roles in Development: Back-end, Front-end, and Full-stack*

In software development, there are different specializations: back-end, focused on the server and business logic; front-end, aimed at the interface and user experience; and full-stack, which combines both. A full-stack developer, although versatile, usually has an inclination for back-end or front-end, specializing in one area while maintaining functional knowledge in the other.

Examples of stacks combined with back-end development segment are, for example, the use of programming languages combined with web frameworks like: Python and Flask, Python and Django, NodeJs and AdonisJS (Javascript), NodeJs and NestJS (Javascript), Php and Laravel, Golang and Gin or Golang and Fiber. While on the front-end we have: ReactJS (Javascript) or VueJS (Javascript), Flutter (Kotlin). These are not the only options and are still segmented within the scope of web development, but these are the stacks with which I have some knowledge and can help in your development.

In my case, I am a Full-Stack Back-end First developer, which means that my strongest point of experience is in the back-end, and it’s up to you, the beginning developer, to discover along your dev journey which segment you will take for yourself in your career.

*The Journey of a Full-Stack Developer: Back-end First*

As a full-stack developer with a focus on back-end, it’s important to have a strong understanding of server processes and infrastructure, as well as solid skills in relevant programming languages. Tools such as React Native and Flutter for apps, and React JS and VueJS for front-end, are essential for the front-end part, having more depth in technologies like Php, Python, JS, or Golang for the back-end. This journey is marked by constant updating and adaptation to new technologies.

The knowledge you acquired in theoretical and academic concepts, as well as knowledge of architecture and software engineering, will be applied here with more depth in the back-end part, so at this point, you should already know the limitations and properties of each of the technologies you have chosen to have as a strong point.

In my case, I started in the world of technology with the use of tools from the infrastructure area, such as AWS (Amazon Web Services) as Cloud and thus developed jointly in concepts, technologies, and back-end tools. On this journey, you will deal with databases that typically start with those of the SQL category and later non-structured databases such as Redis, DynamoDB, MongoDB, among others.

In addition to knowledge and skills with databases, cloud infrastructure is necessary to understand how a web project works (in my case, I decided to follow this category of software), as well as its HTTP protocols, HTTP verbs, and architecture and basic structure of a web project such as an API, Websocket, among other types of web applications.

To improve my skills in technologies and programming languages, participating in technology communities was essential in my journey.

*Engagement with Technology Communities:*

Participating in technology communities is vital for continuous growth and learning. These communities offer a space to share knowledge, resolve doubts, and stay updated with the latest trends and practices. During my walk in the world of technology, I created references and leaders in these communities, such as Pokemaobr for Php, Dunossauro for Python, or Fábio Akita for Ruby on Rails, remembering that these people do not represent the programming language community, but serve as valuable guides in this constantly evolving ecosystem that you can look for to access the communities.

*Storing and Managing Source Code:*

Choosing a platform to store and manage the source code is essential. Services like GitLab, GitHub, and Bitbucket offer not only code hosting but also tools for review, collaboration, and versioning. Additionally, understanding CI/CD and deploy practices is crucial for an efficient and continuous development cycle, ensuring that updates can be delivered quickly and minimizing errors.

Git is the base engine for these tools, and you should choose one of the tools mentioned above to start storing your source code, maintain a portfolio of projects, and train for professional use in your day-to-day work as a developer. Mastering these tools is essential for your learning process and trivial for your routine as a developer.

*Tools and Services in Infrastructure and DevOps:*
Infrastructure and DevOps are fundamental for the effective delivery and maintenance of software. Tools such as ArgoCD, Jenkins, and Spinnaker automate the deploy process, while storage solutions for artifacts like Harbor and Docker Hub help manage and distribute builds. Understanding and implementing these tools ensures a more agile and reliable development cycle.

The developer doesn’t necessarily need to master the infrastructure and DevOps process, but at least they need to be able to use the resources provided by a DevOps team. In my case, I have my technology training base in infrastructure, and this makes my life easier when I need to raise my applications in an environment.

The minimum a developer needs to know is how to use a pipeline, containerize an application with Docker, generate production build files, manage sensitive data such as environment variables with application credentials, use cloud services like AWS to store static files of your application using an S3 bucket, for example, use queue and messaging services like Kafka, RabbitMQ, SQS, among others.

Here’s an article I wrote about the my experiences in Devops technologies: https://medium.com/devops-dev/journey-as-a-devops-engineer-experiences-challenges-and-insights-19bb9f352ce4

*The World of Cloud and Associated Services:*

Cloud computing has revolutionized the way software is hosted and managed, offering scalability and efficiency. Services like AWS and Google Cloud provide a wide range of tools, from DNS management with Route53 to queue systems for micro-services. Navigating this world is essential to architect modern and effective solutions.

From the moment a developer intends to scale in their career, the next steps are to learn to integrate their application with Cloud services.

*Automated Testing Environments:*

In this way, they can understand the stages of software development, such as environment segmentation like Dev, staging, Homologation, production.

The application goes through stages of development, and during these stages, it is tested through automated tests, using concepts like TDD, and most of these tests are run automatically, using libraries like in Python we have Pytest, in Javascript Jest, among other tools we can use for various types of tests like unit tests, load tests, security tests, integration tests, and end-to-end tests.

*Deploy Strategies and Container Management:*

Deploy and container management are critical steps in software delivery. Choosing the correct platform, whether a virtual server or a container manager like ECS or Kubernetes, directly impacts the application’s performance and accessibility. These strategies define how and where the application will be executed, ensuring that it is accessible and stable.

Typically at this level, only the most experienced in the project collaborate and help define deploy strategies, assuming that a container tool will be used for the application, thus encapsulating the infrastructure layer. Ideally, at this stage, the team has a person specialized in infrastructure or DevOps so that decisions are aligned with business strategies and costs, in addition to the technique.

*Task Management and IT Communication:*

An effective system for task management and communication is vital for any IT team. Tools like Jira, Bitrix, and Trello help organize and prioritize work, while agile methodologies like Scrum guide the development process. Clear and efficient communication, facilitated by platforms like Slack, Google Chats, or Microsoft Teams, is fundamental for the collaboration and success of the project.

The developer will have to operate IT management tools in their day-to-day to control the tasks that will be done in the Sprint, the complexity points (SCRUM points) of each task that will be defined in the planning meet rite, probably playing a planning Poker, and if you have remote work, you will use one of the business communication tools mentioned above, the ideal is that this is not a barrier to your hiring, so it’s ideal that you understand and learn how to use these tools and how the SCRUM methodology works.

*Conclusion: The Developer’s Path*
The developer’s path is a continuous journey of learning and adaptation. Choosing to specialize in an area, whether infrastructure, back-end, front-end, or full-stack, is just the beginning. With the constant evolution of technology, staying updated and engaged with the community is essential for professional growth and delivering effective and innovative software solutions.

For your journey in the technology and software development career, I recommend finding a mentor, preferably someone available in the technology community to help and guide new devs in their careers.