Thursday, July 14, 2005

Software Design Patterns + Agile Practicies - The New Dictator - albeit a good one

Software Design and Architecture has been a prominent field of work since the late 70's. But only in the last decade or so have designers/developers (on a larger scale) realized some of its best practices.

Software design patterns pretty much dictate the quality of good software design. You know you are on the right track, when you have followed good design patterns and avoided anti-patterns. One can further say, that they pretty much dictate the design phase of projects.

Dictators are not likened by people in real life, but design patterns are here to stay and likened.

Put its good old friend - agile practices and you have a great team to work with. Finally follow some good principles like the good OOAD principles, Unce Bob maintains. Also, Martin Fowler's site is full of many goodies for the agile developer.

Wednesday, July 13, 2005

Agile Methods, Design Patterns, XP

In general, Agile methods strive to:

  • Eliminate Redundancy
  • Encourage Strong Cohesion (I like to say "very strong") for components
  • Encourage Loose Coupling (Again I like to say "very loose") between components

In general, Design Patterns strive to:

  • Design to interfaces
  • Favor aggregation over inheritance
  • Find what varies and encapsulating it
  • Shift the level of thinking to a higher perspective to encourage clear thoughts
  • Decide whether I have the right design, not just one that works
  • Think of objects as things with responsibilities

In general, XP (an agile methodology) strives for:

  • Simplicity (My favorite)
  • Effective Communication
  • Planning Game (Planning involves both discovering what the customer wants and estimating how long this will take to do)
  • Constant Feedback from every member involved in the project (Whole Team)
  • Involving customer as an integral part of the process (On-site customer)
  • Coding standards
  • Constant Refactoring of Code
  • Continuous Testing (Unit and Acceptance). Use of Test-Driven Development.
  • Continuous improvement of Design (See Refactoring to Patterns - by Joshua Kerievsky)
  • Continuous Integration
  • Small but often product releases
  • YAGNI (You Aren't Going to Need It)
  • Great Courage
  • More...

For more information on agile software development, see the Manifesto for Agile Software Development and the Agile Alliance. Also, a good quick read would be Fowler's The New Methodology article.

Design Patterns book by the GoF is the most authoritative reference on this topic, but might not be the best place to start. Design Patterns Explained : A New Perspective on Object-Oriented Design and Head First Design Patterns are better books to start with. This page maintained by Vince Huston has some good pointers to online resources related to the study and practice of Design Patterns.

XP in short, is a lightweight development process initially thought of by Kent Beck with his work with Ward Cunningham using the Smalltalk programming language. For more information on eXtreme Programming, refer to What is Extreme Programming?, Extreme Rules, What is Extreme Programming? and Extreme Programming (XP) FAQ. Extreme Programming Explained: Embrace Change is the seminal book on XP by Kent Beck. Test Driven Development (TDD) is one my favorite practice that XP encourages and I cannot imagine writing code without it. No other programmer has felt differently after giving it a fair shot.

© 2008 Vishal V. Shah. All rights reserved. Contents of this web site reflect my personal work and is not representative of my employer.