When designing a collaborative software development environment where different people are going to work together, we need to set up a system that allow us to ease their work. This post include a list of functional elements that should be included in a software development environment in order to optimize the outcome of the team.
Challenges when developing Software in a Team
The common issues and challenges found when working on software with different team is:
- Store source code and make it accessible to the team
- People working in parallel concurrently
- Co-existence of different code versions
- Proper documentation related to definition
- Need to register and track functionalities and issues, and its life cycle
- Repetitive tasks and waiting time when building or deploying versions
- Identify errors and bugs since development stages
- Avoid regression errors
- Integrate security within the development process
The functional elements proposed in the next section try to find a solution to one or many of the issues and challenges listed above.
Recommended functional Elements in a Software Development Environment
List of functionalities you need for a full configured development suite:
- Wiki pages
- Software design tools
- Software tracking application
- Source Code Repository Manager
- Code Version Control System
- Testing Tools
- Application Security Testing (AST) Tool
- Automation Tools
You can use this list as a checklist to ensure your development environment is optimized.
Wiki pages are used in software development to share documentation among the dev team members, like requirements or functional or technical specifications.
One example of Wiki-style system is Confluence.
Software design tools
Software design tools may be used since early stages of analysis.
Project Management Tools
Project management applications may be also useful.
Software Tracking Tools
Software tracking applications allows to register functionalities or bugs that are found before starting or during development process.
You can find a list of popular software tracking applications on this post. Some popular examples are Jira or Bugzilla.
Source Code Repository Manager
Source Code Repository Manager allow to store source code and other development resources in a common place. This repository must be accessible to all team members, while providing proper security, ensuring confidentiality, integrity and availability.
Some example of source code repository managers are Nexus Repository OSS, Artifactory or Maven.
Code Version Control System
A code version control system is used to keep track of the different versions of software source code.
You can find a list of code version control system on this post. Three among the most popular are Git, SVN or CVS.
Tests must be done in a regular way and be integrated into the software developer routines. Some dev teams include testers, whose objetive is to identify bugs and issues before the version arrive to validators or final users.
You can find on this post a list of popular unit test tools.
An example of automatic bug identification tool is Sonar Qube.
Application Security Testing (AST) Tool
It is recommended to integrate security from the development processes.
Automation servers allow to configure and automatize repetitive tasks that are done in a regular way, as for example building code or deploying a new version to an environment
Some examples of popular automation servers are Jenkins, Azure DevOps Pipelines or GitLab.
Integrated vs Modular Approach
The traditional approach when configuring a software development environment is using a different tool for each of the components. This is what I call modular approach.
The drawback of module approach is the effort of having to integrate all the different solutions from various providers, what is not always easy.
Since the 2010’s, some providers are offering services where provide all or most of these tools within the same environment. The advantage is that integration is smoother, and the disadvantage is that you have to rely in a single provider.