J.D. Meier's Blog

Software Engineering, Project Management, and Effectiveness

10 Ways to Make Agile Design More Effective

10 Ways to Make Agile Design More Effective

Rate This
  • Comments 0

The key shift with Agile Design is to deliver quickly while handling changes smoothly.   Instead of doing long requirements phases, and heavy documentation up front, with Agile Design you focus on incremental and iterative delivery, going from low-fidelity to high-fidelity, while getting feedback and improving your design.

Here are 10 ways to make Agile Design more effective:

  1. Avoid BUFD – Big Up-front Design.  Avoid it.  Whenever there is a big lag time between designing it, developing it, and using it, you’re introducing more risk.  You’re breaking feedback loops.  You’re falling into the pit of analysis paralysis.   Focus on “just enough design” so that you can test what works and what doesn’t, and respond accordingly.
  2. Avoid YAGNI – You Aren’t Gonna Need It.  Avoid bloat.  At the same time, avoid scope creep.   “Keep the system uncluttered with extra stuff you guess will be used later. Only 10% of that extra stuff will ever get used, so you are wasting 90% of your time.”Extreme Programming.org
  3. Embrace Occam’s Razor and KISS (Keep It Simple Stupid).  Use the simplest solution.  Simplicity always win in the long run.  This will help you stay in the game before bogging your solution down and crippling it’s ability to keep up with evolving requirements.
  4. “Test-First.”   If you don’t know the criteria for what good looks like, you’ll have a hard time finishing.  You’ll also get lost among your designs, unless you clarify what your actual test-cases are.   If you keep a small set of useful tests, you can parse through a variety of designs, and find the diamonds in the rough.
  5. Deliver iterative and incremental solutions.   An iterative solution would be decorating the living room.  An incremental solution would be adding a porch to the house.   Deliver useful and usable increments, and then iterate on them to improve them based on real feedback.
  6. Cycle through alternatives.   Fail fast and fail often.  This is another good argument for being able to do rapid prototypes, and low-fidelity prototypes.   You need to cycle through competing solutions.   Do A/B testing.  Do the Toyota Way and create 3 alternative solutions.   Don’t get wrapped up in finding the “best solution.”  In many cases, your best solution will be found by “satisficing.”  This will keep you ahead of the game, and ready to respond to emerging requirements.
  7. Stay customer-connected.  Stay connected with the users who will actually use what you’re making.   Get 5 customers to stand behind it.  Don’t just throw it over the wall down the line, and hope it sticks.  Invite your customers to your side of the wall.
  8. Think Big Picture First.   Put the scaffolding in place.  Focus on the plumbing before the interior decorating.  Solve the big challenges first.   Get the big picture, before getting lost in the details.  Optimize the maxima before the minima.
  9. Get cross-discipline feedback early and often.    The better you can balance cross-discipline feedback, the more reliable your solution will be.
  10. Spike early and often.  Use technical spikes, functional spikes, and user experience spikes to get the risk out.

The last thing you want to do is throw a solution over the wall, and nobody wants it, or you missed the basic scenarios.   That’s why delivering early helps get the risk out, and helps validate your path.

If you’ve ever watched people argue over how they “satisfied the requirements”, but nobody wants to use it, you know exactly what I mean.  People don’t always know exactly what they want, or, even if they do, it’s hard to articulate in a way, that everybody gets it.  But people are way better at recognizing what they like, and knowing whether or not they like something when they actually use it.

Embrace it.

That’s what Agile Design does – it embraces the reality that people get more clarity over time of what good really looks like.

Creating an early feedback loop also forces you to keep your solution easy to maintain and easy to evolve.  Otherwise, it’s very easy to cement your design, and no longer respond to emerging needs.  The key to lasting solutions is they are built to change.

It’s a process of continuous learning and continuous delivery.