Software development has come a long way in the last 30 years. I remember when you could manage the software development life cycle (SDLC) on your own computer. You could write code, debug it, build it, and ship it all from your desktop. Source would be stored on a file server and managed by saving a zip file at the end of every day. If you used a source control tool at all, it was CVS or SVN with a central server that made branching and merging a real challenge. Releasing software meant sending a “gold” floppy disc to a manufacturer who cataloged the software shipped to stores and vendors.
Today it’s both easier and more complex. Most new software is delivered by the browser. Teams of remote developers manage large codebases using sophisticated central code repositories. They coordinate work with issue tracking and communication tools and they do continuous integration and continuous deployment with tools designed specifically for that purpose. The SaaS delivery model allows teams to release new features instantaneously whenever they want.
That process requires a lot of software tools. Some might argue that good chairs and widescreen monitors will do more to improve the development pipeline, but we’ll stick to software tools here.
So what are the software tools required to do modern software development? Modern teams need at least these five.
Integrated development environment
Writing code gets harder every day, and developers need a tool that can keep up. A good IDE will allow for code editing, syntax highlighting, code completion, source control management, compiling, and debugging. A good IDE will also provide some form of an extension API that lets anyone enhance the capabilities of the editor.
Unless you have a very specific need, I would recommend using Visual Studio Code because it is simply the most popular, powerful, open, and capable IDE out there. VS Code is built and maintained by Microsoft and is open source. It is enormously popular, can handle almost any programming language you throw at it, and has thousands of useful extensions. With more than 20 million developers using it, VS Code is by far the tool of choice. The ability to add in GitHub Copilot, GitHub’s AI-based coding assistant, provides even more motivation.
COVID has changed the way that development teams work together. Suddenly development teams were all working from home, and they physically needed a way to communicate when they couldn’t meet. The combination of Slack and Zoom became the way to go. It still is.
Slack benefits from being very widely used, and thus has a large library of plugins and integrations that allow you to do many things that might not even occur to you before you start poking around. Zoom has become the de facto videoconferencing tool for teams and meetings of all sorts. Integrating Slack and Zoom together is easy and powerful. I recommend this combination because of the wide use for both tools, making it much easier to communicate with employees, customers, and vendors across your entire organization, and not just the development team.
A close runner up here is Microsoft Teams, which has the advantage of combining chat and videoconferencing in a single app.
Source version control
Mercurial was a contender there for a while, but Git has clearly won the contest of source control tools. If you aren’t using Git, then you are going to be left behind.
Git is a distributed version control system, but proper use requires a centralized repository, and GitHub is the clear leader in this space. GitHub is my choice for its ubiquity, and for its features beyond being a code repository. GitHub is by far the leading host for open source projects. Every company should have some form of presence on GitHub.
Some of GitHub’s additional features include issue tracking, code review, and hooks into the build and deploy process. GitHub is even leading the charge into IDE-in-a-browser with its Codespaces product, which is based on Visual Studio Code.
A close second for source control would be GitLab, which is available in an open source edition, and is nipping at the heels of GitHub in almost every way.
I have to confess that, until about a year ago, I didn’t even know that feature flags were a thing. Now their use is growing as SaaS solutions actually allow you to turn features on and off with the click of a mouse. Feature flags let you control features for pretty much any reason you like—by company, by customer level, or by user. This allows you to do things like deploy a beta test or test a “canary” deployment on a small portion of your customer base to see how a new feature survives in the real world.
The clear leader here is LaunchDarkly, a SaaS platform for feature management that gives you powerful controls over how an application and its features are spread. It’s hard not to go with a company that is such a clear leader and that continues to expand its feature set.
I’ve been doing continuous integration for years. But continuous deployment is newer, more challenging, and frankly, a little scarier. CI/CD requires building software, running tests, putting artifacts in the right place, provisioning cloud resources, deploying applications to multiple locations, and any number of disparate activities that all go into the process of taking code from the moment it is checked in to running it in production as soon as possible.
Many teams are trying to slash the time from code check-in to deployment from days to fifteen minutes. (You read that right.) That’s the scary part—putting something into production so quickly means you need to be ready to react quickly. On the plus side, short deployment times offering immediate feedback if there are problems, allowing developers to keep the context of recent changes in their head and more quickly and easily fix errors as they occur.
Doing CI/CD right definitely requires a powerful tool kit. Fortunately, there is CircleCI. CircleCI can do it all, connecting with a plethora of frameworks and systems to build and deploy your application quickly. I like CircleCI for its full feature set, speed, and compliance.
Honorable mention would go to the open source CI/CD tool Jenkins.
These five tool categories—IDE, communications, source control, feature flags, and CI/CD—are the bare minimum you need to do modern software development. All of these tools work together to minimize the time spent coding and getting that code into production. They all can be cloud-based, freeing you from having to worry about anything except doing the work. Whether it is coding in a cloud-based IDE or deploying in minutes with a powerful CI/CD tool, these are the tools that will smooth out the glide path for any software development process.