The fastest engineering teams I've worked with are not the ones with the most talent or the newest frameworks. They're the ones that have made the most decisions in advance. They use task templates — pre-built approaches to common problems that remove repeated decision-making — so that when the pressure is on, the team executes instead of debates.
I learned how much this matters in a small conference room, listening to a problem that should have cost my company millions.
The Ten-Month Plan With a Six-Month Deadline
I had just joined a large publicly traded company. They'd signed a multi-million-dollar statement of work with a top consulting firm to deliver a product expected to generate major revenue in its first year. For the first few minutes of the meeting, it was the usual consultant talk: cutting-edge tech stacks, new frameworks, the ability to scale. They'd chosen Azure Service Fabric even though nobody on the team had built anything with it before. They were confident they could figure it out.
Then they totaled up their estimates. The product wouldn't be ready for another ten months. The problem was that new SEC regulations took effect in six. If the product wasn't ready by then, we'd lose all the revenue, and I couldn't exactly call the SEC and ask for an extension.
As they walked through the timeline, I recognized the pattern: ambitious goals, brand-new technology, too many unknowns, and cost estimates that seemed almost arbitrary. (We later discovered that Service Fabric's retry mechanism used an exponential backoff, and because the system was so noisy, a single database save sometimes took more than thirty attempts to actually persist. They were building on a foundation they didn't understand, and the timeline reflected it.)
I left the room with my mind racing. One thing kept nagging at me: most of the consultants' time was allocated to researching and testing new ideas. What if we stopped learning and started building? What if we focused on our strengths and used approaches we already knew would work?
I pulled in Richie, our director of engineering, and we spent the next few hours breaking the solution down into known approaches. We'd use Azure Functions and build domain APIs. We'd add an ingestion engine to map data from customer reports. Events would trigger validation rules whenever data was updated. Every single thing we laid out was something the team had built before. We ended up with a detailed task list we were confident could deliver the business value our customers expected — in six months, not ten.
That's when I started calling these task templates: pre-built approaches for common problems that eliminate repeated decision-making. A task template groups smaller, well-understood tasks together with their interfaces and objects. The team can discuss what API endpoints they need or how to structure objects without drowning in every small detail. They work a little like Mad Libs — you fill in the domain objects and interface methods, and the rest of the execution stays the same.
Predictable Teams Move Faster
To see why predictability is such an advantage, look at a field where it's a matter of life and death: firefighting.
Firefighters operate in extreme conditions. They often don't know how far a fire has spread or which parts of a structure have been compromised. They can't afford to stop and debate the best approach. The National Institute for Occupational Safety and Health has repeatedly found that when predictability breaks down — through unclear roles, inadequate procedures, or poor communication — the results can be fatal.
That's why fire departments train relentlessly, and why they separate practice from execution. In training, they explore new and innovative approaches. On an actual call, they rely on predefined playbooks. When the alarm sounds, everyone knows their role: the first engine company handles initial attack and rescue, the second establishes water supply, the first ladder company handles ventilation and search. Predictability is what lets them coordinate even when conditions are chaotic.
Software teams work under less dramatic pressure, but the principle is identical. When an engineer building a backend API can confidently say when it will be ready, the engineer building the frontend can decide whether to mock out objects or wait to integrate. When scope changes, everyone understands how it affects their own work. Good leaders don't push for planning to make slide decks look impressive in board meetings. They do it because the entire company moves faster when every team knows what to expect.
The fire department figured out that even though chaos feels urgent, predictable execution is what saves lives. Software teams need the same lesson: systematic approaches enable speed under pressure. The biggest obstacle is our own temptation to reinvent instead of reusing what already works.
The Innovation Trap
Engineers love solving new problems — it's part of what makes the work interesting. But that obsession with novelty often backfires. Teams debate architecture for every new product request. They spend more time researching and refactoring than building. They abandon working solutions because they think they're boring, not because they're broken.
I saw the cost of this in an unexpected place. During my master's degree, an AI course assigned a final project: build a bot to play the Prisoner's Dilemma against our classmates' bots. Bots played 10,000 rounds against each opponent, learning from each round, and the lowest total sentence won. The professor offered an automatic A to whoever built the best bot.
The game itself was far from new. Robert Axelrod had run a famous international tournament for it back in 1980. Every year, people submitted elaborate strategies from around the world, and every year the same simple strategy won. It was called Tit for Tat, and it had just two rules: cooperate on the first move, then copy whatever your opponent did last. That was it.
I was working full time and had about forty-eight hours until the deadline. I didn't have time to invent an elegant strategy, so I built a simple bot with one small adjustment. The professor had shown us four slight variations of Tit for Tat. My bot tried each one for 100 rounds, then used whichever had performed best for the remaining rounds against that opponent.
To my surprise, I won the tournament — by trusting what already worked. Classmates who'd spent weeks crafting elaborate strategies all lost to a bot I'd built on a plane ride home. They were so focused on outsmarting each other that they overlooked decades of evidence showing that simplicity wins. It's the same trap software teams fall into every day: the proven approach feels too simple to be the answer, so they reach for something more complex and end up worse off.
How to Build a Task Template
A good task template captures enough information that anyone reading it knows exactly what to do. The decisions are already made; all that's left is execution. Think of it as your team's playbook. Keep it short — bullet points work well — and store it somewhere the whole team can reach, like a wiki or a shared doc.
The real work isn't writing the template. It's getting your team to agree on it. When I brought a CRUD API template to my team, the first question was predictable: "Should we use GraphQL instead? It's more flexible." Fair point — but flexibility wasn't our biggest constraint. I asked what mattered most to the business right now. The answer was reliability; we couldn't afford another outage. So we stuck with REST, because we knew it worked, and agreed to revisit GraphQL when the need actually changed. Someone suggested adding a note requiring HTTPS. Good catch — in it went.
That's how these conversations should go: debate the tradeoffs, agree on the approach, document it, and move on. The goal is to stop re-debating the same decisions every time a new feature shows up. One rule we found helpful: don't reopen a template unless new information forces you to. "I've been thinking about it" isn't new information. "We tried it and it broke" is.
Measure Your Baseline
You can't estimate what you haven't measured. Once you have a template, run through it a few times and track how long it actually takes — not how long you think it should take. The first time, you'll hit snags. Tasks you thought were clear turn out to have ambiguity. That's fine; write those down and feed them into your practice notes.
My CRUD API timing looked like this: twelve hours the first attempt, eight the second, seven and a half the third. I use eight hours for estimates now. Not the best case, not the worst — the realistic middle. That single number does more for predictable planning than any amount of optimistic guessing.
Know When to Break the Template
Task templates don't mean never trying anything new. The point is knowing the difference between building and learning. Under deadline pressure, use what works. When you have room to experiment, that's when you try something new.
Remember the SEC project? We hit the deadline because we stopped trying to be clever and used patterns we'd already proven. The consultants had estimated ten months because their plan required learning and building at the same time. We separated those activities — we learned during planning and executed during building.
A junior engineer knows one way to solve a problem. A mid-level engineer knows many. An expert knows which one to use. Task templates don't make you less creative; they free you to be creative when it actually matters.
This idea — separating the work of learning from the work of execution so your team can move with confidence — sits at the heart of my book, Don't Think When You Code. If you want the full framework for building predictable, high-performing engineering teams, the book goes deep on task templates, menta
Joel Karr
CTO • Author • Engineering Leader
Joel leads engineering teams building AI-augmented software. Author of an upcoming book on deliberate software engineering in the AI era.
Enjoyed this? It's from the book.
These ideas come from "Don’t Think When You Code," coming in 2026. Join the launch list for a free sample chapter.
Launch news and a free sample chapter. No spam, unsubscribe anytime.
Comments
Related Posts
July 27, 2026
Creative Problem-Solving for Software Engineers: Where Good Ideas Actually Come From
Creative problem-solving for software engineers is a trainable process, not a gift. Learn the PAGES framework and five steps to breakthrough ideas.
July 27, 2026
Good Enough Software Engineering: Why Over-Engineering Costs More Than Failure
Good enough software engineering is a strategy, not a compromise. Learn how to match reliability controls to business impact and stop over-engineering.
July 9, 2026
Why Software Estimates Go Wrong: Shape the Problem Before You Plan
Software estimates go wrong when hidden assumptions surface too late. Here's how reframing the problem before planning saves teams from costly rework.