Principles

I like to think of Infrastructure as roads. You can ride on a gravel road just as well as a 8-lane ultra-highway that is immaculately paved. Just like roads, you want infrastructure to be reliable and predictable -- lanes should be marked, signs should guide the riders to the correct places and to do the right and safest action.

  • Reliability

Given that Mist serves large enterprise customers as well as relatively medium-sized companies, we should keep an eye on ensuring high availability. If we don’t have higher availability than our customers, we will soon lose their trust and consequently their business.

  • Conservatism

Reliability cannot be ensured if Infrastructure cannot be considered a relatively static entity in the overall architecture. There are always times for experimenting -- and our current infrastructure is a result of finding this fit. It’s evolving but a radical innovation in product can only be achieved with a stable infrastructure.

  • Replicability

We often get requests to run our infrastructure in varied environments -- someone’s datacenter, another cloud, or a different country, region. We cannot pursue these goals if our code to setup the infrastructure isn’t replicable.

  • Security

“Well, obviously” as any astute reader would say. But how do you know it is secure? You try to break it. This applies to all the components. Many companies have learned this the hard way when an attacker breaks and compromises the systems. You want to build systems with the types of attacks it may get and the attacker. Since every decision is a tradeoff between cost and risk, it makes sense to balance these.

  • Visibility

A lot of simple questions like "how do I view logs?" becomes harder when your workload becomes harder to track as your workload begins spreading across many machines which themselves can be fickle and die without warning.

  • Good Design is better than million hacks

Often, with systems, there's a tendency to fix the immediate problem instead of identifying the source of the problem and fixing it there. This requires deep understanding of the components and their interactions. Wherever possible the whole system should be accounted for in designing.

results matching ""

    No results matching ""