In this episode we will discuss the history of configuration management from manual scripting to the birth of Chef, the problems it solves, the pull-based model, and an early comparison with other tools.

In episode 0 you prepared all the foundations: Linux skills, Ruby fundamentals, the infrastructure as code concept, and a verified Chef Workstation installation. Now we'll build on that foundation to reach the first floor: understanding the history, background, and why the modern world needs Chef.
Many people learn Chef by jumping straight into writing cookbooks without ever asking "why does this tool exist?". As a result, they memorize syntax without understanding its philosophy — and easily give up when facing real problems. This episode will answer that question by looking at the evolution of configuration management, the specific problems Chef tries to solve, the pull-based architecture model that sets it apart, and its ecosystem map.
With this historical and contextual understanding, the technical concepts in episode 2 (architecture) and beyond will be much easier to digest. Let's start from the beginning.
To understand why Chef exists, we need to look at how people managed servers before automation.
At the dawn of the internet era, managing even a single server was an exhausting job. Administrators wrote shell scripts one by one, ran them manually, and hoped nothing was forgotten on a particular machine. Every server could have a slightly different configuration because humans performed manual steps — a phenomenon known as configuration drift.
The problem got worse as the number of servers grew. Running the same script twice could produce different results. There was no record of who changed what, when, and why.
Out of that chaos a generation of configuration management tools was born:
| Year | Tool | Creator | Model |
|---|---|---|---|
| 1993 | CFEngine | Mark Burgess | Pull-based agent |
| 2005 | Puppet | Luke Kanies | Pull-based agent |
| 2009 | Chef | Adam Jacob | Pull-based agent |
| 2012 | Ansible | Michael DeHaan | Push-based agentless |
Chef was born in 2009 from Adam Jacob as an open source project. Its core idea was simple yet revolutionary: make server configuration code — code that can be versioned, reviewed, tested, and run repeatedly with consistent results.
1993 CFEngine ── pioneer of agent-based
2005 Puppet ── first mainstream config management
2009 Chef ── infrastructure as code with Ruby DSL
2012 Ansible ── agentless, push-based, YAMLNote
Chef chose Ruby as its DSL language. This was a smart decision for its time because Ruby is expressive and easy to read — configuration code looks like English sentences, not a sequence of mysterious commands.
Chef came to answer the problems that plague every team managing servers at scale. Here are the main problems it solves:
Without automation, two servers that should be identical are often different — one is patched, the other isn't; one has an extra library, the other doesn't. Chef ensures every node converges to the same desired state, repeatedly, with consistent results.
This is the most important keyword in the configuration management world. Notice the difference in how the two approaches are written:
# Running this twice: the second apt install will error/ask for confirmation
sudo apt install -y nginx
# And if nginx is already installed, this line wastes time without adding valuepackage 'nginx' do
action :install
endTip
In the second approach, if nginx is already installed, the package 'nginx' do resource does nothing. That's idempotency — running a recipe 1 time or 1000 times produces the same end state. Chef only "acts" when the real state differs from what is described.
Because all configuration is written as Ruby code, it can be stored in git, reviewed through pull requests, tested in CI/CD, and rolled back. No more "who changed this server last night?" — every change can be tracked and audited.
Chef runs chef-client periodically (for example every 15 minutes via cron or a service scheduler). This is called convergence — the system constantly tries to balance the real state toward the desired state, even if someone messes up a server in the middle of the day.
One of the architectural decisions that most distinguishes Chef from other tools is the pull-based model. It's important to understand Chef's position here:
| Aspect | Pull-based (Chef, Puppet) | Push-based (Ansible) |
|---|---|---|
| Initiation | Agent on the node runs on its own schedule | Server/controller pushes to nodes |
| Node offline | Configuration still runs at next online check | Job fails until the node comes back online |
| Agent on node | Yes (chef-client) | No (agentless) |
| Unstable network tolerance | Better | Vulnerable |
| Overhead | An agent process per node | Almost zero on the node side |
+------------+ +-------------------+ +------------+
| Workstation| --> | Chef Infra Server | <-- | Node |
| (author) | | (registry/store) | | chef-client|
+------------+ +-------------------+ +------------+
upload cookbook fetch config apply locallyA node running chef-client periodically pulls configuration from the server, then applies it itself. This model is well suited for large infrastructure where nodes are spread across many regions with networks that are not always stable.
Important
An in-depth comparison of Chef, Ansible, Puppet, and SaltStack will be covered specifically in episode 22. For now, just understand that no tool is "always better" — each has trade-offs that suit different contexts.
Today Chef is not just a single tool, but a complete ecosystem that handles the entire infrastructure lifecycle:
Chef:
Infra: manage node configuration (cookbook, recipe, resource)
InSpec: test system compliance/security (profile, control)
Automate: monitoring & compliance reporting (visibility)
Habitat: application packaging & runtime (application)In episode 1 we traced the journey of configuration management from manual scripting, CFEngine 1993, Puppet 2005, to the birth of Chef by Adam Jacob in 2009 and Ansible in 2012. We also understood the problems Chef tries to solve and its position among similar tools.
Key takeaways:
chef-client agent pulls and applies configuration periodically.Now you understand why Chef exists. In the next episode, episode 2, we will dissect the core concepts and main architecture — the Chef client run flow from Ohai to reporting, the role of Workstation, Chef Infra Server, and Nodes, as well as core components such as cookbooks, recipes, resources, attributes, run lists, data bags, environments, roles, and knife.