• Home
  • About the Author

GIS and .NET Development

Rants on GIS, .NET, and life in general

Feeds:
Posts
Comments

Agile in your architecture process…where to put it?

January 17, 2008 by homebrutrout

Of late, I’ve been struggling with how to integrate formidable architecture tasks for large projects within the Agile process.  Small projects, maintenance work, pretty much anything that is well understood is OK for “Design as you go” or “Design only what you need” type approaches.  But a ground-up design and build of a large system really almost requires that some general patterns and principles be set forth in advance. 

  • “ArcGIS Server will support the need for spatial data in the web tier”
  • “Does the client have an ESB in place?”
  • “We’re going to have a provider pattern for the data tier….”
  • “We’re going to use a service broker…”
  • “We’ll use SODA for data access…”
  • “The UI will be Microsoft CAB…”

…are all the types of examples I’m thinking of.   

Clearly doing a full on discovery and architecture for 6 weeks defeats the point of agile processes by hamstringing your ability to evaluate and adapt on down the line. Plus it’s a waste of time…you haven’t done stories yet, you haven’t prioritized features and functions with the client, and you’re likely to either miss something or design for an eventuality that will be tossed out later.  You’ve also short circuited the effectiveness of iterations and sprints by hopping in your ivory tower and demanding all the information up front.  So what’s an architect to do?  Well, first thing’s first…you need to remember your core values of courage and humility.  If you can do that, then read on…

My initial readings from around the web on this topic were a bit discouraging.  The gist of the argument from Agile detractors was summed up by Frank Teti, in an article for Software Magazine last June declaring that

with the advent of anti-methodologies, such as Agile, the design ineptness of software development organizations has been further exacerbated—not remedied. Although I truly believe that the best designers understand implementation as well as design, it is their ability to negotiate the feedback loop between design and implementation that results in the most effective approach to software development.

I actually think this argument is self defeating. It is exactly the ability to negotiate the design-implementation feedback loop that allows good agile teams to succeed consistently. Remember, courage and humility. Jeremy Miller reminds us that whether its up front or evolutionary design, your first cut always stinks…or at least is going to need some rework, so why not build it into the process. Trust your team to make the right decisions at critical junctures…and realize that just because you have more letters after your name than they do, doesn’t mean much in terms of keeping the project moving. The team performs well or poorly, not individuals.

Undettered in my quest for agile architecture approaches, the first option that jumped into my head off the bat was frontloading an early sprint in the first iteration with high priority, high effort design tasks.  Enter Chris’s post on iteration zero.  Being relatively new to the Agile realm in the last 12-18 months or so, I’d learned and already forgotten about this little nugget of information. And that sent me off a google’n again. In addition to infrastructure, planning, and concensus building tasks, this is a great place to insert a “discovery and standards” task or two where you find out about client architecture standards if any, and come up with a very coarse box-n-arrow diagram of system tiers, patterns and models to be used etc.  This coarse view can be arrived at quickly in an iteration zero while development impact is nill or very low, and should remain coarse enough to allow the agility of the “design enough” paradigm for the gorey details espoused by Fowler and others.  Your finer grained design decisions can be handled in subsequent iterations as required…or refactored later in stabilization sprints.

Some other required reading:

  • A great write up on Agile Architecture theory and practice by Scott Ambler.
  • A good summary of agile architecture principles with a few links maintained by Andrew Johnston.
  • A good write-up on agile architecture applied to the enterprise with lots of good links to other sources.

Posted in Agile, Design Patterns, General GIS | Tagged Agile, architecture, design, Design Patterns | 4 Comments

4 Responses

  1. on January 17, 2008 at 1:25 pm Chris Spagnuolo

    Brian, this is an excellent post. Most people discount agile practices because of this design/architecture argument. I think it’s a non-starter. Agile does address both, it just does it in an iterative fashion. However, you have to be careful to balance your time spent on up-front architecture with actually building “deliverable” functionality to your clients. If you looked at it like a bar chart, in the early iterations you’d see big architectural bars and small functionality bars. Conversely, as you get deeper into your project, the later iterations will have small or no architecture bars and big functionality bars. I’ll be writing a blog post about this next week and will let you know when it’s up.

    Chris


  2. on January 17, 2008 at 1:53 pm homebrutrout

    Thanks Chris,
    The coarse-to-fine grain iterative architecture process worked well for me on a previous project. Technology selection and black box diagrams up front, evolving down to communication paradigms, interaction models, and class diagrams as we moved forward. Comprehensive forward engineering is definitely NOT the only option…nor is it the best one in my estimation.

    Cheers,
    Brian


  3. on March 14, 2008 at 1:13 pm Frank

    nice site.


  4. on September 9, 2008 at 12:56 pm Chris Spagnuolo's EdgeHopper

    [...] tasks are not really useable by our clients and we really can’t demo them either.  Brian Noyle recently wrote a post on his blog asking a similar [...]



Comments are closed.

  • Categories

    • .NET (16)
    • Agile (10)
    • ArcGIS Server (2)
    • ArcSDE (1)
    • Code Gen (2)
    • CodeGen (2)
    • Design Patterns (12)
    • ESRI (13)
    • General GIS (23)
    • GeoWeb (5)
    • Interoperability (2)
    • life (8)
    • MVC (9)
    • Offshore (3)
    • REST (1)
    • SubSonic (2)
    • Tech Talk (4)
    • Uncategorized (11)
    • Usability (4)
    • Utilities (5)
    • VE (1)
  • Archives

    • October 2009
    • July 2009
    • June 2009
    • May 2009
    • April 2009
    • March 2009
    • February 2009
    • January 2009
    • December 2008
    • November 2008
    • September 2008
    • July 2008
    • June 2008
    • May 2008
    • March 2008
    • February 2008
    • January 2008
  • Disclaimer

    The posts on this site represent my personal thoughts and opinions at the time of original posting. These views should in no way be construed to be those of my employer. All original work on this site is distributed under the Creative Commons License . Work or concepts attributed to others are licensed separately by the original author.
  • Pages

    • About the Author
  •  

    January 2008
    M T W T F S S
        Feb »
     123456
    78910111213
    14151617181920
    21222324252627
    28293031  
  • Admin

    • Log in
    • Entries RSS
    • Comments RSS
    • WordPress.com

Blog at WordPress.com.

Theme: Mistylook by Sadish.