Hosted Git Solution (Gitlab, GitHub, Etc.)
Of course, if you’re doing any work with others, you’re going to need some form of source control that everyone can access. But when it comes to choosing the correct one for your team, there are a few options to consider.
First off, there’s GitHub, which is by far the most common Git provider. It’s great and provides a ton of features, but it does focus more on open-source public collaboration rather than meeting the needs of private teams. GitHub does offer unlimited private repos for free as of last year, which will be suitable for most small projects. If you need to host it yourself or need enterprise features, you can pay for GitHub Enterprise, which costs $21 per user, per month, with a minimum of 10 users.
If you want something more focused on private teams, you might want to consider GitLab. In addition to being a fully featured hosted Git solution, it also provides numerous tools for teams looking to adopt a DevOps workflow. GitLab issues is a basic Kanban board, like Jira, that is used to track issues. GitLab CI can run automated builds and tests similarly to Jenkins, a crucial part of a CI/CD pipeline.
You can also run GitLab’s free and open-source Community Edition on your own servers, under your own domain. If you want to pay for more features, the basic version is $4 per user, per month, with the standard version priced similarly to GitHub at $19 per user, per month.
These are the big two, but there are plenty of other solutions out there. Atlassian’s BitBucket integrates very well with Jira and Confluence, and AWS’s CodeCommit works smoothly with their CodePipeline CI/CD solution.
Issue Tracking (Jira)
Software development is messy, and without direction it can be very hard to work together. Having some sort of issue tracking is a necessity for getting anything done.
The most popular and featured solution for this is Jira from Atlassian Software. Jira is a Kanban board—basically, individual “issues” are represented by cards in a list. Multiple lists are on a board, such as Backlogged, In Progress, and Done. Cards move from list to list based on where they at in development. Issues can be commented on, linked to other issues, sorted into large blocks of features, and assigned to other team members. You can read our guide to using it here to learn more.
If you don’t want to pay for Jira, GitLab issues is a free alternative, and Trello is a simple Kanban solution that isn’t just for software development.
Automated CI/CD (Jenkins, CodePipeline)
Continuous Integration/Continuous Deployment (CI/CD) is the process of releasing new code updates very often, usually at least once a day. This process is very hard to keep up with without some sort of automation to handle the annoying parts, like building and testing new releases, and sending updates to your servers.
Jenkins is an automation server, originally written for Java. It can do a lot of things, but it’s commonly used for automating builds and testing. With plugins, it can be extended to automate deployment to your servers.
If you’re on AWS, you can use their own CI/CD pipeline, called CodePipeline. This automates every stage of development, from source control, to building and testing, and deployment to various AWS services, such as EC2, ECS, and even Lambda.
File and Document Sharing (G Drive and Confluence)
This is an important but often overlooked part of any team’s toolkit—you don’t want to have to rely on emailing other people every document.
For many people, Google’s G Suite (specifically Google Drive) works well for this. If you don’t want to pay for accounts for all of your team members, a Google Drive folder shared to their personal emails will work well. Dropbox is another solution, also offering a business version for paying customers.
If you’re looking for something a bit more professional, you might want to look into Confluence, from Atlassian. Confluence is a collaborative workplace for working on documents together, much like G Drive, but for corporate customers. Best part is, like Jira, it’s free for up to 10 users, and costs $5 per user, per month, after that.
Docker
Docker is a tool for running apps inside of containers, which package all of the dependencies and code your app needs to run inside of a single easily-distributable file.
The benefit of running your app on Docker is that your development environment will be exactly the same as your production environment, and exactly the same as everyone else’s development environment, alleviating the problem of “it’s broken on my machine!”
Docker also makes deployments very easy. Because you don’t have to worry about the server it runs on, you can run Docker on anything, including services like AWS’s Elastic Container Service, which run containers without provisioning servers. If you need to manage a whole fleet of containers, orchestration tools like Kubernetes can handle that as well.
It won’t be for everyone, as it does require teaching all of your devs how to actually use Docker, and it can definitely get complicated. But, the benefits for most teams will greatly outweigh the initial headache, and it’s at the very least something to consider. You can read our guide on packaging your application with Docker to get started.