What’s in a Software Factory?

Tiny bits
bitmaker
Published in
3 min readMar 1, 2013

Enterprise software development undoubtedly plays a central role on most successful companies today. Their value chain is supported by a number of software systems, crafted to their specific needs. Depending on each company size and business type, these systems are developed by in-house teams, external companies or both. Invariably, these software projects have 3 key aspects: a spec (what we want to do), a budget (how much we are willing to spend) and a timeline (when do we expect the project to be done).

To be successful, a software project should be done on time, on budget and on spec. The truth, the naked truth, is that the majority of software projects fail. Sometimes, the end result is not exactly what we expected it to be (the spec). Time and budget are intimately co-related: more time leads to more money. And why software projects fail so often? Well, this deserves a topic of its own. But one of the key reasons is that enterprise software development resembles more a bunch of skilled craftsmen working together than a modern factory. This might look odd, since we are talking about one of the most advanced industries.

Before Henry Ford designed Model T, the automobile industry was a manufacturing industry. Cars were made by hand, taking a lot of time to produce a complete, working vehicle. Then, Henry Ford designed what today we call “assembly lines”: an automated way of producing cars. He developed tools and machines that helped the mass production of vehicles, in a fraction of the time and the cost. This really changed the face of industry at the time.

Nowadays, traditional industry is synonym of assembly lines and mass production. Factories are setup with high-tech equipment's and machinery in order to produce something, achieving economies of scale. That is, as long as the production increases, the average cost of each unit decreases.

Why not transpose those concepts to enterprise software development? Every software project is different, but they all share a lot of pieces in common. When we talk about enterprise software development, we talk about web pages, services, data access, databases, security management, logging, etc. What if we design an assembly line, based on a set of specific technologies and define a standard way of producing software? In other words, why not implement a Software Factory?

The concept of Software Factory isn’t new. In fact, some people tried in the past to implement them. But the mindset was to develop tools (mainly visual tools) for people use to produce software. This proved to be a very limited vision, since the projects now depend on those tools.

So, what’s in a software factory?

factory2

First, we should define an assembly line. An assembly line must comprise a set of specific technologies. For instance, we could define an assembly line for ASP.NET MVC, Entity Framework, Castle Windsor and SQL Server. Another example should be an assembly line for Apache Wicket, JBoss Seam, EJB 3.0 and MySql.

The next step is defining the tools. An IDE is always the first thing to choose. Visual Studio and Eclipse are the choices for our example. Then, the source control: GIT. Continuous integration, Jenkins. Test automation, xUnit and Selenium. And so on.

Now that we defined the technologies and the tools, comes the most important part: the process. This is the definition of how to do things, the knowledge management, the patterns and best practices. Programmers should be specialists in the technologies, but also should be specialists in the process. Like in a real factory, skilled workers are very important, but the process is the key. Standardization and training are cornerstones of any successful industry.

Finally, and because we are talking about software development, we must excel at software engineering. Well designed architectures are crucial for great software projects. Add experience in several, small to large size software projects, and our recipe is complete.

I strongly believe that we can learn very valuable lessons from traditional industries. And my daily life as a software architect in a software factory company proved to me that Henry Ford vision really makes the difference in enterprise software development.

--

--