Infrastructure: Part 3 of How to Commission a Software Project
This infrastructure article is part of the “How to Commission a Software Project” series.
The Trap of Underestimating Infrastructure
It’s incredibly easy to underestimate the infrastructure robustness required to run a serious operation. We frequently see business operators suggesting deployment of their web applications onto a single virtualized server running all components – or even worse – on a shared hosting platform. This is understandable at some level – “why spend an unpredictable thousands per month when $8.95 per month gets me something that looks and feels the same to me?” You might see where this comparison is headed. The fact is, inexpensive-at-face-value solutions are far more costly in the long run. They do not provide options for scalability and they contain single points of failure.
A well-planned, scalable infrastructure leverages the following:
- Auto-scaling (or at least easy manual-scaling)
- Division of labor (give every job its own machine)
- Serverless technologies
- Network virtualization
- Load balancing + failover
- An expert (and a security expert)
This isn’t meant to be a masterclass on designing your tech stack. My hope, however, is to present a launchpad for research, planning, or a way to start a fluent conversation with an expert you might hire to manage your tech stack. For each point, I’ve created a few questions to ask. From there, some simple intuition should put you on the right path.
Questions to Ask
Auto-scaling
- How will our proposed network infrastructure respond to sudden bursts of traffic?
- What’s your recommendation for controlling costs once we reach the point where our servers will need to scale?
- Which of our server types will benefit the most from an Auto-Scaling model?
Division of Labor
- What are the different server types we’ll use to run the application?
- Which pieces of the software stack are the best candidates to put on different machines or on different parts of the network?
Serverless Technologies
- Are any pieces of the software stack good candidates for serverless technologies?
*As an aside we love serverless tech to host static assets (like photos and videos), big data stores (like IoT data and analytics), and to run scheduled jobs or on one-off services. But this is a hot and evolving family of technology.
Network Virtualization
- Where will this system be hosted?
*You’re listening for providers who are leveraging multiple data centers and quickly replicable virtual systems and not “oh we have a fast connection at our home office“ or ”we’ll install this on your existing shared hosting account.”
- What operating systems do the servers run?
- Who is responsible for keeping those systems up to date?
Load Balancing + Failover
- How many concurrent servers are running at a time for critical systems?
- How many data centers are utilized by our load balancers or failovers?
- What’s the plan if one or more of our servers (or the whole data center) goes down?
Critical Expertise
In terms of an expert, find one. And then ask how comfortable they are with security. The important part of that inquiry is that devops (the inner-nerdy term for the practical I.T. stuff relating to software development, short for development operations) And security can be pretty distinct roles. This is especially true if you’re subject to compliance audits or standards bodies like PCI, HIPAA, SOC, or NIST.
It’s not simple, but with the right set of tools, you’ll be able to hold your own. I’ll identify the key takeaways: don’t underestimate what you’ll need to run your software, find an expert (or two), and ask tons of questions. Also, never ask “What’s the worst thing that could happen?” – because you don’t want to know.
Interested in getting help with infrastructure design?