Cost Base Architecture

  • At the heart of all architecture decsions, must be based on cost

Frugal architect

Law 1 - Make Cost a Non-functional Requirement.

  • A non-functional requirement specifies criteria that can be used to judge the operation of a system, rather than specific features or functions. Examples are accessibility, availability, scalability, security, portability, maintainability, and compliance. What often goes overlooked is cost.

  • Companies can fail because they don’t consider cost at every stage of the business – from design to development to operation – or because they’re not measuring it properly.

    • The math is simple: if costs are higher than your revenue, your business is at risk.

  • By considering cost implications early and continuously, systems can be designed to balance features, time-to-market, and efficiency.

    • Development can focus on maintaining lean and efficient code.

    • And operations can fine-tune resource usage and spending to maximize profitability.

Law 2 - Systems that Last Align Cost to Business

  • The durability of a system depends on how well its costs are aligned to the business model.

    • When designing and building systems, we must consider the revenue sources and profit levers.

    • It’s important to find the dimension you’re going to make money over, then make sure the architecture follows the money.

  • For example, in e-commerce, that dimension might be the number of orders.

    • When orders go up, infrastructure and operation costs rise.

    • And that’s okay, because if your system is architected well, you can start to exploit economies of scale.

    • What’s important is that infrastructure costs have a measurable impact on the business.

  • As builders, we need to think about revenue – and use that knowledge to inform our choices.

    • Because growth at all costs leads to a trail of destruction.

Law 3 - Architecting is a Series of Trade-offs

  • In architecture, every decision comes with a trade-off.

    • Cost, resilience, and performance are non-functional requirements that are often at tension with each other.

  • As the saying goes, “Everything fails, all the time.”

    • Being able to defend against failure means investing in resilience, but performance may pay the price.

  • It’s crucial to find the right balance between your technical and business needs – to find the sweet spot that aligns with your risk tolerance and budget.

  • Remember, frugality is about maximizing value, not just minimizing spend.

    • And to do that, you need to determine what you’re willing to pay for.

Law 4 - Unobserved Systems Lead to Unknown Costs

  • Without careful observation and measurement, the true costs of operating a system remain invisible.

    • Like a utility meter tucked away in a basement,

      • lack of visibility enables wasteful habits.

    • Making meters more visible can profoundly shift behaviors

  • Though observation requires investment, not implementing adequate monitoring is shortsighted.

    • The adage warns, “If you can’t measure it, you can’t manage it.”

    • Tracking utilization, spending, errors, and more, is crucial for cost management.

  • When critical cost metrics are placed front-and-center before engineers and their business partners, more sustainable practices emerge organically.

    • Ongoing inspection lets you spot excess spend and tune operations to trim expenses.

    • The return on investment in observability typically far outweighs the expense.

  • Most importantly, keeping costs in the forefront encourages sustainable practices.

Law 5 - Cost Aware Architectures Implement Cost Controls

  • The essence of frugal architecture is robust monitoring combined with the ability to optimize costs.

    • Well-designed systems allow you to take action on opportunities for improvement.

    • For this to work, decompose applications into tunable building blocks.

  • A common approach is tiering components by criticality.

    • Tier 1 components are essential; optimize regardless of cost.

    • Tier 2 components are important but can be temporarily scaled down without major impact.

    • Tier 3 components are “nice-to-have”;

      • make them low-cost and easily controlled.

  • Defining tiers enables trade-offs between cost and other requirements.

    • Granular control over components optimizes both cost and experience.

    • Infrastructure, languages, databases should all be tunable.

    • Architect and build systems with revenue and profit in mind.

    • Cost optimization must be measurable and tied to business impact.

Law 6 - Cost Optimization is Incremental

  • The pursuit of cost efficiency is an ongoing journey.

    • Even after deployment, we must revisit systems to incrementally improve optimization.

    • The key is continually questioning and diving deeper.

    • Programming languages provide profiling tools to analyze code performance, and while these require setup and expertise, they enable granular analyses that can lead to changes that shave milliseconds.

    • What may seem like small optimizations accumulate into large savings at scale.

  • In operations, most time is spent running existing systems.

    • There are opportunities to profile resource usage and identify waste reduction.

    • At Amazon, we continuously monitor services in production to understand patterns and trim inefficiencies.

    • Frugality takes persistence – by incrementally reducing latencies and infrastructure costs, we can optimize the cost to serve.

  • There is always room for improvement… if we keep looking.

    • The savings we reap today fund innovation for tomorrow.

Law 7 - Unchallenged Success Leads to Assumptions

  • When software teams achieve significant success without facing major failures or roadblocks, complacency can set in.

    • There is a dangerous tendency to become overconfident in the methods, tools, and practices that led to those wins.

  • Software teams often fall into the trap of assuming their current technologies, architectures, or languages will always be the best choice, simply because they have worked in the past.

    • This can create a false sense of security that discourages questioning the status quo or exploring new options which could be more efficient, cost-effective, or scalable.

  • You see this frequently when it comes to programming languages.

    • “We’re a Java shop” is a phrase I’ve heard too often – and it can stifle innovation.

    • Unchallenged success breeds complacency through assumptions.

    • We must always look for ways to question, optimize and improve.

  • As Grace Hopper famously stated, one of the most dangerous phrases in the English language is: “We’ve always done it this way.”

  • https://youtu.be/UTRBVPvzt9w

Last updated