Every Jamf Pro change flows through a GitHub PR with no exceptions.
Over 1,500 resources under active management.
3 stage environment route to Live setup
All changes require a +1 approval from another engineer
Every change is versioned and can be rolled back
Gui access is read only, write access is restricted to break glass operations
Every Mac team member performs their day job with Terraform as the control plane.
Training artifacts released as open source
Currently up skilling our packaging and endpoint security teams.
On changes together; externalise domain knowledge from people's heads into self-documenting code. Reduce single points of failure and catch mistakes before they reach production.
When something goes wrong the team can revert to a known good configuration. Because mistakes are recoverable, engineers make changes they would previously have avoided or escalated.
To implement changes using GitOps + Terraform and perform their role effectively. Any team member can pick up any change, make it → get it reviewed → ship it.
Every engineer can read a terraform plan and predict exactly what will change before approving it. Every safe apply depends on this skill.
Recognising when breakglass GUI access is the right call, and when to stop and ask for review.
On demand, when asked by stakeholders or external audit.
Zero manual console changes. If someone asks "how did Jamf Pro get into its current state," the answer is always "check the commit history," never "ask around."
Design conversations happen in PR threads, not in chat
Juniors review senior engineers' changes
"How did it get like this?" is answered with a commit link, not a meeting
New transferable skills
A safety net that makes mistakes recoverable
Reduced cognitive load (not having to make changes in different instances)
No single point of failure
Same engineering practices as cloud teams and same language
Cross team awareness of changes
Failures become learning opportunities and not blame
Collaboration without stepping on one another's toes
TF modules allow for self service consumption by sister engineering teams
Compliance and audit without a mad scramble
Governance without slowing delivery
Deployment guardrails that scale beyond one team
An engineer counted as trained when they could take a real change from branch to production unaided.
TODO: confirm the bar the team actually usedEveryone becoming a Terraform expert · zero incidents · the end of Jamf GUI knowledge
TODO: confirm real non-goalsNot a course and not a shadowing arrangement. A posting, long enough to pair macOS and Jamf Pro domain depth with GitOps practice in the same person.
The CoE brought the Terraform and Git content; the seconded engineer put it in Mac language and cut what did not apply.
In-person and remote sessions planned separately rather than one deck delivered twice.
In-person labs built on tasks the team already recognised, with practice set between sessions so nothing decayed in the gaps.
Training carried on past the fundamentals. Running the waves kept the reasoning behind each migration decision inside the Mac team and taught advanced Terraform on the real estate.
The Mac team owned the control plane, the materials and the reasoning.
Real-time knowledge transfer. Engineers learn faster from a peer than from documentation alone. Effective pairs that transfer knowledge well share a disciplined (one topic at a time, staged clarification, deliberately pushing context rather than only answering questions asked) approach.
Interactive, visual, hands-on learning beats abstract exercises, always. This is especially true when learning git for the first time. Engineers learn the 'why' immediately and hands on helps build a mental model quicker. Learning scenarios should be tied to real life team operations. Provide sequenced learning before open-ended practice.
Grouping engineers at similar skill levels keeps pace right, no one gets bored or is left behind.
Ensure that you have dedicated non-prod sandboxes for engineers to experiment freely and without fear of breaking production. Do not YOLO in prod!
Team shadowing (even on other tf providers) gives real grounding and broad exposure.
Make use of the terraform registry for known good working examples for each resource. Read our and others open-sourced training and reference implementations for your own learning or to build your own syllabus
The sheer size of conceptual surface area that needs to be covered is large.
Pace wrong at both ends. Prior coding experience predicted success, not Jamf Pro familiarity or age.
No mental model formed. In one ear and out the other.
Workbooks devolved into copy-paste. Completed, not retained.
214,645 words of good content, written to be complete rather than to be learned from.
Our internal developer platform was not ready and online when engineers needed it.
Four weeks of content over six months. The hours were about right; the calendar was not.
Nothing showed who had genuinely put the hours in until after handover.
3,778 words: two modules and four labs, one of them deliberately broken. 57x smaller.
Make it explicit. Say it out loud, early, and more than once.
Don't assume it already exists because the team seems friendly.
It has to still hold the week somebody breaks something that matters.
Get non-technical stakeholders and senior leadership bought in on the priority before you start. Ours were slow to 'get it', which cost early momentum.
Engineers who skipped pre-requisite learning held back their whole cohort. Gate attendance on it, no exceptions.
Long gaps caused rapid knowledge loss. Keep days, not weeks, between learning something and practising it for real.
Remote worked for self-paced pre-reqs, but pairing and labs were dramatically better face to face.
You'll need whoever owns Terraform and GitHub for access, guardrails and troubleshooting throughout.
The team gets slower before it gets faster. Set that expectation up front, so early friction reads as part of the plan. TODO: how long
Design, build and maintain the platform and manage the Jamf Terraform workflows
Consume the platform, inside its guardrails and manage the Jamf Terraform workflows
Each milestone is practised for real before moving right. No skipping ahead.
Guided, hand-held, and it has to work every time. If step four fails they conclude they can't do this. The smallest thing that gets someone to a working PR.
The steps and nothing else. Assumes they already understand it, so no theory, no explanation, no reassurance.
Scannable under pressure. A decision tree, not paragraphs — nobody reads prose at 3am. A different document from the runbook, even for the same system.
Read when they're calm, never when something is on fire. The reasoning behind the setup, and the decisions that were already taken for them.
Deliberate failure somewhere that breaking it costs nothing. The one thing no document can do for you, and the one we got right.
Pre-reqs: videos, reading
Core concepts + Terraform basics
Git, branching, pull requests
First real-world task
Advanced Terraform + DevOps
Solo delivery, mentoring others
~14 weeks (3.5 months) for a junior with no prior GitOps/TF experience — in-person cohort, real tasks from week 3.
A new-hire pack: runbook index, architecture diagram, Git conventions, PR template, 'how we work' guide. Ship it on day one — don't make them ask.
A 20-min async skills check before they start — Terraform basics quiz + Git scenario. Results dictate cohort placement. No assumptions.
Every new hire gets a named senior buddy for 8 weeks — a peer, not a manager, who pairs, reviews PRs, and takes the first questions.
Every resource, argument and example for the provider.
Multi-environment setup with GitLab-flow and Terraform Cloud. Best-practice structure out of the box.
Built for workplace engineers with zero prior knowledge of git, gitOps and terraform.