What Companies Can Learn from Software
There are parallels between the organization and operational philosophies of companies and what is considered “good” software design. Attributes that immediately come to mind about good software design that can be applied to a company’s operation are loose coupling, polymorphism, and reuse.
The structure of large and and more importantly successful companies, even large corporations, are loosely coupled. Companies (such as Google and Amazon) adopt an organizational philosophy which allow them to operate with small autonomous teams to accomplish specific goals. Instead of large unwieldy teams with perhaps scores of employees and consultants with out of control budgets, the smaller self-managed teams are allowed to have more focus. Without the distractions of less important meetings (usually justified by larger groups just so the left hand knows what the right hand is doing), the small team is left to solve a task faster and more effectively.
Polymorphism in software means is the process of using an operator or function in different ways for different set of inputs given. This idea is perhaps more important to smaller companies since they generally have to rely on less people to handle various tasks. Polymorphism in the context of a company’s operations translates to an employee that’s able to handle various tasks well. The more things an employee can do well, obviously they become a more valuable asset.
Companies operate more efficiently when there is more reuse. This is where larger companies struggle because they rarely have good communication lines between each group or silo to realize that what group A is trying to do has already been accomplished by group B. This leads to group B essentially reinventing the wheel by doing something that may be very similar to what group A has already done, all from scratch. So the mistakes made and knowledge learned are not transferred, leading to more time and resources used for something that was already accomplished.
Although these parallels may not be new, it’s interesting to see how simple concepts and processes can be translated to vastly different contexts.