Tech Insights Software Factory

Software Factory: Modern software development

What’s a software factory?

A “software factory” is an organized approach to software development that provides software design and development teams a repeatable, well-defined path to create and update software. It results in a robust, compliant, and more resilient process for delivering applications to production.

There are several important elements of a software factory, including: releasing software on a regular, faster cadence; continuously refining development processes; and utilizing cloud native technologies to remove infrastructure toil through automation and self-service.

Conceptually, a software factory brings together the best and most innovative approaches to software development to accelerate digital transformation. Rooted in DevOps and agile software development methods, a software factory combines tools, teams, and practices to organize, standardize, store, and reuse code, enabling teams to efficiently build upon accumulated knowledge. Both developers and software architects benefit from a more organized and structured approach, while your entire organization benefits from faster software delivery and higher quality code.

The foundation of a software factory is the tools, services, repositories, and practices used to deliver software. This typically includes stored recipes, templates, and reusable code that can be leveraged to quickly create new applications while minimizing the amount of original code needed. This foundation enables teams to plan, build, and deploy software more predictably.

The exact components that make up a software factory depend somewhat on an organization's technical capabilities and software development goals. A traditional enterprise with a mix of mainframe, client-server, and cloud technology may have different requirements than a company born in the digital era—with different priorities, levels of product maturity, and software development skills. However, implementation of the software factory approach may benefit any type of organization implementing DevOps or DevSecOps.

Spotlight: The U.S. Army Software Factory

When The Army Futures Command discovered that the U.S. Army needed more responsive software development, they built a soldier-led software factory. After three years, this decision is bearing fruit across the armed services.

The U.S. Army Software Factory turned to VMware Tanzu Labs to build a robust, compliant, and resilient software development process to deliver applications to production more quickly. Educating the key staff up front enabled the organization to modernize, transform, and achieve better software outcomes right from the start. In partnership with Tanzu Labs, the Army Software Factory trains soldiers and civilian employees in modern software development practices and is producing software that better addresses current and future mission priorities and the needs of soldiers.

The U.S. Air Force and U.S. Space Force are also VMware Tanzu customers.




Benefits of software factories

A software factory provides many benefits to organizations seeking to accelerate software delivery:

  • Increase quality. Standardizing app development practices across a portfolio of projects at scale with a focus on utilizing proven practices and reusing code decreases the defect rate.
  • Enhance productivity. Well-understood methods, reusable code, and process automation combine to increase developer productivity and decrease toil.
  • Improve application release cadence. Organizations can speed up the process of creating and testing new application code.
  • Ensure consistency. Standardizing the process(es) necessary for software delivery ensures consistency across projects while lowering training and maintenance costs.
  • Establish a useful catalog of software and code. Documenting reusable code and patterns in cookbooks helps your organization take better advantage of knowledge gained from previous projects.
  • Provide a foundation for DevSecOps. A software factory is helpful when integrating security into the software development process, resulting in more secure software with less effort.
  • Create a framework for change. Establishing a software factory provides an opportunity to build more collaborative teams and catalyze the changes to your corporate culture necessary for digital transformation.



What to keep in mind if you're considering a software factory model

Implementing a software factory can increase code velocity for traditional enterprises and help digital organizations get on the path to continuous improvement and the creation of a formal knowledge base. As you implement a software factory model, there are a number of practical considerations to keep in mind.

Understand your starting point

The first step in creating a software factory is assessing where you’re starting from. How do your teams work together? How mature are your DevOps or DevSecOps capabilities, if they exist at all? Will your company culture support the necessary changes? Will you start small and grow with experience or go all in from the beginning? The better you can define where you are and what you want to accomplish, the easier it will be to align your resources.

Which components are important?

The goal of a software factory is to develop tooling and practices that make it easier to build apps, manage the application lifecycle, and retain lessons learned as part of your organizational memory. You should consider the following as you get started:

Planning

  • Reference and informational elements. Which resources will you provide? Consider creating guidelines for starting new applications, how-to topics, and examples of completed projects. These are also useful for training and orientation.
  • Application architecture. Which application architecture(s) will you support? Common modern application options include microservices, serverless, and event driven.
  • Architecture guidance and patterns. Whichever architecture(s) you choose, you’ll want to provide resources that explain application design choices and the pros and cons of those choices.

Programming/coding

  • Languages. Which language(s) will your software factory utilize?
  • Tooling. Which development tools will you offer as part of your software factory?
  • Software design. What tools or methods will you use to model applications at a higher level of abstraction?
  • Templates. Templates are premade application elements with placeholders. They can accelerate and simplify project startup.
  • Reusable code. Reusable or prefabricated components that implement common functionality or mechanisms can reduce the amount of manually written code needed for a project, reduce the error rate, and accelerate project completion.

Should you implement DevSecOps in your software factory?

DevSecOps is an approach that integrates security into the application lifecycle. Embedding DevSecOps practices into your software factory can enable you to engineer security into every aspect of software development. Having development, operations, and security teams involved in the app development process from the beginning enhances your security posture, streamlines the path to production, and accelerates application delivery




Frequently Asked Questions

Why should I consider a software factory model?

Implementing a software factory provides consistency of operations, increases application quality, and enhances your team’s productivity, allowing you to deliver better software more quickly.

What does a software factory do?

A software factory formalizes the processes for software development, creating a system that can be easily reused (and continuously improved upon) by your teams.

How can I get started creating a software factory?

The easy answer is to get help. Although you may already have all the pieces in place, the key to success is establishing efficiency between clearly defined roles across all activities. Just like a physical factory, everything must operate together. A knowledgeable outside adviser can provide insight into the best methods for your organization’s needs.

What is DevSecOps?

DevSecOps is a method to integrate security as part of the software development process. Among other things, DevSecOps makes it simpler to avoid including common vulnerabilities and exposures (CVEs) in new applications, and easier to patch newly discovered CVEs in existing code.