What's a software factory? A review in 3 parts
After Ford’s rolling machine and Le Corbusier’s living machine, industrialism arrives at software: the problem-solving machine. But what is a software factory?
"Experience is the thing of supreme value."
― Henry Ford
After the invention of the assembly line, Henry Ford revolutionized the production of automobiles. That permitted the implementation of standardized and automated processes that made the products cheaper, safer, and faster to build. But this new technology was not restricted to a particular industry. Le Corbusier noticed this and described vehicles as a purified version of their function: the rolling machine, the flying machine, the floating machine. He then postulated the house as: "the living machine."
With the worldwide implementation of software, this theory crept to its development. That is the base behind a software factory: standardize software production. Software factories see software as problem-solving machines.
The problem with artisanal solutions
"The house is a machine for living in."
― Le Corbusier, Towards a New Architecture
The Fordist analogy might be too cliched, so let’s take a look from an angle that you might not have considered. Go to your kitchen, take a ruler, measure your washing machine, your oven, your dishwasher. I will make a prediction, they are all 60 cm wide (aprox 24 inches). Am I right? That’s standardization at its best. You might notice that most windows have the same proportions. The same is true for doors, chairs, and table height. But where am I going with all this?
Le Corbusier, and many others, noticed that an artisanal solution for a problem creates a great deal of variety, taking a lot of time and money. Standardization enables time-saving, automatization, and cheaper processes that immediately translate to prices. So what does this have to do with a software factory?
The "recent" invention of computer programming meant that most of the work was done by brilliant people but in an artisanal way. Developers shared many similarities with skilled craftsmen. They tackled problems one by one, writing dedicated code and polishing their skills along the way in a solitary manner. But this way of working does not permit the increasing demand for software that the world needs.
As people shift to depend more and more on technology, businesses had to react to these changes. But one can not usually buy a one-of-a-kind personalized car. Companies looked for industrial solutions to their problems.
So, what is a software factory made of, and what are its parts?
A software factory contains a toolbox of standardized solutions. These are designed to build a specific type of application. Most factories have an interrelated assortment of the following components:
Factory Schema: A mother document that defines hierarchies while categorizing assets used in a systematic way.
Reference implementation: Provides an example of a finished product that the factory has built. It is like analyzing a designer’s portfolio.
Architecture guidance and patterns: A guide to the factory’s design choices and their justification.
How-to topics: The guide for the new hiree: they set standards, procedures, and common instructions.
Recipes: Automated procedures that help developers complete routine tasks without a lot of input.
Templates: Pre-made application elements with placeholders. The team lays them down at the start. They give the client a general idea of the possibilities.
Designers: Higher complexity tools for developers. For top hierarchies and complex design.
Reusable code: These are components with common mechanisms or functionality. That is the key to reduce manually written code. You get proven solutions to typical problems.
Features of a software factory
When building a product, the software factory performs a series of steps:
Problem Analysis: You have to determine if your product falls within the scope of a software factory. With this, you define if the team can build the entire product or just part of it. As you wouldn't assemble a plane in a car factory, but maybe only some parts.
Product Specification: You define your product requirements. You have to know your needs so they can help you.
Product Design: This is where the customization takes place. After laying down your prerequisites, you have to discuss the specifications for your product.
Product implementation: This is the most variable part, where a range of mechanisms is implemented depending on the particular product.
Product Deployment: The team configures constraints and required elements while they deploy the executables.
Product Testing: Create or reuse test assets that apply with their measurement tools.
Benefits of a software factory
As you search for a solution to your problem, you might steer to take a more conventional way to software development. Before taking that path, you should consider the main benefits provided by a factory approach:
Knowledge: A software factory can function as a knowledgeable partner. They have probably faced the same problem that you want to fix several times. They might already have the answer you seek.
Consistency: You can use them as a way to achieve consistency across a product line. That helps with administration, lowering training and maintenance costs. As you would not hire multiple design teams for your brand, you might also want a unified front for your product. This consistency also provides your project coherence with the rest of the web, checking Jakob’s Law in the process.
Quality: These kinds of businesses have probably already tried what you are seeking, faced challenges, errors and know how to fix them. That makes them a development team used to learn and implement proven practices. As they have a library of reusable code already tested, they can focus their efforts on features unique to your product.
Productivity: Velocity comes with practice. Hiring a group that already knows the terrain helps you find the secret shortcuts and paths that only an experienced guide knows. Plenty of processes can be automated and simplified.
Automation: This is in everybody's mouth today. As many expect cars to be self-driving and coffee to be self-made, software factories can implement more hidden features that improve quality of life such as instant sharing across platforms or integration of databases.
Security: You can make sure that the code has been tested by past clients, that it stood the test of time. What is a better way to prove its effectiveness than that?
These benefits can add value to your business and internal management, augmenting productivity and decreasing costs, waiting times, and effort.
Awkbit: a software factory
“I think it's very important to have a feedback loop, where you're constantly thinking about what you've done and how you could be doing it better.”
― Elon Musk
At Awkbit we take pride in our work. We promise to be a listening and dedicated partner who will do its best to satisfy your needs while constantly accepting feedback. As a software factory, quality is our main goal, along with productivity, security, and consistency. We provide best practices to build your project while embracing your specific challenges. Are you ready to infuse change in your company? Get in touch.