<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: mjodeh</title>
    <description>The latest articles on DEV Community by mjodeh (@mjodeh).</description>
    <link>https://dev.to/mjodeh</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F237256%2F9a4aa802-2856-492c-b808-abab9dbfa350.png</url>
      <title>DEV Community: mjodeh</title>
      <link>https://dev.to/mjodeh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mjodeh"/>
    <language>en</language>
    <item>
      <title>Why “Move Fast” Is Not an Engineering Strategy</title>
      <dc:creator>mjodeh</dc:creator>
      <pubDate>Mon, 03 Aug 2026 13:57:03 +0000</pubDate>
      <link>https://dev.to/mjodeh/why-move-fast-is-not-an-engineering-strategy-4m3n</link>
      <guid>https://dev.to/mjodeh/why-move-fast-is-not-an-engineering-strategy-4m3n</guid>
      <description>&lt;p&gt;When a release slips, the usual response is predictable: shorten the deadline, add more work to the sprint, and ask engineering to move faster.&lt;/p&gt;

&lt;p&gt;That response confuses urgency with strategy.&lt;/p&gt;

&lt;p&gt;A team can increase activity without improving delivery. Developers can open more pull requests, managers can increase sprint commitments, and product leaders can mark more work as urgent. None of that guarantees that a useful, reliable change reaches production sooner.&lt;/p&gt;

&lt;p&gt;“Move fast” describes a business need. It does not explain how engineering should respond.&lt;/p&gt;

&lt;p&gt;A credible &lt;strong&gt;software delivery strategy&lt;/strong&gt; must answer harder questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What outcome matters most?&lt;/li&gt;
&lt;li&gt;What work should stop?&lt;/li&gt;
&lt;li&gt;Where is delivery actually slowing down?&lt;/li&gt;
&lt;li&gt;Which risks are acceptable?&lt;/li&gt;
&lt;li&gt;Which quality boundaries cannot be crossed?&lt;/li&gt;
&lt;li&gt;How will the organization know whether it became faster?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The central argument is simple: engineering speed is a property of the delivery system, not a personality trait of the people inside it.&lt;/p&gt;

&lt;h2&gt;
  
  
  “Move Fast” Is Too Vague to Guide Engineering Decisions
&lt;/h2&gt;

&lt;p&gt;The instruction to move fast leaves the most important decisions unresolved.&lt;/p&gt;

&lt;p&gt;Does the organization need to release more frequently? Validate a product assumption earlier? Recover from incidents faster? Meet a fixed regulatory deadline? Reduce the time required to onboard customers?&lt;/p&gt;

&lt;p&gt;These are different problems.&lt;/p&gt;

&lt;p&gt;A team trying to validate demand may need a narrow prototype and limited rollout. A team trying to improve reliability may need better observability and rollback procedures. A team trying to deliver a committed roadmap may need to stop lower-priority work.&lt;/p&gt;

&lt;p&gt;Using the same response for every form of urgency usually creates the wrong optimization.&lt;/p&gt;

&lt;h3&gt;
  
  
  Define the type of speed required
&lt;/h3&gt;

&lt;p&gt;Before changing the engineering process, leaders should identify the result they need.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faster learning:&lt;/strong&gt; Reduce the time between an idea and evidence from users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faster releases:&lt;/strong&gt; Reduce the time between completed code and production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faster delivery:&lt;/strong&gt; Reduce the full time from an approved need to a usable outcome.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faster recovery:&lt;/strong&gt; Reduce the time required to detect and resolve production failures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faster response:&lt;/strong&gt; Reduce the time needed to react to market, customer, or regulatory changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A team may improve one while making another worse.&lt;/p&gt;

&lt;p&gt;Releasing more frequently does not guarantee faster learning if nobody measures user behavior. Coding faster does not improve recovery time if the system is difficult to observe. Starting more initiatives does not improve delivery if shared dependencies block all of them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Make trade-offs explicit
&lt;/h3&gt;

&lt;p&gt;Urgent work usually requires a trade-off. The mistake is pretending that no trade-off exists.&lt;/p&gt;

&lt;p&gt;A team may reduce scope while keeping reliability requirements intact. It may accept a temporary manual operation to validate demand before automating it. It may choose a reversible implementation instead of a more elegant long-term design.&lt;/p&gt;

&lt;p&gt;Those choices can be responsible.&lt;/p&gt;

&lt;p&gt;The irresponsible version is allowing teams to infer that testing, security, maintainability, or operational readiness should be reduced because the date has not changed.&lt;/p&gt;

&lt;p&gt;Engineering leaders should state clearly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What can be reduced&lt;/li&gt;
&lt;li&gt;What can be deferred&lt;/li&gt;
&lt;li&gt;What must remain unchanged&lt;/li&gt;
&lt;li&gt;Who accepts the resulting risk&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without this, “move fast engineering” becomes an exercise in hidden risk transfer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coding Speed Is Not Software Delivery Speed
&lt;/h2&gt;

&lt;p&gt;Engineering organizations often focus on coding because it is visible.&lt;/p&gt;

&lt;p&gt;Pull requests can be counted. Tickets can be closed. Story points can be discussed in planning meetings. Waiting is harder to see.&lt;/p&gt;

&lt;p&gt;Consider a feature that requires ten working days of implementation but takes eight weeks to reach production.&lt;/p&gt;

&lt;p&gt;The remaining time may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Five days waiting for product clarification&lt;/li&gt;
&lt;li&gt;One week waiting for another team’s API&lt;/li&gt;
&lt;li&gt;Four days waiting for code review&lt;/li&gt;
&lt;li&gt;One week waiting for a stable test environment&lt;/li&gt;
&lt;li&gt;Several days waiting for security approval&lt;/li&gt;
&lt;li&gt;One week waiting for a release window&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this example, asking developers to implement the feature 20% faster saves two days. Removing one approval delay may save a week.&lt;/p&gt;

&lt;p&gt;That is the difference between local productivity and end-to-end &lt;strong&gt;software delivery speed&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Measure where work waits
&lt;/h3&gt;

&lt;p&gt;A useful delivery review should reconstruct the actual path of completed work.&lt;/p&gt;

&lt;p&gt;For a small sample of recent features, record:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;When the work was requested&lt;/li&gt;
&lt;li&gt;When it became clear enough to start&lt;/li&gt;
&lt;li&gt;When implementation began&lt;/li&gt;
&lt;li&gt;When the first review was requested&lt;/li&gt;
&lt;li&gt;When review completed&lt;/li&gt;
&lt;li&gt;When testing completed&lt;/li&gt;
&lt;li&gt;When the change became deployable&lt;/li&gt;
&lt;li&gt;When it reached production&lt;/li&gt;
&lt;li&gt;When meaningful feedback became available&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal is not to create a perfect measurement system. The goal is to find the largest delays.&lt;/p&gt;

&lt;p&gt;This often reveals that the main constraint is not engineering capacity. It may be unclear ownership, unavailable environments, centralized approvals, or too many concurrent priorities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use velocity metrics carefully
&lt;/h3&gt;

&lt;p&gt;Story points can help a team plan its own work. They are weak evidence of organizational productivity.&lt;/p&gt;

&lt;p&gt;A team can increase reported velocity by changing estimation behavior, splitting work differently, or taking on more predictable tasks. None of those necessarily improve customer outcomes.&lt;/p&gt;

&lt;p&gt;Engineering leaders should prefer a balanced view that includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lead time&lt;/li&gt;
&lt;li&gt;Cycle time&lt;/li&gt;
&lt;li&gt;Time waiting for review&lt;/li&gt;
&lt;li&gt;Time blocked by dependencies&lt;/li&gt;
&lt;li&gt;Deployment delay&lt;/li&gt;
&lt;li&gt;Rework&lt;/li&gt;
&lt;li&gt;Release predictability&lt;/li&gt;
&lt;li&gt;Production failure patterns&lt;/li&gt;
&lt;li&gt;Time to restore service&lt;/li&gt;
&lt;li&gt;Evidence of customer or business impact&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These metrics should diagnose the system. They should not be used to rank individual developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Can Accelerate Work and Still Slow Delivery
&lt;/h2&gt;

&lt;p&gt;AI-assisted development changes implementation capacity, but it does not remove the rest of the delivery process.&lt;/p&gt;

&lt;p&gt;A team may use AI to generate code, tests, migration scripts, or documentation faster. That can be valuable.&lt;/p&gt;

&lt;p&gt;But imagine that the team doubles its pull-request volume while senior review capacity remains unchanged. The review queue grows. Integration conflicts increase. Test environments become busier. More generated code requires architectural validation.&lt;/p&gt;

&lt;p&gt;Implementation became faster. Delivery did not.&lt;/p&gt;

&lt;p&gt;The correct question is therefore not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How much code did AI generate?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Did AI reduce the total time required to deliver a correct, maintainable, production-ready change?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This distinction matters for organizations adopting AI-assisted software development. AI can improve engineering velocity when it reduces a real constraint. It can also move the constraint into review, testing, architecture, security, or production support.&lt;/p&gt;

&lt;p&gt;A practical approach is to introduce AI into a specific part of the workflow and measure the effect on the entire path.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If AI generates tests faster, did review time fall or rise?&lt;/li&gt;
&lt;li&gt;If AI drafts migrations, did deployment confidence improve?&lt;/li&gt;
&lt;li&gt;If AI creates more pull requests, did lead time decrease?&lt;/li&gt;
&lt;li&gt;If AI supports code review, did defect escape increase?&lt;/li&gt;
&lt;li&gt;If AI helps with debugging, did recovery time improve?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The benefit should be measured at the system level, not only at the point where the tool is used.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a Software Delivery Strategy Must Contain
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;software delivery strategy&lt;/strong&gt; should turn urgency into a set of operating decisions.&lt;/p&gt;

&lt;p&gt;It does not need to be a large transformation document. It needs to define how work will move from an identified need to production feedback.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. A clear outcome
&lt;/h3&gt;

&lt;p&gt;Every significant initiative should answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What problem are we solving?&lt;/li&gt;
&lt;li&gt;Who is affected?&lt;/li&gt;
&lt;li&gt;What evidence would show improvement?&lt;/li&gt;
&lt;li&gt;What is the smallest valuable result?&lt;/li&gt;
&lt;li&gt;Which assumption is most likely to be wrong?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This prevents teams from delivering a large amount of functionality before discovering that the original assumption was weak.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. A real priority order
&lt;/h3&gt;

&lt;p&gt;If five initiatives are all called critical, none of them is truly prioritized.&lt;/p&gt;

&lt;p&gt;Real prioritization requires leadership to decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which work receives capacity now&lt;/li&gt;
&lt;li&gt;Which work is paused&lt;/li&gt;
&lt;li&gt;Which work is reduced in scope&lt;/li&gt;
&lt;li&gt;Which commitments are displaced by new urgent work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Adding a new priority without removing an old one is not prioritization. It is queue growth.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Limits on concurrent work
&lt;/h3&gt;

&lt;p&gt;Too much work in progress creates context switching, coordination overhead, and dependency queues.&lt;/p&gt;

&lt;p&gt;Suppose five initiatives all need the same platform engineer and the same test environment. Starting all five does not increase throughput. It creates five partially completed streams competing for the same constraint.&lt;/p&gt;

&lt;p&gt;A more effective decision may be to finish two initiatives before starting the remaining three.&lt;/p&gt;

&lt;p&gt;This can feel slower because fewer projects are visibly active. It is often faster because valuable work reaches completion sooner.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Smaller delivery units
&lt;/h3&gt;

&lt;p&gt;Large changes delay feedback and increase the cost of failure.&lt;/p&gt;

&lt;p&gt;Teams should look for ways to release:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Thin vertical slices&lt;/li&gt;
&lt;li&gt;Smaller pull requests&lt;/li&gt;
&lt;li&gt;Backward-compatible API changes&lt;/li&gt;
&lt;li&gt;Incremental migrations&lt;/li&gt;
&lt;li&gt;Features behind flags&lt;/li&gt;
&lt;li&gt;Limited-audience rollouts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The objective is not to split work into meaningless technical tasks. Each slice should either deliver value, validate an assumption, or reduce a known risk.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Clear decision ownership
&lt;/h3&gt;

&lt;p&gt;Work often waits because nobody knows who can decide.&lt;/p&gt;

&lt;p&gt;A delivery strategy should distinguish between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Decisions teams can make independently&lt;/li&gt;
&lt;li&gt;Decisions requiring consultation&lt;/li&gt;
&lt;li&gt;Decisions requiring explicit approval&lt;/li&gt;
&lt;li&gt;Decisions that must be escalated immediately&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, a team may be free to choose an implementation approach within agreed architectural and security boundaries. A change to shared customer data may require broader approval.&lt;/p&gt;

&lt;p&gt;This reduces unnecessary escalation without removing governance.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Non-negotiable quality boundaries
&lt;/h3&gt;

&lt;p&gt;Teams should not renegotiate basic safety for every deadline.&lt;/p&gt;

&lt;p&gt;Typical non-negotiable boundaries may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication and authorization&lt;/li&gt;
&lt;li&gt;Data integrity&lt;/li&gt;
&lt;li&gt;Backward compatibility&lt;/li&gt;
&lt;li&gt;Critical automated tests&lt;/li&gt;
&lt;li&gt;Monitoring and alerting&lt;/li&gt;
&lt;li&gt;Rollback capability&lt;/li&gt;
&lt;li&gt;Regulatory requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The exact boundaries depend on the system. A marketing experiment and a payment service should not receive identical treatment.&lt;/p&gt;

&lt;p&gt;The principle is to match assurance to risk, reversibility, and impact.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. A feedback loop
&lt;/h3&gt;

&lt;p&gt;The strategy should define how the organization will learn whether the change worked.&lt;/p&gt;

&lt;p&gt;Shipping is not the end of delivery. The team needs evidence.&lt;/p&gt;

&lt;p&gt;That may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adoption&lt;/li&gt;
&lt;li&gt;Conversion&lt;/li&gt;
&lt;li&gt;Reduced operational effort&lt;/li&gt;
&lt;li&gt;Fewer support requests&lt;/li&gt;
&lt;li&gt;Lower failure rates&lt;/li&gt;
&lt;li&gt;Faster processing&lt;/li&gt;
&lt;li&gt;Improved customer completion rates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without feedback, the organization can become faster at delivering the wrong thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Engineering Teams Move Faster in Practice
&lt;/h2&gt;

&lt;p&gt;The most useful question is not, “How can the team work faster?”&lt;/p&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What causes work to wait, expand, or return?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question leads to practical interventions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reduce work before increasing capacity
&lt;/h3&gt;

&lt;p&gt;Start by listing active initiatives and assigning each one a clear status:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Continue&lt;/li&gt;
&lt;li&gt;Pause&lt;/li&gt;
&lt;li&gt;Reduce&lt;/li&gt;
&lt;li&gt;Cancel&lt;/li&gt;
&lt;li&gt;Complete before starting new work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is often more effective than immediately hiring more developers.&lt;/p&gt;

&lt;p&gt;Additional engineers help when implementation capacity is the main constraint. They may make matters worse when the bottleneck is review, product clarification, architecture ownership, or deployment.&lt;/p&gt;

&lt;p&gt;Hiring into the wrong constraint increases coordination without increasing throughput.&lt;/p&gt;

&lt;h3&gt;
  
  
  Replace large releases with thin slices
&lt;/h3&gt;

&lt;p&gt;Suppose a team plans a three-month customer onboarding redesign.&lt;/p&gt;

&lt;p&gt;Instead of releasing the entire flow at once, it could first release one improved step for a limited customer segment. That may reveal whether the expected drop-off point was correctly identified.&lt;/p&gt;

&lt;p&gt;The result informs the rest of the investment.&lt;/p&gt;

&lt;p&gt;This is a concrete way to improve delivery speed without sacrificing quality: reduce the size of the decision, not the level of care.&lt;/p&gt;

&lt;h3&gt;
  
  
  Move routine decisions closer to the team
&lt;/h3&gt;

&lt;p&gt;If every security, architecture, and deployment question requires a committee meeting, work will wait.&lt;/p&gt;

&lt;p&gt;Create reusable boundaries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Approved implementation patterns&lt;/li&gt;
&lt;li&gt;Standard threat checks&lt;/li&gt;
&lt;li&gt;Defined data classifications&lt;/li&gt;
&lt;li&gt;Deployment templates&lt;/li&gt;
&lt;li&gt;Service ownership rules&lt;/li&gt;
&lt;li&gt;Clear escalation triggers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The team should not need executive involvement for a decision it makes repeatedly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automate the path that blocks delivery
&lt;/h3&gt;

&lt;p&gt;Automation should be selected based on delay, not enthusiasm.&lt;/p&gt;

&lt;p&gt;If deployments are manual and risky, automate deployment and rollback.&lt;/p&gt;

&lt;p&gt;If developers wait days for environments, automate environment creation.&lt;/p&gt;

&lt;p&gt;If a slow test suite delays every pull request, improve test execution before adding more coding tools.&lt;/p&gt;

&lt;p&gt;If product clarification causes repeated rework, automation is not the first answer. Better decision-making is.&lt;/p&gt;

&lt;h3&gt;
  
  
  Review the system regularly
&lt;/h3&gt;

&lt;p&gt;Once per month, select a few completed and delayed items and examine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where they waited&lt;/li&gt;
&lt;li&gt;Why they returned for rework&lt;/li&gt;
&lt;li&gt;Which dependencies blocked them&lt;/li&gt;
&lt;li&gt;Which decisions arrived late&lt;/li&gt;
&lt;li&gt;Which controls added value&lt;/li&gt;
&lt;li&gt;Which controls added delay without reducing risk&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then improve the largest current constraint.&lt;/p&gt;

&lt;p&gt;Do not launch ten process initiatives at once. The improvement system can suffer from the same excessive work in progress as the delivery system.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Move Fast Without Breaking Things
&lt;/h2&gt;

&lt;p&gt;The phrase “move fast without breaking things” is sometimes treated as unrealistic.&lt;/p&gt;

&lt;p&gt;It is realistic only when “without breaking things” does not mean eliminating every failure.&lt;/p&gt;

&lt;p&gt;Complex systems will fail. The practical goal is to reduce the probability, impact, and recovery cost of failure.&lt;/p&gt;

&lt;p&gt;Teams can do this by making changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smaller&lt;/li&gt;
&lt;li&gt;Easier to observe&lt;/li&gt;
&lt;li&gt;Safer to reverse&lt;/li&gt;
&lt;li&gt;Continuously validated&lt;/li&gt;
&lt;li&gt;Released to limited audiences first&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A small change behind a feature flag can be tested with a limited group and disabled quickly. A large tightly coupled release has a wider failure surface and fewer recovery options.&lt;/p&gt;

&lt;p&gt;Quality and speed are not automatically aligned. Poorly designed quality gates can create delay without reducing meaningful risk. Weak quality practices can also create incidents and rework that destroy delivery speed.&lt;/p&gt;

&lt;p&gt;The engineering task is to apply the right level of assurance to the specific risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Engineering Leaders Should Say Instead
&lt;/h2&gt;

&lt;p&gt;Leaders do not need to remove urgency. They need to make it actionable.&lt;/p&gt;

&lt;p&gt;Instead of saying, “Move faster,” ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the main constraint on this work?&lt;/li&gt;
&lt;li&gt;What should stop so this becomes the priority?&lt;/li&gt;
&lt;li&gt;What is the smallest valuable release?&lt;/li&gt;
&lt;li&gt;Which assumption should we test first?&lt;/li&gt;
&lt;li&gt;Where is the work waiting?&lt;/li&gt;
&lt;li&gt;Which dependency requires leadership intervention?&lt;/li&gt;
&lt;li&gt;Which risks are reversible?&lt;/li&gt;
&lt;li&gt;Which quality boundaries cannot change?&lt;/li&gt;
&lt;li&gt;How will we know the outcome was achieved?&lt;/li&gt;
&lt;li&gt;What did we learn from the last delayed initiative?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These questions convert pressure into decisions.&lt;/p&gt;

&lt;p&gt;They also make accountability clearer. Engineering owns technical execution and risk. Product owns problem clarity and value. Leadership owns priority conflicts, organizational constraints, and accepted trade-offs.&lt;/p&gt;

&lt;p&gt;Speed improves when those responsibilities are explicit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: Do Not Ask for Speed Before Finding the Constraint
&lt;/h2&gt;

&lt;p&gt;“Move fast” is a valid expression of urgency. It is not a plan.&lt;/p&gt;

&lt;p&gt;A strong &lt;strong&gt;software delivery strategy&lt;/strong&gt; does not begin by asking developers to produce more. It begins by identifying why valuable work is not reaching production sooner.&lt;/p&gt;

&lt;p&gt;Sometimes the answer is implementation capacity.&lt;/p&gt;

&lt;p&gt;Often it is something else: unclear priorities, too much concurrent work, late decisions, shared dependencies, unstable environments, manual release processes, or feedback that arrives too late.&lt;/p&gt;

&lt;p&gt;The practical sequence is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define the outcome.&lt;/li&gt;
&lt;li&gt;Map the delivery path.&lt;/li&gt;
&lt;li&gt;Find the largest delay.&lt;/li&gt;
&lt;li&gt;Improve that constraint.&lt;/li&gt;
&lt;li&gt;Measure the end-to-end effect.&lt;/li&gt;
&lt;li&gt;Repeat.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Before asking an engineering team to move faster, find the place where the work has stopped moving.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discussion question:&lt;/strong&gt; What is the largest source of delay in your delivery system today: implementation, decisions, dependencies, validation, or release?&lt;/p&gt;

</description>
      <category>leadership</category>
      <category>programming</category>
      <category>product</category>
      <category>ai</category>
    </item>
    <item>
      <title>The Hidden Cost of Starting Development Too Early</title>
      <dc:creator>mjodeh</dc:creator>
      <pubDate>Fri, 31 Jul 2026 17:53:24 +0000</pubDate>
      <link>https://dev.to/mjodeh/the-hidden-cost-of-starting-development-too-early-1hgj</link>
      <guid>https://dev.to/mjodeh/the-hidden-cost-of-starting-development-too-early-1hgj</guid>
      <description>&lt;p&gt;On Monday, a feature moves to &lt;strong&gt;In Progress&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;By Tuesday, the repository has a new module, a database migration, and a set of endpoints. On Wednesday, the first pull request is open. By Friday, the happy path works in a demo.&lt;/p&gt;

&lt;p&gt;The work looks healthy. The board is moving. Code is accumulating.&lt;/p&gt;

&lt;p&gt;But the team still has not agreed on what should happen when a request is repeated, a dependency times out, an event arrives out of order, or a user changes state halfway through the operation.&lt;/p&gt;

&lt;p&gt;That is not a small planning gap. It means implementation began before the product's behaviour was defined.&lt;/p&gt;

&lt;p&gt;Early coding often creates an illusion of progress because it produces visible artifacts: commits, screens, endpoints, and passing tests. At the same time, it quietly converts unresolved decisions into implementation assumptions.&lt;/p&gt;

&lt;p&gt;And code is one of the most expensive places to store ambiguity.&lt;/p&gt;

&lt;h2&gt;
  
  
  A ticket can be detailed and still not be decision-ready
&lt;/h2&gt;

&lt;p&gt;Many tickets describe the &lt;em&gt;shape&lt;/em&gt; of a feature without defining its behaviour.&lt;/p&gt;

&lt;p&gt;Consider a seemingly simple operation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /subscriptions/{id}/activate

202 Accepted
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That contract looks implementable. It is not—not yet.&lt;/p&gt;

&lt;p&gt;The endpoint says nothing about the questions that determine the real system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is activation synchronous, asynchronous, or eventually consistent?&lt;/li&gt;
&lt;li&gt;Is the operation idempotent? What happens when the client retries after a timeout?&lt;/li&gt;
&lt;li&gt;Can a subscription be cancelled while payment is pending?&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;payment.succeeded&lt;/code&gt; arrives after cancellation, which transition wins?&lt;/li&gt;
&lt;li&gt;Are events delivered at most once, at least once, or without an ordering guarantee?&lt;/li&gt;
&lt;li&gt;Which service owns the authoritative state?&lt;/li&gt;
&lt;li&gt;What does the caller observe during partial failure?&lt;/li&gt;
&lt;li&gt;What evidence proves the feature is accepted?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two experienced engineers can implement the same ticket correctly and still build incompatible systems because each filled in those blanks differently.&lt;/p&gt;

&lt;p&gt;The problem is not coding ability. The problem is that a product decision was allowed to masquerade as an implementation detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four agreements should exist before production implementation
&lt;/h2&gt;

&lt;p&gt;A team does not need a hundred-page specification before writing code. It does need enough shared precision to prevent each engineer from inventing a different product.&lt;/p&gt;

&lt;p&gt;At minimum, four things should be agreed.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Behaviour
&lt;/h3&gt;

&lt;p&gt;Behaviour defines what the system does from the user's or caller's perspective.&lt;/p&gt;

&lt;p&gt;For stateful features, prose is rarely enough. Make the transitions explicit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;draft -&amp;gt; pending_payment -&amp;gt; active
                    |          |
                    v          v
                 cancelled   suspended
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then challenge the diagram:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which commands are valid in each state?&lt;/li&gt;
&lt;li&gt;Which transitions are reversible?&lt;/li&gt;
&lt;li&gt;What happens on duplicate, late, or out-of-order events?&lt;/li&gt;
&lt;li&gt;Which outcomes are visible to the user?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the team cannot answer those questions consistently, the behaviour is not yet ready to encode.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Constraints
&lt;/h3&gt;

&lt;p&gt;Constraints are the invariants and operating limits the implementation must preserve.&lt;/p&gt;

&lt;p&gt;They include business rules—such as plan limits, permission boundaries, and legal restrictions—but also system properties such as latency budgets, data residency, transaction boundaries, availability targets, and compatibility requirements.&lt;/p&gt;

&lt;p&gt;A technically correct implementation can still be unusable if it violates a constraint that surfaced too late. Discovering after development that an operation must be atomic across two stores, complete within 200 milliseconds, or run without transferring data across regions is not refinement. It is redesign.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Integration contracts
&lt;/h3&gt;

&lt;p&gt;An integration contract is more than a request and response schema.&lt;/p&gt;

&lt;p&gt;It should define ownership, versioning, failure semantics, timeout behaviour, retry policy, idempotency, ordering guarantees, and compatibility expectations. For event-driven systems, it should also answer who may emit an event, what makes it unique, how consumers recover, and how schema evolution is handled.&lt;/p&gt;

&lt;p&gt;The happy-path payload is usually the cheapest part of an integration. The expensive part is everything that happens when the network behaves like a network.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Acceptance criteria
&lt;/h3&gt;

&lt;p&gt;Acceptance criteria should make success observable and falsifiable.&lt;/p&gt;

&lt;p&gt;“The user can activate a subscription” is a summary, not a testable criterion. Stronger criteria describe the initial state, the action, the expected outcome, and the important failure cases.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gherkin"&gt;&lt;code&gt;&lt;span class="nf"&gt;Given &lt;/span&gt;a subscription is pending payment
&lt;span class="nf"&gt;And &lt;/span&gt;the user has cancelled it
&lt;span class="nf"&gt;When &lt;/span&gt;a delayed payment-success event is received
&lt;span class="nf"&gt;Then &lt;/span&gt;the subscription remains cancelled
&lt;span class="nf"&gt;And &lt;/span&gt;the payment is queued for refund exactly once
&lt;span class="nf"&gt;And &lt;/span&gt;the decision is visible in the audit trail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This single scenario aligns product behaviour, the domain state machine, integration semantics, idempotency, and observability. It removes far more uncertainty than another day of speculative implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why early coding feels faster
&lt;/h2&gt;

&lt;p&gt;Implementation has a psychological advantage: it is concrete.&lt;/p&gt;

&lt;p&gt;A team can count pull requests, story points, endpoints, components, and passing tests. Agreement work produces fewer visible artifacts, even when it removes the uncertainty most likely to delay delivery.&lt;/p&gt;

&lt;p&gt;That makes it easy to confuse activity with progress.&lt;/p&gt;

&lt;p&gt;Early implementation also tends to move quickly because engineers choose convenient defaults for every unanswered question. The first version may look efficient precisely because it has not yet encountered the decisions it postponed.&lt;/p&gt;

&lt;p&gt;Tests can reinforce the illusion. A test suite proves that the code behaves as its authors expected. It does not prove that those expectations were shared, complete, or correct. If the team never agreed on the behaviour, green tests may simply preserve the wrong assumption more rigorously.&lt;/p&gt;

&lt;p&gt;The branch is moving. The decision graph is not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rework grows across surfaces, not files
&lt;/h2&gt;

&lt;p&gt;The cost of an unresolved decision is not limited to rewriting a function.&lt;/p&gt;

&lt;p&gt;A useful engineering heuristic is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Expected rework ~= unresolved decisions
                  x affected surfaces
                  x cost of reversal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Suppose the team initially treats subscription activation as synchronous, then later agrees that it must be asynchronous and resilient to duplicate delivery. That decision can change:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the domain state model;&lt;/li&gt;
&lt;li&gt;database schema and existing records;&lt;/li&gt;
&lt;li&gt;public API responses;&lt;/li&gt;
&lt;li&gt;event schemas and consumer logic;&lt;/li&gt;
&lt;li&gt;client-side loading and error states;&lt;/li&gt;
&lt;li&gt;retry and idempotency mechanisms;&lt;/li&gt;
&lt;li&gt;tests and test data;&lt;/li&gt;
&lt;li&gt;metrics, alerts, and operational runbooks;&lt;/li&gt;
&lt;li&gt;analytics definitions and support documentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that point, calling the work “a refactor” understates it. The team is reversing a distributed decision that has already propagated through the system.&lt;/p&gt;

&lt;p&gt;This is why a small ambiguity at the start can become a large delivery cost later. The ambiguity stayed constant; its blast radius grew.&lt;/p&gt;

&lt;h2&gt;
  
  
  The answer is not heavyweight specification
&lt;/h2&gt;

&lt;p&gt;The alternative to premature implementation is not months of analysis or a demand for perfect certainty.&lt;/p&gt;

&lt;p&gt;The goal is a &lt;strong&gt;decision-ready slice&lt;/strong&gt;: the smallest set of artifacts that lets engineering start without inventing product behaviour inside the codebase.&lt;/p&gt;

&lt;p&gt;For many features, that can be lightweight:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a few concrete examples covering the main and failure paths;&lt;/li&gt;
&lt;li&gt;a state transition sketch for stateful behaviour;&lt;/li&gt;
&lt;li&gt;explicit invariants and non-functional constraints;&lt;/li&gt;
&lt;li&gt;versioned request, response, or event schemas;&lt;/li&gt;
&lt;li&gt;documented timeout, retry, and idempotency semantics;&lt;/li&gt;
&lt;li&gt;testable acceptance criteria;&lt;/li&gt;
&lt;li&gt;a short list of remaining unknowns, each with an owner.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These artifacts should be reviewed together, not produced by separate functions and thrown across handoff boundaries. Product, design, engineering, and dependent teams need to see the same behaviour from their respective angles.&lt;/p&gt;

&lt;p&gt;The objective is not to eliminate learning. It is to decide which uncertainty is acceptable before the cost of changing it multiplies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exploration code and commitment code are different
&lt;/h2&gt;

&lt;p&gt;Sometimes coding early is exactly the right move.&lt;/p&gt;

&lt;p&gt;A time-boxed spike can test whether a library supports a required protocol, whether a query can meet the latency budget, or whether an external API behaves as documented. A prototype can expose usability questions faster than a meeting.&lt;/p&gt;

&lt;p&gt;But exploratory code needs an explicit contract of its own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What question is it answering?&lt;/li&gt;
&lt;li&gt;How long will the exploration run?&lt;/li&gt;
&lt;li&gt;What evidence will it produce?&lt;/li&gt;
&lt;li&gt;Is the code disposable?&lt;/li&gt;
&lt;li&gt;What decision must be made before it becomes production implementation?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without those boundaries, prototypes have a habit of becoming foundations. Temporary assumptions acquire users, data, and dependencies. The team then has to preserve decisions it never consciously made.&lt;/p&gt;

&lt;p&gt;Exploration code can start early. Commitment code should wait until the team knows what it is committing to.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical start-development gate
&lt;/h2&gt;

&lt;p&gt;Before a feature enters production implementation, I would expect the team to answer these questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Can we describe the user-visible outcome in the same words?&lt;/li&gt;
&lt;li&gt;Are the important states and transitions explicit, including retries and out-of-order events?&lt;/li&gt;
&lt;li&gt;Are business and technical invariants documented?&lt;/li&gt;
&lt;li&gt;Do integration contracts define failure semantics, not only payloads?&lt;/li&gt;
&lt;li&gt;Are acceptance criteria objective enough to become tests and observable enough to operate in production?&lt;/li&gt;
&lt;li&gt;Are the remaining unknowns named, owned, and deliberately accepted?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the answer is no, the next step is not necessarily “stop.” It may be a short behaviour workshop, a contract review, or a targeted technical spike.&lt;/p&gt;

&lt;p&gt;But it should not be production code pretending the decision has already been made.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shipping sooner starts with deciding sooner
&lt;/h2&gt;

&lt;p&gt;Starting development early can improve a schedule on paper while making the real delivery date less predictable. The first week looks fast because the team is borrowing time from later weeks—when assumptions collide, interfaces change, data must be repaired, and tests have to be rewritten.&lt;/p&gt;

&lt;p&gt;High-performing teams do not delay implementation for ceremony. They delay irreversible commitments until the relevant decisions are explicit.&lt;/p&gt;

&lt;p&gt;The best time to discover that two teams mean different things by “activated” is before both definitions are running in production.&lt;/p&gt;

&lt;p&gt;The gap between intent and implementation—where behaviour, constraints, contracts, and evidence either align or drift—is the problem space I am exploring with &lt;strong&gt;Lopeline&lt;/strong&gt;. I will share more about that soon.&lt;/p&gt;

</description>
      <category>leadership</category>
      <category>programming</category>
      <category>product</category>
      <category>ai</category>
    </item>
    <item>
      <title>Teaching Agents to Slow Down Where It Matters</title>
      <dc:creator>mjodeh</dc:creator>
      <pubDate>Sun, 19 Jul 2026 09:20:53 +0000</pubDate>
      <link>https://dev.to/mjodeh/teaching-agents-to-slow-down-where-it-matters-39fa</link>
      <guid>https://dev.to/mjodeh/teaching-agents-to-slow-down-where-it-matters-39fa</guid>
      <description>&lt;p&gt;Say "fable-mode" (or "operate carefully," or "high-judgment mode" or "think like fable") in a Claude Code or Codex session, and one line buried in the skill file does most of the work: &lt;em&gt;"Never promote 'plausible' to 'confirmed' in your summary."&lt;/em&gt; That single rule is the whole philosophy in miniature — don't let something that merely looks right pass as something that was checked.&lt;/p&gt;

&lt;p&gt;Fable-mode is not a tool, a model swap, or a set of new commands. It's a behavioral overlay — a skill file at &lt;code&gt;~/.claude/skills/fable-mode/SKILL.md&lt;/code&gt; or &lt;code&gt;~/.codex/skills/fable-mode/SKILL.md&lt;/code&gt; or any other agent you use, that gets loaded into the turn and changes how the agent scopes work, verifies its own claims, and reports results. Nothing about &lt;em&gt;what&lt;/em&gt; Agents can do changes. What changes is the discipline around using it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually changes
&lt;/h2&gt;

&lt;p&gt;The skill is organized into seven blocks, and each one targets a specific failure mode that shows up in normal agent use:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Judgment before action.&lt;/strong&gt; The first move is classification: is this a question, a problem description, or a change request? For the first two, the deliverable is an assessment — investigate and stop, don't start editing files nobody asked you to edit. Irreversible actions (deletes, pushes, overwrites) require a stop-and-confirm, and specifically: "before deleting or overwriting anything, actually look at the target."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verification as the non-negotiable core.&lt;/strong&gt; This is the section that does the heavy lifting. Every "done" claim needs evidence produced &lt;em&gt;after&lt;/em&gt; the last edit — a test run before your final change proves nothing about your final change. Claims get graded on a three-tier scale: &lt;strong&gt;Confirmed&lt;/strong&gt; (you ran it and saw the result), &lt;strong&gt;Plausible&lt;/strong&gt; (the code reads right but you haven't executed it), &lt;strong&gt;Assumed&lt;/strong&gt; (inherited from the user's description). The rule is that you report the grade you actually earned, not the one that sounds better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reasoning habits.&lt;/strong&gt; Hold two hypotheses before committing to a diagnosis. Treat your memory of a library's API as a prior, not a fact, and check the installed version when correctness depends on it. When a result contradicts what you expected, that's flagged as "the most information-dense moment of the task" — chase it instead of smoothing over it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anti-patterns as hard stops.&lt;/strong&gt; Eight explicit bans, including "declare success without a post-change verification run," "fix a bug you can't explain," and "hedge a known failure ('should work now') — either you verified it or you report it as unverified."&lt;/p&gt;

&lt;p&gt;The skill closes with a five-item checklist the agent is meant to run before ending any turn — essentially a self-audit against the rules above.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advantages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Verification stops being optional.&lt;/strong&gt; The "read before you write" and "check you didn't break the neighbors" rules mean the agent greps for other callers of a function it just changed instead of assuming the diff is self-contained.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reports get honest, not optimistic.&lt;/strong&gt; The Confirmed/Plausible/Assumed grading forces a specific kind of intellectual honesty that's easy to skip under normal operation, where "should work" and "verified working" tend to blur together in the final summary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope stays tight.&lt;/strong&gt; "Prefer the smallest change that fully solves the problem" combined with "expand scope without flagging it" being a hard stop means less unrequested refactoring riding along with a bug fix.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Root-cause bias.&lt;/strong&gt; The rule that a fix needs a one-sentence causal explanation before it's applied catches the class of fix that happens to make a symptom disappear without addressing why it occurred.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Effort matches stakes.&lt;/strong&gt; "A one-line fix does not need a design document. A schema migration does not get done on vibes" — the skill explicitly scales its own overhead down for trivial tasks, so it isn't uniformly slower.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Disadvantages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It's a self-reported discipline, not an enforced one.&lt;/strong&gt; There's no external checker validating that the agent actually ran the test it claims to have run — the whole system depends on the model correctly following its own instructions and honestly grading itself. A model that misjudges "confirmed" vs. "plausible" produces the same failure mode fable-mode was meant to prevent, just with more confident-sounding labels attached.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More tool calls per task.&lt;/strong&gt; Verifiable increments, post-change re-runs, and neighbor-checking all mean more intermediate steps than an agent optimizing purely for speed. On tasks where the user genuinely wants a fast, rough pass, this overhead is friction, not value.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No built-in tool selection guidance.&lt;/strong&gt; The skill is explicit that it "governs how work is scoped, verified, and reported — not what tools to use." It won't tell the agent which agent, MCP, or command to reach for; that judgment still comes from elsewhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Depends on activation.&lt;/strong&gt; It's opt-in per session via trigger phrase. A user who forgets to say "fable-mode" on a high-stakes task gets none of it — there's no persistent always-on variant described in the file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Checklist compliance can become theater.&lt;/strong&gt; A five-item checklist run by the same agent that did the work is a weaker guarantee than an independent review pass; it catches self-aware gaps, not blind spots the agent doesn't know it has.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What to actually expect
&lt;/h2&gt;

&lt;p&gt;Turn fable-mode on for the tasks where being wrong is expensive: schema migrations, auth changes, anything touching shared code, or a bug you don't yet understand. Expect the final report to distinguish what was actually tested from what merely compiles, expect fewer "while I was in there, I also…" surprises in the diff, and expect the agent to stop and ask before anything destructive rather than assuming consent. Don't expect it to make trivial tasks faster — for a one-line CSS fix, the skill's own "match depth to stakes" rule means it should behave close to normal anyway. The gain isn't speed; it's a report you can trust at face value, on the tasks where that trust is worth paying the extra verification steps for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Skill File to download
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/mjodeh/agentic/blob/master/skills/fable-mode/" rel="noopener noreferrer"&gt;fable-mode&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to contribute&lt;/p&gt;

</description>
      <category>agentskills</category>
      <category>agents</category>
    </item>
    <item>
      <title>Why faster typing rarely produces faster delivery</title>
      <dc:creator>mjodeh</dc:creator>
      <pubDate>Sat, 18 Jul 2026 08:55:32 +0000</pubDate>
      <link>https://dev.to/mjodeh/why-faster-typing-rarely-produces-faster-delivery-2863</link>
      <guid>https://dev.to/mjodeh/why-faster-typing-rarely-produces-faster-delivery-2863</guid>
      <description>&lt;p&gt;&lt;strong&gt;A developer finishes the change on Tuesday. The customer sees it three Tuesdays later. What happened in between is the real story of software delivery.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When delivery slows, the instinct is almost always the same: push the engineering team to move faster. Increase velocity. Add developers. Introduce another coding assistant. Reduce the estimate. Ship more story points.&lt;br&gt;
It sounds rational because code is the most visible artifact in software development. But code is only one station on a much longer line. Most delays happen before the first line is written or after the last pull request is merged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The delivery flow&lt;/strong&gt; from idea to impact:&lt;br&gt;
 &lt;strong&gt;DEFINE&lt;/strong&gt; (Clarity) -&amp;gt;  &lt;strong&gt;DECIDE&lt;/strong&gt; (Approvals) -&amp;gt; &lt;strong&gt;BUILD&lt;/strong&gt; (Code) -&amp;gt; &lt;strong&gt;CONNECT&lt;/strong&gt; (Dependencies) -&amp;gt; &lt;strong&gt;PROVE&lt;/strong&gt; (Validation) -&amp;gt; &lt;strong&gt;RELEASE&lt;/strong&gt; (Ownership).&lt;/p&gt;

&lt;p&gt;Only one stage is primarily about typing code. Every stage can slow delivery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The keyboard is rarely the constraint&lt;/strong&gt;&lt;br&gt;
Imagine a feature that requires two days of focused development. It waits three days for a product decision, four days for another team to expose an API, two days for review, and five days for a shared test environment. Making the coding twice as fast saves one day. Fixing the surrounding flow can save fourteen.&lt;br&gt;
That is why teams can become better at producing code without becoming better at delivering outcomes. They optimize the activity while leaving the system untouched.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CLARITY&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Unclear requirements are rework in disguise&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The team starts moving before everyone agrees where it is going.&lt;br&gt;
A vague requirement does not disappear when development begins. It simply changes form. It becomes a Slack thread, an assumption embedded in the code, a late design debate, or a feature that technically works but solves the wrong problem.&lt;br&gt;
This creates the illusion of progress: tickets move, commits appear, demos happen. Then the questions arrive. What should happen in the edge case? Which system owns the data? Who is the real user? What does success look like? The team rewrites what it already built because it began with motion instead of clarity.&lt;br&gt;
A short, difficult conversation before coding is often faster than a long, expensive correction afterward.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DECISIONS&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Approval delays create a hidden queue&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Work can be complete and still be nowhere near delivered. A security review waits for a specialist. A product decision waits for a meeting. A pull request waits for someone with the right context. A release request waits for a change window. None of this looks like active engineering work, yet all of it belongs to the delivery timeline.&lt;br&gt;
Most delivery dashboards are excellent at &lt;strong&gt;counting activity&lt;/strong&gt; and poor at &lt;strong&gt;measuring silence&lt;/strong&gt;.&lt;br&gt;
They show how long a task was in development, not how long it sat untouched between people. But customers experience the whole clock, including the waiting.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DEPENDENCIES&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Local speed cannot defeat a system dependency&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One team finishes. The outcome remains blocked. Modern software is a web of services, data contracts, platforms, vendors, environments, and specialist teams. A team may complete its part quickly and still wait for an API, a schema change, infrastructure capacity, legal language, or a partner release.&lt;br&gt;
This is the trap of local optimization: every group can report that its own work is on track while the customer-facing outcome is late. Delivery speed lives in the handoffs. Define contracts early, reduce unnecessary coupling, and make escalation paths explicit.&lt;br&gt;
&lt;strong&gt;The better question&lt;/strong&gt;&lt;br&gt;
How much time did the work spend moving - and how much time did it spend waiting?&lt;br&gt;
That ratio reveals more about delivery performance than typing speed or story points.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;REWORK&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;The fastest first draft can still be the slowest route&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Work returns because feedback arrived after commitment.&lt;br&gt;
Rework is not merely another edit. It reopens design, implementation, review, testing, documentation, and approval. The team pays for the same decision several times because the right people or the right evidence appeared too late.&lt;br&gt;
The aim is not to make the first version perfect. It is to make it directionally correct - by testing assumptions early, reviewing thin slices, exposing risks before they harden into architecture, and letting users react before the solution becomes expensive to change.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OWNERSHIP&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Work slows down in the space between teams&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When everyone contributes but nobody carries the outcome.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who resolves conflicting requirements?&lt;/li&gt;
&lt;li&gt;Who owns the integration?&lt;/li&gt;
&lt;li&gt;Who decides whether a defect blocks release?&lt;/li&gt;
&lt;li&gt;Who notices that the approval has been waiting for four days?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When those answers are unclear, work becomes organizational luggage left between gates.&lt;br&gt;
Ownership does not mean one person performs every task. It means one person remains accountable for the journey: clarifying the next decision, surfacing the blocker, finding the owner, and keeping the outcome from becoming an orphan.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VALIDATION&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Late validation turns feedback into a bottleneck&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Testing at the end makes learning expensive.&lt;br&gt;
When quality assurance, security, accessibility, compliance, and user acceptance are treated as final gates, they become queues. The team discovers fundamental problems only after the solution feels finished. Every finding now threatens a deadline and triggers a larger cycle of rework.&lt;br&gt;
High-flow teams pull validation forward. Acceptance criteria exist before development. Automated checks run while code is changing. Security and operations review risky choices early. Stakeholders see small increments. Releases are observable and reversible. Earlier feedback is not extra process; it is less expensive process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optimize the journey, not the keystrokes&lt;/strong&gt;&lt;br&gt;
If leaders want faster delivery, they need to manage the flow from idea to customer impact. That means looking beyond sprint velocity and asking where time, confidence, and accountability are being lost.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WAIT&lt;/strong&gt;
Where does work sit untouched the longest?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DECIDE&lt;/strong&gt;
Which decisions repeatedly arrive after implementation has begun?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DEPEND&lt;/strong&gt;
Which handoffs or dependencies create the most uncertainty?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RETURN&lt;/strong&gt;
Why does supposedly finished work come back for another cycle?&lt;/li&gt;
&lt;li&gt;OWN
At what moments does nobody clearly own the next move?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PROVE&lt;/strong&gt;
Which validations happen only when change is most expensive?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI coding tools can accelerate implementation. More engineers can add capacity. Better development practices matter. But those investments create meaningful speed only when coding is the constraint. Otherwise, they simply send more work into the same queues faster.&lt;br&gt;
&lt;strong&gt;THE LEADERSHIP SHIFT&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Typing is an activity. Delivery is a system.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The fastest teams create clarity early, make decisions quickly, manage dependencies deliberately, assign ownership visibly, and shorten every feedback loop.&lt;/p&gt;

&lt;p&gt;Before asking developers to code faster, follow one feature from idea to production. The keyboard may be the easiest part of the journey.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>softwareengineering</category>
      <category>leadership</category>
      <category>product</category>
    </item>
  </channel>
</rss>
