A Consistent Experience Makes for More Sophisticated Software
Software development evolved from customized to standardized builds, then to a standardized structure for source code in the past two decades. As a result, the artisanal approach to development — in which two people execute the same function differently, or one developer solves the same problem different ways on different occasions — has had to give way, says Christopher Yates, principal chief architect at Red Hat.
“The factory is the machinery you build that allows you to create sophisticated things in a repeatable way,” Yates says.
Similarly, the artisanal way of learning — with a master guiding the journeymen, guiding the apprentices — has proved outdated.
“That’s a human-focused and linear process. You can only teach so many people at a time,” Yates says. “Within the software factory, you can set up guide rails and best practices that affect the way others behave without the need for that knowledge transfer from one individual to another.”
Reitzig highlights three core components of a software factory:
- Lean and agile practices, which extend beyond software development to encompass organizational design, workflows and funding decisions
- Infrastructure that’s cloud-native and containerized, which lets agencies reap the efficiency and scalability benefits of a modern architecture
- Process automation, which covers the key phase of the development lifecycle — from quality scans to security tests to deployment — as well as infrastructure management
The common standards and processes in software factories are like restaurant chains that have a similar menu and atmosphere but differences in their physical locations.
“It’s a consistent experience. People know what they’re going to get, and it’s cost-effective,” Reitzig says.
LEARN MORE: Defense agencies are turning to platform engineering.
Automation’s Role in Securing the Software Factory
Of the three components, process automation is likely to present the biggest hurdle. Many organizations are happy to implement continuous integration and stop there, but agencies should strive to go further, Reitzig says.
One example is automating underlying infrastructure configuration. If developers don’t have to set up testing or production environments before deploying code, they get a lot of time back, and they don’t have to wait for resources to become available.