Software Development is a creative process, and as such it's important to minimise the things which can disrupt your flow.
A modern web development setup is one that harnesses the concepts of Continuous Integration and Continuous Deployment to deliver the end result. Practically implementing these two concepts goes a long way to improving the efficiency of a project. Why? Well, it's all about distractions.
Having an efficient, "hands-off" approach to validating and releasing code is an essential part of the way we work, primarily because it helps maintain our focus and avoids the need to context-switch.
Before we had our fancy Continuous Integration and Continuous Deployment processes, we made manual deployments 😱. Back in those dark days, a human would log on to a server and copy files from place-to-place. It required collaboration with the development team and concentration lest a mistake be made.
With CI/CD, the whole development and deployment process works like this:
- Work locally
- Test locally
- Commit code
- Push changes to Source Control
- Automated Tests
- Automated Deploy to Dev Environment
Which for a developer means:
- Next task
- Log on to server
- Copy files (wait...)
- Next task
This is a much better setup because it greatly reduces the time spent not coding. In terms of effort, deploying code and testing it afterwards is the most laborious part of the process. Both automating the testing and deployment of source code and initiating it automatically saves time, effort and cognitive overhead, leaving developers free to continue doing what they do best - development.
At MMT Digital we usually use TeamCity to handle our CI/CD processes. I've also started looking at the newer pipeline features of GitLab, GitHub and Bitbucket on my personal projects as a way of achieving an automated CI/CD workflow.