As we explore Software Engineering and its relationship to businesses, the first question is: What is success?
Notice that I don’t ask “What is software engineering?” To say what something is means you have to know why it exists. And to know why it exists, you must know the end it is directed towards, which is also what would define success.
If the ultimate aim is understanding how to improve these organizations, we must have a good answer to this question, because better is only a relative term.
So what is the goal of software engineering?
Software is a tool. Therefore it must be for something, to solve some problem.
Some things are just for their own sake, like playing a game or the piano, or reading a book. It’s just fun.
While a software engineer may feel this way about writing software, that does not explain the context in which software engineering happens inside of organizations. Why are people willing to spend so much money on software engineering?
What are the kinds of problems that organizations need software engineering to solve?
To get at this, it is necessary to say something about the general nature of business.
Since businesses and organizations have many different ends and reasons for being (and they’re incommensurate) it can be helpful to look at the most basic common denominator.
Businesses exist to make money.
“But what about non-profits or other kinds of organizations that don’t make money?”
Wikipedia is a good example here. Wikipedia must produce a platform that attracts and delights enough users that its yearly appeal for donations meets its operating expenses. Something they do must result in dollars going back into their organization to replace the dollars spent operating it.
So we will content ourselves, at least for now, to using this simple definition. An organization must take money, spend it doing some activity, and then somehow end up with at least the same amount of money on the other side through sales or donations.
If organizations need to make money, how does software engineering help?
The Goal
In The Goal, Eli Goldratt lays out the theory of constraints. This theory is essential if you want to understand what makes some companies beautifully effective and fast, while others are a huge mess.
The goal is to make money, or, stated differently increase throughput while reducing inventory and operational expenses.
Let’s break this down. Throughput is the rate at which money in is converted to more money out through sales. Why do we choose sales as the endpoint? Because everything else is meaningless. If you build up $100k of inventory and you had $100k to start with, you now have $0. You can no longer operate your business to even sell the inventory. You could work for free and try to move some things, but your inventory is only valuable to you if someone wants it.
Sales is then the end of the value pipeline.
Money in -> ???? -> Sales. That’s the basic story. The “????” is your particular business.
Why reduce inventory? As mentioned, inventory is just money trapped in the system. Why would you want money trapped in the system instead of converted to sales (and thereby available to become another input)?
Operational expenses are all the money that the system burns in the middle. This is money you don’t get back, but that is necessary to convert each dollar in into more dollars out. It’s obvious why you want to reduce this. These dollars are necessary, but if you could do the same work without them, you would.
Throughput. This is perhaps the most interesting part of this definition. Why do we want to increase throughput? Because every time a dollar goes through your system, it comes out as a dollar + a little extra. This is exponential growth. This is what allows you to reinvest. The larger your pipeline of throughput, the more money you can make in your business. The faster your throughput, the faster you can compound this process.
How does Software Engineering fit in this picture?
Software fits into a business in primarily 2 ways.
- Software is the product
- Software supports the business
Depending on what kind of business you have, you may not need your own software engineering in-house. But you absolutely need some function in your organization that is responsible for delivering the needed software to the needed business functions to support either a) increasing throughput, b) reducing inventory or c) reducing operational expenses.
Software engineering may not exist as a discipline in your company, but it is difficult (seemingly impossible) to compete in most industries with no software at all.
So Successful Software Engineering does…?
A Successful Software Engineering Organization either creates the product or supports the operation of the business.
Is the definition of success the same in each case?
If it supports operations, then its role can be seen simply as improving the existing processes, or even replacing them, to achieve the goal (as outlined above).
If it produces the product, then its role is actually a key part of the value pipeline of the whole business.
In order to understand how a software organization is working, you need to evaluate it in reference to its goals. Only then could we compare the function in two contexts to see if they’re measured in the same way.
We will do this in the following posts.
Pingback: Effectiveness: How do you know when it’s working? | Max Summe