Old School vs. IaC: A System Administrator’s Take on Classic Ops vs. Terraform
For decades, system administrators have been the backbone of IT infrastructure. We’ve logged into boxes over SSH, written bash scripts, and built stable, secure systems by hand. But the landscape has shifted. With the rise of cloud computing and DevOps culture, Infrastructure as Code (IaC) tools like Terraform are now taking center stage. While many praise the automation and repeatability these tools bring, there are trade-offs worth discussing.
As someone with years of experience maintaining physical servers and virtual machines the traditional way, I want to explore both approaches—the classic sysadmin model and the IaC paradigm—and where each shines or stumbles.
Classic Sysadmin: Craftsmanship by Hand
✅ Strengths
-
Fine-Grained Control Sysadmins know exactly what's running on their machines because they put it there, step by step. This allows for deep customization and rapid intervention when issues arise.
-
Incremental Debugging You can troubleshoot in real-time. A failing config file? Fix it on the server. A broken service? Restart and tail logs immediately. There’s no compile-push cycle—just direct feedback.
-
Low Tooling Overhead No learning curve for new DSLs, YAML formats, or remote state storage. A shell, a terminal, and a few bash scripts go a long way.
-
Works Offline / Air-Gapped When managing air-gapped environments or legacy hardware, traditional methods often work where Terraform cannot even initialize a provider.
❌ Drawbacks
-
Inconsistency Manual processes often lead to configuration drift. One server might differ from another in subtle and problematic ways.
-
Documentation Gaps Much of the system state lives in the heads of sysadmins or in untracked bash scripts. This tribal knowledge doesn’t scale.
-
Scaling Bottlenecks Provisioning 5 servers by hand is feasible. Provisioning 500? Not without automation.
-
Limited Repeatability Rebuilding an environment identically from scratch is hard unless you’ve already automated it.
Infrastructure-as-Code: Declarative and Scalable
✅ Strengths
-
Repeatable and Auditable You define infrastructure in code, commit it to version control, and know exactly what’s deployed. It's reproducible and trackable.
-
Team Collaboration IaC enables Git-based workflows: pull requests, peer reviews, CI/CD pipelines. Infrastructure changes follow the same rigor as application code.
-
Rapid Provisioning at Scale Want 50 EC2 instances with VPCs, subnets, and auto-scaling? One
terraform apply
and you’re done. Perfect for elastic cloud-native environments. -
Automated Drift Detection Tools like Terraform can detect and correct drift from the declared state, keeping environments aligned.
❌ Drawbacks
-
Complex Abstractions Terraform's DSL (HCL), module systems, and state management can be confusing. A simple change might require hours of wrestling with dependency graphs.
-
State Management Woes The infamous Terraform state file—essential, sensitive, and sometimes a source of bugs. Managing remote state, locking, and security is non-trivial.
-
Debugging Is Slower Unlike SSHing into a server to tweak a config, you often need to change code, run a plan, and reapply. It introduces friction for quick fixes.
-
Provider Lock-In While Terraform is cloud-agnostic in theory, provider-specific quirks often leak into your configuration. Migrating across clouds or tools is harder than it looks.
The Middle Ground: Combining Both Approaches
In practice, most mature environments blend the two philosophies.
- Use IaC for provisioning (networks, instances, databases).
- Use configuration management tools (Ansible, Chef, or Salt) or scripts for post-provision setup.
- Keep manual intervention limited to emergencies, and ensure any hotfixes are later codified.
This hybrid model provides the rigor of IaC with the flexibility of a seasoned sysadmin’s toolkit.
Final Thoughts: Choose What Fits the Problem
There’s no one-size-fits-all answer. For static infrastructure or small teams, a skilled sysadmin with solid documentation may outperform an overengineered Terraform setup. For dynamic, cloud-native, multi-environment platforms, IaC is essential.
The goal is reliability, visibility, and maintainability. Whether you get there with ssh
or terraform apply
—or both—depends on your team, your stack, and your risk tolerance.
The tools are evolving. The mindset—discipline, accountability, and clarity—remains timeless.