Continuous Integration / Continuous Deployment (usually referred to as “CI/CD”) has accelerated modern software development by enabling the automation of processes that used to be manual.
For real, back in the bad old days (like, 15 years ago) we used to push changes to a staging server, manually QA them, then ftp the files to a production server.
Not gonna lie, it was terrifying.
Continuous Integration (CI) refers to systems that bundle software into known, working versions.
On the web, Continuous Deployment (CD) is what updates your servers to use the new version of the software.
So, again, CI creates the new version of your software. CD deploys it to production.
The “Cs” in CI and CD are there to indicate that these are automated processes. In other words, there is software doing the work of bundling up the new version of the application and deploying it to a production environment.
CI/CD enables a bunch of things including the use of packages as a way to isolate pieces of the overall system and high-confidence deployments to production, specifically because the process is automated and not relying on a systems administrator to remember the specific sequence for updating the application and persistence layers of the site.
And, yes, in fact, I have personally seen the manual way of doing this go sideways multiple times in my career, sometimes in spectacular fashion. Thanks for asking.
CI/CD is also what enables us to run automated tests against our software prior to deployment.
The earliest of these tests were limited to ensuring the correct inputs and outputs for parts of the system.
But eventually, tooling appeared that could test the UI as well.
The problem was the vast majority of these tools were built in a culture dominated by ableism, so they didn’t—and still don’t in some cases—take disability into account.
EJ Mason wrote an amazing article on the Assistiv Labs site about how ableism becomes the default for our work unless we actively swim against the dominant culture’s tide.
In that article, EJ argues that our tools in many cases reinforce ableism.
But how exactly?
By assuming all users are using a mouse, or by implementing simulated keyboard events instead of faithfully emulating user input, as just 2 examples.