Firewalling Complexity: Eventful Lives Of The Chicken And The Pig

September 18, 2009 at 9:10 am Leave a comment

Had a long-ago ALT.NET Canada discussion with Oren about isolating complexity. It came back vividly after yesterday’s conversations at Agile Vancouver’s "Agile Methodology for IIBA" fishbowl.

Much of the initial group discussions were about the role of business analysts in a SCRUM environment and the role of developers when it comes to acquiring business domain knowledge. It felt very difficult to try to delineate responsibilities by hard and fast rules. My understanding of the gist of last night’s comments went something like this:

  • If all domain knowledge rests with the BA who hands off use cases to developers who do all things “technical” we are looking at a waterfall scenario with dangerous potential for meaning and purpose getting lost in translation. Continuous feedback and a view of the bigger picture are vital to get the details of the implementation right.
  • Without BAs, the bigger picture would be lost because developers will have little time to look beyond the current sprint.
  • Without BAs as intermediaries and “repositories of domain knowledge”, developers’ access to product owners and stakeholders would be too limited.

Observation by a panelist when trying to draw the line between more technical BAs and more “businessy” developers: “It depends. Not all BAs and developers are created equal. Not all teams are suitable for all approaches.”

Indeed. Add to this fact that the level of domain- and technical knowledge about a project fluctuates as members move on and new folks join.

As ever, the Engineering Mind turns to fighting entropy by technological means, with a new twist to layering:

Applications with “chickens” and “pigs”:

  • “Pig” layers are expert-only, git-yer-hands-off-that-code, for the hard core committed who know the domain and technology inside out. To quote from the loudest movie of 1998: “No touch anything. You’re all cowboys.” With luck, this is also the part of the application which is nailed down hard with lots of automated tests. Examples for pigs are the layering calculations part for a reinsurance workflow application,  route optimization for a dispatch system and similar knowledge-heavy bits and pieces.
  • “Chicken” lairs (Layers. I meant layers.) are for new kids on the block, folks in a hurry and people who are pigs in other projects and need to interface with our project without any interest or time for nuts & bolts. Examples for chickens: Updating contact information, reporting, generic functionality where the problem domain is familiar to most of us (new user signup, forgotten password, …).

“Pigs” are accessed via well-defined and documented facades which hide the underlying complexity. They may raise events which can be listened to by any chickens who care so they may extend the system without changing pig code and without the need for in-depth understanding of OO concepts such as when not to use inheritance.

The “What domain knowledge for whom” issue is simplified: “Pig” developers need a lot, “chickens” not so much.  There would even be some rough-and-ready guidance for refactoring: Move legacy systems towards separating chickens from the pigs.

If test suites for pigs exist at a level of granularity where mildly technical BAs can see whether they fit requirements, LAROS can’t be far behind.


Entry filed under: Architecture & Design, Software Development.

TechDays 2009 Impressions: Dialog Refactors Mind Presentation for Agile Vancouver: Evolution of Software Architectures over Time

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

Trackback this post  |  Subscribe to the comments via RSS Feed



%d bloggers like this: