Practices Of An

Agile Developer

Mike Sherov

<insert some joke title here>

Behance Team @ Adobe

History

  • Who:

    • Andy Hunt

    • Dr. Venkat Subramaniam

      • Professor - University of Houston

      • Founder - Agile Developer, Inc.

  • When: Authored in 2006

  • What: Spiritual Manual, One of the "Most Influential"

  • Why: Software Craftsmanship

Personal History

  • Came at pivotal moment in my journey, from individual contributor to team lead.
  • Taught me principles of craftmanship to live by.

  • Suggested transformational systems of development that we take for granted today.

What is Agile Development?

  • NOT any specific agile process, like Scrum
  • NOT Rigid systems, like Waterfall.
  • NOT Helter Skelter systems, like "Startup Scramble"

What is Agile Development?

  • A set of development techniques that produce high quality software, capable of responding to shifting needs of the user and market.
  • Sounds great, but.... while most agile practices are obvious wins, they are hard to internalize and practice consistently.

How does this book help?

  • Institutionalizes knowledge. Essentially the bible
  • Reference card for all the practices
  • Simple to follow structure:
  • A quote from the devil
  • 2-3 pages of narrative
  • A quote from the angel
  • What does it feel like?
  • Keeping your balance

Chapters

  • Beginning Agility - Agile Mindset
  • Feeding Agility - Background Team Practices
  • Delivering What Users Want - listening to feedback
  • Agile Feedback - Unit Testing Practices
  • Agile Coding - Coding Best Practices
  • Agile Debugging - Maintaining healthy systems
  • Agile Collaboration - How to develop in Teams
  • Moving to Agility - How to move orgs to Agile (my fave)

Beginning Agility

  • Work for Outcome

  • Quick Fixes Become Quicksand

  • Criticize Ideas, Not People

  • Damn the Torpedoes, Go Ahead

Feeding Agility

  • Keep Up with Change
  • Invest in Your Team
  • Know When to Unlearn
  • Question Until You Understand
  • Feel the Rhythm

Delivering What Users Want

  • Let Customers Make Decisions

  • Let Design Guide, Not Dictate

  • Justify Technology Use

  • Keep It Releasable

  • Integrate Early, Integrate Often

  • Automate Deployment Early

  • Get Frequent Feedback Using Demos

  • Use Short Iterations, Release in Increments

  • Fixed Prices Are Broken Promises 

Agile Feedback

  • Put Angels on Your Shoulders

  • Use It Before You Build It

  • Different Makes a Difference

  • Automate Acceptance Testing

  • Measure Real Progress

  • Listen to Users

Agile Coding

  • Program Intently and Expressively

  • Communicate in Code

  • Actively Evaluate Trade-Offs

  • Code in Increments

  • Keep It Simple

  • Write Cohesive Code

  • Tell, Don’t Ask

  • Substitute by Contract

Agile Debugging

  • Keep a Solutions Log

  • Warnings Are Really Errors

  • Attack Problems in Isolation

  • Report All Exceptions

  • Provide Useful Error Messages

Agile Collaboration

  • Schedule Regular Face Time

  • Architects Must Write Code

  • Practice Collective Ownership

  • Be a Mentor

  • Allow People to Figure It Out

  • Share Code Only When Ready

  • Review Code

  • Keep Others Informed

Moving to Agility

  • Just One New Practice

  • Rescuing a Failing Project

  • Introducing Agility: The Manager’s Guide

  • Introducing Agility: The Programmer’s Guide

  • The End?