Capacity planning is the art of predicting the future. It is the process of figuring out how you take your view of the past as metrics and apply it to future planning. As a field, capacity planning has significantly changed over the years. It has been around for centuries, because as long as humans have been able to, we have planned for the future. Where does our food come from? Where are we sleeping tonight? How much food do we trade and how much do we keep for our family? How do I surround myself with people who respect me? Can my tribe survive by hunting this herd? Where has the best jobs? Even today, we are constantly evaluating how our current situation will change and whether we can survive within it.
Capacity planning grew throughout the industrial age, as people learned that they had to hire workers based on demand, their output speed, and how many materials they had. This is how things stayed for a long time and it is still accurate today, whether we are building data centers or making products such as chairs. In terms of data centers, something I learned from Google is that filling a data center is easy but finding the space for one and building it is not.
Starting in 2012, it took Google around three-to-five years to find a plot of land to build a data center, persuade the local government to sell it the energy it needed, and get all of the appropriate paperwork signed. It would then take 18 months to build the building and wire it up. Finally, it would take six months to fill it with servers and be online and working. These long timelines require Google to always be planning for growth. If it will take five years to make a significant growth in capacity happen, careful planning is needed.
These sorts of timelines used to be more common in the engineering world. Imagine how long it might take to build a bridge or look at the release cycle of Apple laptops. With software, though, we are quickly moving away from long timelines. Now, we have moved to a world where you can create servers almost immediately. Software-defined networks are becoming the norm. Often, you are running on other people's computers in the cloud or are in the process of building a platform for other people to run on top of.
Capacity planning is incredibly valuable, because growing capacity can be a slow and expensive process, even given the advent of modern technology. As we continue to move up our hierarchy of reliability, we are now talking about the future. How do we plan for it, shape what it may look like, and assess the risks and problems that may appear? In this chapter, we will be talking about how to plan for growth, some basics of finance, how software architecture changes affect capacity planning, and how to communicate within your business about growth.
Often, engineers think about things such as software performance, metrics, servers, hard drives and network bandwidth. Instead, we will first dive into some business finance. I have found that many software developers are interested in finance (see cryptocurrencies, flash trading, gambling, and so on), but it took me a long time to be turned on to it. As such, people would speak finance jargon and I would smile and nod. Frequently, I did not realize what was being implied about how the business thought about my team or about how our CEO viewed economics. I bring this up now because one of the most significant aspects of capacity planning is figuring out money: discovering how your business deals with money and how to acquire it for your team. Can you ask your CEO to approve a $50,000 purchase or do you need to work with the finance department? Does your company have a budget for increases in infrastructure costs? Often, you will interact with someone who will use terms you have never heard of, which will make discussing money difficult. Knowing jargon and language is vital to working with people. It sets a baseline to start discussions.
Here is a list of some economics jargon that I have found useful when thinking about businesses:
These are investments that you will not get back, such as insurance, labor, people costs, infrastructure, and so on. If you were a gardening service, purchasing the lawn mower would be Capex, while its fuel would be Opex.
Public companies on the New York Stock Exchange are required to share a lot of this financial information with the public every year. Specifically, in the US, they must file a P&L statement, a cash flow statement, and a balance sheet. Some companies also share the information quarterly. Unlike many educational systems (which often have arbitrary periods to define quarters and semesters), businesses usually have financial quarters that are exactly three months long. That means that if your company's fiscal year lines up with the US tax year (which is January 1 to December 31, although tax periods are different depending on the country), then your quarters will end on March 31, June 30, September 30, and December 31.
Private companies can do whatever they want fiscally, but it is pretty standard for private companies to have quarterly board meetings where they discuss their finances with their board. Some companies share board meeting notes with their employees, which is where this data may come up. Note that every company is different, and every country is different, so depending on where you live and where the company you work for is based, all of this may be very different. I have mainly worked for US companies, so my explanations may be imperfect or biased based on that fact.
You should figure out how your organization operates as a business. To do that, you need to understand the flow of money and how to talk to the people who deal with making sure your business has balanced books. While you do that, you can start planning how your software will operate inside that world. Capacity planning is a never-ending task, so you will have to create plans and then adjust them based on how information changes.
Businesses often have a business continuity plan. This is a plan for how the company will deal with significant change. If a business is taking a large risk, this may be written up so the company has a plan for how to recover after a tragedy. This is similar to capacity planning but is designed for the business heads to deal with unforeseen actions. Some businesses and governments even run Business Continuity Plan (BCP) as if it is an incident response team. There is constant evaluation of the plan and practice table-top sessions to make sure it would work and people know their roles. All of this is to hedge against the risks that a company constantly faces.
3.17.174.156