Codrin Andronic

"stop existing and start living" – M. Jackson

Agile Software Development Tips

on 2009/09/10

Beginning Agility

  1. Work for outcome. Blame doesn’t fix bugs. Instead of pointing fingers, point to possible solutions. It’s the positive outcome that counts.
  2. Quick Fixes Become Quicksand. Invest the energy to keep code clean and out in the open.
  3. Criticize Ideas, Not People.
  4. Do what’s right. Be honest, and have the courage to communicate the truth.

Feeding Agility

  1. Keep up with changing technology. You don’t have to become an expert at everything, but stay aware of where the industry is headed.
  2. Invest in Your Team. Raise the bar for you and your team.
  3. Learn the new; unlearn the old. When learning a new technology, unlearn any old habits that might hold you back.
  4. Question Until You Understand. Don’t just accept what you’re told at face value. Keep questioning until you understand the root of the issue.
  5. Tackle tasks before they bunch up. It’s easier to tackle common recurring tasks when you maintain steady, repeatable intervals between events.

Delivering What Users Want

  1. Let your customers decide. Developers, managers, or business analysts shouldn’t make business-critical decisions. Present details to business owners in a language they can understand, and let them make the decision.
  2. Let Design Guide, Not Dictate.
  3. Choose technology based on need. Determine your needs first, and then evaluate the use of technologies for those specific problems.
  4. Keep your project releasable at all times.
  5. Integrate early, integrate often. Code integration is a major source of risk. To mitigate that risk, start integration early and continue to do it regularly.
  6. Automate Deployment Early.
  7. Get Frequent Feedback Using Demos.
  8. Use Short Iterations, Release in Increments. Release your product with minimal, yet usable, chunks of functionality. Within the development of each increment, use an iterative cycle of one to four weeks or so.
  9. Fixed Prices Are Broken Promises. Estimate based on real work. Let the team actually work on the current project, with the current client, to get realistic estimates.

Agile Feedback

  1. Use automated unit tests.
  2. Use it before you build it. Use Test Driven Development as a design tool. It will lead you to a more pragmatic and simpler design.
  3. Different makes a difference. Run unit tests on each supported platform and environment combination, using continuous integration tools.
  4. Measure how much work is left. Don’t kid yourself – or your team – with irrelevant metrics. Measure the backlog of work to do.
  5. Listen to Users. Every complaint holds a truth. Find the truth, and fix the real problem.

Agile Coding

  1. Write code to be clear, not clever.
  2. Comment to communicate but don’t use commenting as a substitute for good code.
  3. Actively evaluate trade-offs. Consider performance, convenience, productivity, cost, and time to market. If performance is adequate, then focus on improving the other factors. Don’t complicate the design for the sake of perceived performance or elegance.
  4. Write code in short edit/build/test cycles.
  5. Develop the simplest solution that works. Incorporate patterns, principles, and technology only if you have a compelling reason to use them.
  6. Keep classes focused and components small. Avoid the temptation to build large classes or components or miscellaneous catchall classes.
  7. Tell, don’t ask. Don’t take on another object’s or component’s job. Tell it what to do, and stick to your own job.
  8. Extend systems by substituting code. Delegation is almost always preferable to inheritance.

Agile Debugging

  1. Maintain a log of problems and their solutions.
  2. Treat warnings as errors.
  3. Attack problems in isolation.
  4. Handle or propagate all exceptions. Don’t suppress them, even temporarily.
  5. Present useful error messages. Provide an easy way to find the details of errors. Present as much supporting detail as you can about a problem when it occurs, but don’t bury the user with it.

Agile Collaboration

  1. Use stand-up meetings. Keep the meeting short, focused, and intense.
  2. Good design evolves from active programmers. Real insight comes from active coding. Don’t use architects who don’t code.
  3. Emphasize collective ownership of code. Rotate developers across different modules and tasks in different areas of the system.
  4. Be a mentor. There’s fun in sharing what you know – you gain as you give. You motivate others to achieve better results. You improve the overall competence of your team.
  5. Give others a chance to solve problems. Point them in the right direction instead of handing them solutions.
  6. Share code only when ready. Never check in code that’s not ready for others.
  7. Review all code. Code reviews are invaluable in improving the quality of the code and keeping the error rate low. If done correctly, reviews can be practical and effective. Review code after each task, using different developers.
  8. Keep others informed. Publish your status, your ideas and the neat things you’re looking at. Don’t wait for others to ask you the status of your work.

These are the main ideas from the book Practices of an Agile Developer.


One response to “Agile Software Development Tips

  1. Bob MacNeal says:

    Concise, but comprehensive list. Thank you for posting. I might extend your list with a heading for Agile Philosophy and suggest 1 item:
    1. Understand the importance of Beginner’s Mind. That is, cultivate an attitude of openness and eagerness and establish an innocence of preconceptions in one’s approach to something.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: