Bare metal, private and public clouds offer not only different ways to provision and maintain resources, but also different opportunities in how procurement and financial departments should treat and deal with them. We’ll discuss how FinOps principles’ implementation can help companies match cloud costs to needs and prevent the budget wastage.
What are the reasons for leaders to build FinOps and CloudOps culture in their companies?
Bare metal and private clouds in the majority of the cases are about CapEx, when companies purchase and upgrade hardware and software licenses in some cycles, lease space and power, and pay salaries to personnel. Public clouds are based on OpEx with monthly or annual bills and a mindset of leasing but not owning. If you are a small company, it’s not a big deal to adjust your processes, but for a huge company it’s a real pain: private clouds with CapEx, public with OpEx, engineering teams provisioning resources in multiple locations and without any limits in public clouds transforming into enormous bills, financial departments having on-premise and public resources and different accounting categories. These realities present obstacles to cloud adoption across big companies and showcase why they often still prefer not to go hybrid cloud.
To eliminate the barrier, FinOps and CloudOps methodology was created and is actively developing today with thousands of practitioners and enterprise companies as members and sponsors.
Building a FinOps team
Here is a list of people (but not limited to just these positions) engaged in the FinOps process: CTO, CIO, VPs and Directors of engineering / Ops / DevOps, CFO, financial controllers and analysts, engineering managers, project managers and, of course, engineers, who work directly with clouds.
Before jumping into the steps to adopting FinOps and CloudOps, it’s important to define the end goal – to build a transparent and defined process, when clouds are used in an optimal way from cost, performance, R&D, company goals perspective, and waste of money are set to minimum.
The core FinOps principles
FinOps is a process and a set of best practices to bring the following aspects to companies and stakeholders:
- FinOps: Visibility – cloud spending transparency and forecasting
- FinOps: Optimization – cloud expense optimization
- FinOps: Control – an established process of monitoring and controlling cloud resources and their expenses
- FinOps: Collaboration – FinOps is not about one person at a company but a constant collaboration between engineers and their managers, between R&D, Operations and Financial departments, CTO, CIO and VPs offices.
Implementation of these FinOps principles will help your company start a FinOps journey and set an ongoing process of cost optimization.
Let’s discuss all the FinOps aforementioned principles in more detail.
FinOps principles: Visibility
Private clouds have regions, tenants, clusters, etc. Public clouds have linked accounts, regions, IAM users and so on. Usually, it is a complex task to figure out how much is spent on each application, or by a team, but this is crucial to understand bottlenecks, budget & forecast and avoid wastage.
Visibility, in the case of FinOps and CloudOps, means identifying organizational units and mapping them onto cloud resources with preserving historical data for further trend analysis. Units refer to items like business units, teams, individual engineers, applications, cloud services and asset pools. As cloud resources are constantly changing, it’s important not only to capture the current state, but also to develop a process of getting visibility in dynamics with the help of a FinOps team.
The practices to get the visibility for company’s FinOps adoption are:
- Identify the units (mentioned above) to be tracked.
Don’t spread at the beginning trying to control everything, focus on what’s most important. Start with business units, teams and individual engineers, as it’s a good way to begin the FinOps education process.
- For a proper FinOps process define a policy how to identify resources belonging to a specific unit.
It can be either tagging or a resource naming convention. What’s important is that when you define it, you should follow it to succeed.
- Define a policy to identify resource creators.
It’s tricky to figure out resource creators in public clouds, so it is extremely helpful to have a policy for that, even if it is just a Jenkins job. Later, you may need to figure out who or what created an unassigned resource, and this approach will help.
- Create budgets and charts to track units.
It’s helpful to use cost management tools to track budgets properly. A budget overrun is one of the main challenges that makes companies implement FinOps and CloudOps methodologies.
- Set TTL rules and create clean-up jobs.
Don’t allow any resources without TTL. TLL can be set with tags or as a part of a name, and it helps to avoid wastage and understand the purpose of the resources better.
- Review your budgets in dynamics.
Unmanaged cloud expenses have a tendency to grow. You need to keep an eye on them to prioritize what budgets need an immediate action.
- Avoid unassigned resources.
You should build a habit of zero tolerance to orphaned or unassigned resources. The more such resources you have, the less transparency you get.
- Don’t forget about ‘hidden costs’, cloud accounts and regions.
A cloud is not just about VMs or containers; there are dozens of other services and items that cost money but are not so obvious. One of the most important aspects is network traffic, which can be a significant chunk of your cloud bill.
- Don’t forget that your resources can be spread between multiple cloud accounts and regions.
Taking those principles to action can immediately shed light on your current cloud expenses and opens the door to optimization, which will be discussed in the next chapter. A proper cloud optimization scenario is like a must have for a successful Cloud FinOps strategy of every company.
FinOps principles: Cloud optimization
Cloud optimization appears to be low-hanging fruit, but there’s good and bad news. The good news – in the majority of cases, you can quickly see instant results from FinOps. The bad news – you have to work on it constantly to build a FinOps culture in your organization. One-time optimization gives results, however in a few months you can get back to your previous cloud bill.
There are a few practices you can use to optimize cloud resources and reduce your cloud bill. The most important factor is to establish a process of smart and conscious resource consumption and provisioning so you would deal not just with the results, but make optimization an integral part of all your internal processes.
Here are a few ways to optimize your current expenses, followed by how to make it a part of the entire cloud provisioning process.
There are hundreds of cloud resource optimization tools. Some are really advanced, some just look at machine monitoring metrics and offer cheaper solutions. Focus on what you can do yourself with your FinOps team and without any tools. It’s important to analyze the market and identify a solution that conforms with FinOps standards and can help you with all the four FinOps principles.
You may want to consciously focus on IaaS services, as they are the most common. All items should work for all public clouds.
5 real life optimization tips to start Cloud FinOps adoption in your company
Start with unused resources you can clean up:
- List all the volumes and snapshots not being attached to any VMs or used to create images. Review and remove them. When you remove images, don’t forget to revise snapshots as they are tied to images.
- List all the stopped VMs and check if they are needed. If they don’t cost you anything as a VM, they still have volumes attached.
Moving on to VM re-flavouring: review performance metrics from your VMs and see whether you need to choose less expensive flavours. It would be nice to start with recurring resources like CI/CD jobs as you’ll get a measurable result quicker.
Reserved instances and saving plans
Consider reserved instances and saving plans. Be cautious: reserved instances and saving plans which aren’t properly calculated can increase your expenses instead of reducing. You can find more articles online.
Consider spot instances. They are 2–4x cheaper than on-demand and are ideal for CI/CD jobs and short-term tasks.
Storage and networking optimization
- Review your cross-region and outbound traffic. Both are not free and can astonish you when you dig deeper.
- Turn on and configure retention settings for partial objects in all your object storage buckets. In object storage you pay for allocated space and sometimes you have partially loaded objects there which consume storage but are useless as they are not integral.
- Find duplicates and buckets/folders belonging to inactive users and projects. Proper orders in any object storage are rare if at all to occur.
- Consider using cold storage for some of your buckets and folders and this type of storage is way cheaper.
- Consider using CDN services instead of just object storage. You can improve your user experience and save on costs of storage and outbound traffic.
Let’s also consider building the process that should help you bring more order and use clouds in an optimal way that is a core characteristic of a proper FinOps adoption.
The main steps towards a successful FinOps and cloud cost optimization process
- Tag all resources. You can use multiple tags to identify owners of the resources, TTL, project, team, whatever. Resources without a tag should be removed.
- Create a clean up script that will use a TTL tag and remove expired resources. Don’t rely on your engineers to clean up resources manually, or Jenkins jobs to do it automatically. CI/CD jobs can fail and engineers can forget and go for a PTO.
- Create a FinOps team to review the steps above and implement them. You need to do so regularly or it won’t work properly.
- Consider other clouds and regions. Not all regions have the same instance price and performance. You should actively monitor those metrics to provision in the best performing and cost-efficient cloud, region and availability zone.
- Find a software solution to assist you. Focus not just on a tool with the best marketing but on the one that really adopts and sets FinOps standards. Cloud optimization tools are not enough.
You should think about FinOps not only when you are a company with $1B revenue and 1,000s employees, but from the first day of your company as clouds can either boost growth or be a real pain – up to almost ruining your business. FinOps is dedicated to help you get the best out of the clouds paying only what you should.
FinOps principles: Control
Being able to see historical data of your cloud spending and optimize it is important, but it’s crucial to have an opportunity to build a process when funds are allocated and used only for what they should and with an option to manage and forecast the expenses.
The benefits of the control are clear, but let’s summarize them for better understanding why it is crucial for the cloud FinOps adoption:
- It’s the main driver of constant optimization when there are no hidden costs, orphaned or unused resources.
- No budget overspending – you know your budget and can forecast the spending projecting it on the current month, quarter, or in some cases even, year.
- No destruction to your team when the team periodically has to review the expenses and figure out a way to optimize to stay under budget.
Here is some practical advice for FinOps teams on how to build a proper control process.
Step-by-step guide for building a process of control as an essential part of FinOps methodology
- Create a separate budget for every granular item
Create a separate budget for every granular item you would like to track. It can be (but not limited to) either a CI/CD job, or an application cluster, a R&D team, a PoC project, etc.
- Assign an owner to every specific budget
Don’t expect that one person can properly track more than seven budgets. This can be a DevOps engineer or a team member of your FinOps team.
- Identify a rule on how resources should fall under a specific budget and an owner
It can be a tag or a resource name prefix/postfix or some other rules used at your company. Ideally, if the resources can fall under budgets automatically (CI/CD job resources created with a tag, engineers use their name in prefix etc.).
- Set TTL rules
It can be another tag or, for example, a rule to remove resources older than 24 hours if they don’t contain some specific ‘do-not-delete’ tag.
- Create a cleanup script
Create a cleanup script to be periodically launched and to remove resources with expired TTL. Don’t forget about volumes, snapshots and images, they are costly resources, but at your company, you should have other categories.
- Compose a script or use third-party cloud cost management tools
Compose a script or use third-party cloud cost management tools to calculate and track budget forecasts and give up-to-date cloud expense data to every resource owner. Cloud-native tools are very limited in a way you can track expenses — keep in mind that the main idea of the cloud for you is to spend more, not to save. Consider sending the data to the budget and resource owners every Friday morning so that they have time to review and fix the issues before the weekend.
- Send instant alerts
The script from p.6 should be able to send instant alerts if there is an actual budget overspend or the forecast is 1.5 times bigger than your budget. It gives more room for some corrective actions.
- Control reserved instances and saving plans usage
It is alarming how many companies take those options, but still use them.
- Control spot instance usage for CI/CD jobs
For the majority of the recurring jobs, your team can use spot instances but the team may not be familiar with the functionality.
- Educate your team
This is the most important step. Educate your team about the steps and explain why they are important. Running all the steps above is a process, but not a one time action. The majority of the companies fail exactly because of forgetting to execute the steps recurrently.
Keep also in mind that there are cloud cost management tools that can help with the principle and take care of the majority, but not all, of the steps. If your team doesn’t take it seriously or isn’t educated, you won’t get the best out of FinOps.
FinOps principles: Collaboration
The fourth and final principle of the FinOps methodology is collaboration. There is practically no room for development without collaboration, we interact with other people to get feedback, grow and complete some complex tasks which cannot be done on our own. Proper cloud usage is exactly an example of such task. Don’t only interact within a team of engineers or within one department, but employ cross-functional collaboration with a company where engineers, operational, finance and executive teams are involved.
Collaboration, in the case of FinOps, is important because actions and decisions made by one functional team influence others and the impact can be significant or even fatal for a business. Just imagine the case when an R&D team starts a new project and provisions hundreds of new VMs for that without proper budget planning or notifying the finance and executive team about a cloud bill forecast. Imagine the executive team cutting costs without proper planning with engineers.
The majority of cloud actions cost money, this is the nature of clouds. You pay for computing, storage, traffic, PaaS, marketplace products etc. Staying in budget and R&D elasticity is an equilibrium that is not possible to achieve with one person. For small businesses, it should be at least about the collaboration between CTO/VP of engineering and CFO, for medium-sized and enterprise companies the process and collaboration should be more complex. There should be a FinOps team (it doesn’t mean that they need to sit in one room at the same time) of executive team members translating company strategy; finance people responsible for budgeting, financial control and forecasting; and engineers/operations/DevOps team that works directly with a cloud.
The main responsibilities and crucial roles of a FinOps team
The FinOps team should be responsible for:
- Defining cloud usage strategy
- Defining and adjusting cloud budgets
- Setting cloud usage practices
- Reviewing results and adjusting if necessary
Some crucial roles in the FinOps team:
- Financial analyst and controller - a person that translates expectations and goals from the finance team. It can be CFO or somebody from the CFO office.
- Cloud practices visioner – a person who sets cloud usage best practices, educates engineers how to properly use clouds and explains why cloud expenses should be another KPI in R&D. Usually, it’s either a separate role or somebody from the DevOps team.
- Executives - Senior VP or a C-level person who controls how the collaboration works and reviews results.
- Engineers – use clouds according to the best practices and budgets, report if there are any escalations.
The main reason why companies do not succeed with clouds, or have serious issues using them, is the lack of proper collaboration and planning. Cloud is another fragile asset companies have at their disposal, but it brings outstanding results only if used properly. Don’t underestimate the value of cross-functional collaboration and cloud usage and get to another level.
The implementation of core Cloud FinOps principles mentioned above helps companies adopt clouds in a smart, secure and transparent way and focus on advising organizations on cost-effective cloud usage experience.