A Django site.
July 6, 2008
» Traceability Matrix in an Agile Project

InfoQ.com summarized an email-list discussion thread on the subject of using a Traceability Matrix in an Agile Project.

I contributed quite a lot to the thread, and InfoQ apparently included many of the key things I said along with the related URLs to articles I've written. (Thanks guys!)

» Distributed Version-Control Guide on InfoQ.com

Nice little guide on InfoQ.com about Distributed Version Control - that's twice in two months that the "agile" section of InfoQ.com has had a decent article on the subject!

» From PMBoK to Agility

I recently learned that Michelle Sliger, author of the wonderful 4 part series of articles on Relating PMBoK to Agile Practices, is co-authoring a book with Stacia Broderick entitled the Software Project Manager's Bridge to Agility. You can even download an excerpt from her website.

I'm looking forward to this book a great deal, judging by the excellent articles and presentations of hers that I've read.

May 14, 2008
» Distributed Version Control Systems

A colleague of mine had a question for me about Distributed Versions Control Systems (or DVCS). There are a growing number of such systems these days: Mercurial, Bazaar, git, svk, BitKeeper, Gnu Arch, darcs, Monotone, Codeville, Arx, just to name a few. I referred them to a good essay by David Wheeler that talks about the fundamental differences between distributed vs centralized VCS (among other things).

I also Googled on the topic and came across some interesting links:

Anyone else have any links they recommend on the topic? (please, no spam/marketing)

March 9, 2008
» Software Architecture Views and Perspectives

I'm fairly interested in the literature on Software Architecture Views and Perspectives. Folks here may remember by work on Dimensions and Views of SCM Architecture as one of the reasons why ...

The text of the entire 2nd edition of the "Software Architecture in Practice" textbook is available online as one source fo information on the subject (among others). I found another good link (& book reference) at http://www.viewpoints-and-perspectives.info/

It's the website for the book "Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives" by Nick Rozanski and Eoin Woods. They classify/use "Viewpoints" and "Perspectives" as follows:

Viewpoints:

  • Functional
  • Information
  • Concurrency
  • Development
  • Deployment
  • Operational
Perspectives:
  • Security
  • Performance and Scalability
  • Availability and Resilience
  • Evolution
  • Accessibility
  • Development Resource
  • Internationalization
  • Location
  • Regulation
  • Usability
Found a few other links too:

» Software Modifiability Tactics

Getting back to the subject of my previous blog-entries on Software Architecture Views and Perspectives and Software Architecture Quality Attributes, I wanted to talk more specifically about the quality attribute of Modifiability.

The Modifiability of a software system is related to how minimal is the cost/effort to develop and deploy changes to the software. This relates to well known concepts and principles of coupling, cohesion, maintainability, etc. and is the basis for many of the elements of object-oriented, component-based, and aspect-oriented design ("reuse" is a close cousin for all these as well).

Software Modifiability Tactics are presented in section 5.3 of Software Architecture in Practice. A taxonomy is given which relates architectural tactics to architectural patterns ("styles") and the design patterns which are largely concerned with achieving the attribute (in this case "modifiability") for various types of products and contexts. The article Understanding Architectural Patterns in Terms of Tactics and Models even has a nice matrix that maps architectural patterns or styles to the various kinds of modifiability tactics.

The taxonomy for software modifiability tactics is broken down as follows:

  • Localize Changes (increase cohesion)
    • Maintain Semantic Coherence
    • Anticipate Expected [types of] Changes
    • Generalize the Module
    • Limit Possible Options
    • Abstract Common Services

  • Prevent Ripple Effects (reduce coupling)
    • Hide Information
    • Maintain Existing Interfaces
    • Restrict Communication Paths
    • Use an Intermediary

  • Defer Binding-time (defer decision-making)
    • Run-time Registration
    • Configuration Files
    • Polymorphism/Delegation
    • Component Replacement
    • Adhere to Defined Protocols

In September 2007, an SEI Technical Report on Software Modifiability Tactics was published that provides a comprehensive discussion of these modifiability tactics and the architecture/design patterns that can be used to implement them (and some of the tradeoffs involved).

Links and Resources on Software Modifiability Tactics:

In a subsequent blog-entry I will muse about how Modifiability relates to Agility in both software architecture/design and in software process architecture/design.

February 18, 2008
» Software Architecture Quality Attributes

Following on to my previous blog-entry about Software Architecture Views and Perspectives, the book "Software Architecture in Practice" also describes a method called Attribute-Driven Design or ADD. This is not yet-another-design-method like BDD or TDD. ADD is concerned software architectural design (so it's at the "architecture-level" rather than what we might normally think of as the "design-level").

ADD is concerned with explicitly identifying the desired quality attributes of an architecture. Many of us know that simply implementing the (functional) requirements correctly is just the beginning of any good design, and possibly not even the most important attribute of the design. In addition to other attributes like security or availability, there are also attributes like modifiability of an architecture. And it is often these attributes that, if attained, are the true indication of whether or not we've done a good job.


Some of the more commonly desired quality attributes are:

  • Availability
  • Modifiability
  • Performance
  • Security
  • Testability
  • Usability
Many of us have also often had difficulty trying to explain to management the importance of things like "refactoring" and what that modifiability gives us in return. ADD makes such quality attributes an explicit goal of the architecture design process. One of the first things it asks us to do is the necessary homework (research and interviews) to analyze and identify what are the desired quality attributes for our architecture and its stakeholders. It also defines use-case-like entities called Quality Attribute Scenarios, which is a way of expressing such non-functional requirements as an explicit use-case (which can then have an associated business-value).

ADD also explicitly mentions the use of patterns and tactics as part of its methodology for achieving quality attributes and making design tradeoffs (quality attributes are often the "forces" for a pattern). For each of the common quality attributes above, it identifies a taxonomy of common tactics and patterns used to make good tradeoff decisions for particular aspects of the design.

Although it look s a bit heavyweight, ADD looks promising in its use of patterns and tactics and recursive/iterative nature. But what I look most about it is that fact that it makes explicit the kinds of quality attributes and their non-functional use-cases or "stories" which can then have business value/priority associated with it, and thereby justify the existence of activities that help realize those attributes of the system.

For some more information on ADD, see the following:
Now I want to ask the question of applying this same idea to software processes and software process architecture: Seems to me that in Agile development, we're really not anti-process, but there are some really important things (quality attributes of a process?) that we feel are often left out to pasture by a lot of the very formal, CMMI-based processes we witness. Perhaps they're ignoring these important process-design quality attributes? (as embodied in the Agile Manifesto?)

February 13, 2008
» Katch the KanBan Kraze!

For those who haven't been keeping up with "Agile 2.0" or "Post-Agile", one of the more recent developments has been KanBan for Software Development. I first heard about it from David Anderson in a presentation he gave at about a KanBan System for Sustaining Software Engineering. Then I heard David and some others saying how they did away completely with iterations and simply release every two weeks, and shortly thereafter David started a KanBan Development YahooGroup.

Anyway, I think it looks extremely interesting and promising, particularly for folks in an internal IT or tool development group where much (if not all) of their work is sustaining engineering of existing tools and not so much major new feature/product development.

So I thought I would roundup several resources on the subject for folks who might be interested in learning more:



February 3, 2008
» Lean Research from MIT

A couple months ago I stumbled across the MIT Lean Advancement Initiative (LAI) website at http://lean.mit.edu

It is a veritable goldmine of papers and research relating to lean product development and lean systems engineering. You can search through the publications yourself. I took an initial pass thru and found the following couple dozen papers whose abstracts caught my eye:


Happy reading!

January 28, 2008
» Mary Poppendieck on How to Fail with Agile

Marry Poppendieck gave a keynote at SQE's Agile Development Practices Conference during the last months of 2007. The slides for that presentation are now available online. The presentation is entitled Welcome to the Mainstream (and How to Fail with Agile)

An interesting read!!!

January 23, 2008
» Best SCM Best Practices Article

The November 2007 issue of the CM Journal was devoted to the theme of "What Best Practice is Best?" Joe Farah's article on The Top 10 SCM Best Practices was quite possibly the best article on SCM best practices that I've come across to date!

Joe actually first lists his top ten "runners up" followed by his top ten. They are as follows (read the article if you see any terms that are unfamiliar to you):

    1. Use of Change Packages
    2. Stream-based Branching Strategy - do not overload branching
    3. Status flow for all records with Clear In Box Assignments
    4. Data record Owner and Assignee
    5. Continuous integration with automated nightly builds from the CM repository
    6. Dumb numbering
    7. Main branch per release vs Main Trunk
    8. Enforce change traceability to Features/Problem Reports
    9. Automate administration to remove human error
    10. Tailor your user interface closely to your process
    11. Org chart integrated with CM tool
    12. Change control of requirements
    13. Continuous Automation
    14. Warm-standby disaster recovery
    15. Use Live data CRB/CIB meetings
    16. A Problem is not a problem until it's in the CM repository
    17. Use tags and separate variant code into separate files
    18a. Separate Problems/Issues/Defects from Activities/Features/Tasks
    18b. Separate customer requests from Engineering problems/features
    19. Change promotion vs Promotion Branches
    20. Separate products for shared code
Granted, some of these may not be particularly Agile (nor were they meant to be specific to Agile development or Agile CM) but it's still a pretty darn good list in my opinion!

June 22, 2007
» Lean CM

I found a couple of great resources on Lean CM that are very compatible with the article we wrote last month on Lean-based Metrics for Agile CM Environments.

I've added these and some others to the list of Agile SCM Articles on the CMWiki.

» Defining Agile SCM

The May issue of the CM Journal is devoted to the theme of CM & Agility. Myself and Rob Cowham wrote an article for it entitled Defining Agile SCM: Past, Present and Future.

In our earliest articles on the topic, we defined Agile SCM as "the pragmatic application of sound CM principles & practices in accordance with Agile values, using Lean thinking, to serve the needs of the business!" We wish to elaborate what that means in terms of SCM for Agile development, but even more importantly in terms of how we should apply Agile, Lean and their related principles to SCM processes and procedures.


Basically, we try to emphasize that Agile CM is more than just CM for Agile projects, it also means making CM itself be Agile and using the principles tools and techniques of Agile, Lean, TOC (and even some Six Sigma) for CM. Give it a read through and then give us your feedback!

There is also (finally) a new forum on CMCrossroads.com specifically for Agile CM. Of course one of the discussion topics is "what is Agile CM?" and a lot of detractors saying there is no such thing - that it's just plain old CM for Agile projects and that CM is still CM. I contend it ain't the same old CM, and that Agile CM does more than simply apply classic CM discipline & principles to Agile projects, it also applies Agile/Lean principles, tools and techniques and is just as different from traditional plan-based CM as different architectural styles.

» Agile Development Distilled

Lately I've been spending some time thinking about how to distill Agile development within my company on a single powerpoint slide for a top-level Executive. I keep going back and forth between something that shamelessly steals (and modifies) something used to describe RUP, and something that shamelessly steals (and slightly modifies) something from Dan Rawsthorne.

Dan Rawsthorne writes that the "essence of agility is: iteration, validation, feedback." I think something along those lines is ...

Agility comes from rapid feedback & learning in short-cycles using:
  • Close Collaboration
  • Continuous Validation
  • Frequent Iteration
  • Dynamic Adaptation

RUP talks about 6 Key Principles For Business-Driven Development:
1. Adapt The Process
2. Balance Stakeholder Priorities
3. Collaborate Across Teams
4. Demonstrate Value Iteratively
5. Elevate The Level Of Abstraction
6. Focus Continuously On Quality

I think an "Agile slant" on that would be:
1. Adapt to Change
2. Prioritize Scope
3. Collaborate Across Teams
4. Demonstrate Value Iteratively
5. Elevate the Level of Automation
6. Continuously Validate Quality

Of course much of this just seems like Steven Covey’s Seven Habits of Highly Effective People. And maybe that is true.

Other sources and quotes ...

Alistair Cockburn writes of Seven Properties of Agile Projects:
1. Frequent Delivery
2. Reflective Improvement
3. Osmotic Communication
4. Personal Safety
5. Focus
6. Easy Access to Expert Users
7. A Technical Environment with Automated Tests, Configuration Management, and Frequent Integration

David Anderson's Agile Recipe for Success is: Focus on Quality, Reduce Work-in-Progress, Balance Capacity against Demand, Prioritize. He also writes "Trust is the essence of Agile"

Jim Highsmith adds that: "Agile Organizations don’t just respond to change; they generate it!"

“Agile development uses feedback to make constant adjustments in a highly collaborative environment."
-- Andy Hunt, http://www.sdtimes.com/fullcolumn/column-20060615-01.html

"Short Cycles and Customer Involvement" -- 3rd eWorkshop on Agile Methods

"an inclusive, people-centred approach to doing iterative, incremental software development. It uses a combination of technical and social practices to increase collaboration and reduce feedback cycles"

-- Steve Hayes, http://pliantalliance.org/?p=31

"The essence of Agile evolution is to gradually transform a typically conservative, risky and unattractive activity into a positive and proactive development activity."

--Dave Thomas, Agile Evolution, http://www.jot.fm/issues/issue_2006_09/column2

See table of "Key Characteristics of Agile" at (Towards an Agile Systems Engineering process)

See Agile Axioms and Seven Core Practices of Agile Development

DSDM in a Nutshell

Getting Real

My Nutshell definitions of Agile Development

Why Agility Works

Scrum Primer

Agile EVM

Allan Shalloway's Agile Explained

Dean Leffingwell with Ryan Martens, Scaling Software Agility, Ch 7 on The Essence of Agile

Not so Agile aspects of Agile Development

The Agile-Oriented Paradigm

More take-offs on Covey's Seven habits are ...
Five Habits of Highly Visionary Companies
Six Habits of Highly Effective CIOs
Seven Habits of Highly Effective Programmers
Seven Habits of Highly Effective User Interface Designers
Seven Habits of Highly Effective IT Managers
The Seven Habits of Effective Iterative Development

From SurgeWorks (http://www.surgeworks.com/our-methodology) ...
In a nutshell, Agile Methodologies are focused on delivering maximum business value in minimal time. There are several different Agile approaches, but all of them focus on a similar set of core practices. They are:
  • Iterative development
  • Business prioritization
  • Adaptive to changing/evolving requirements
  • Active user involvement

June 1, 2007
» Agile CMMI and Dancing Elephants

[updated June 1, 2007]

CMMI on the surface is definitely not very inviting to Agile. CMMI can be done in an agile fashion however. If CMMI is something you have a need for, then for secrets of how to do it "Agile-style", and details of success stories and lessons learned, take a look at the following links:


Also see "Integrating Agile Methods", and "Teaching the Elephant to Dance: Agility Meets Systems of Systems Engineering and Acquisition" (and others) from the CSE 2005 Annual Research Review.

May 8, 2007
» Lean Software Development Resources

[last update: 27-April-2007]

For a colleague at work, I compiled a list of resources covering Lean principles & practices, their integration with Six Sigma and/or Agile development methods, and the application of Lean to software development. I thought others might find it useful, so here it is ...

Books:

Presentations:

Articles/Papers:

Websites / Blogs:

April 7, 2007
» Elements of Agile Style

Joe Little has authored a nice little booklet on The Elements of Agile Style

» Top-down Agile Adoption in March Agile Journal

The March issue of the Agile Journal is about scaling-agility and agile adoption in the enterprise.

» Agile in March RationalEdge & April CrossTalk

The March issue of The Rational Edge and the April issue of Crosstalk are both devoted to the the theme of Agile Software Development this month!

» SEI Reflections on Agility: Challenges, Dillemas, & the Way Ahead

Interesting paper from Linda Levine and the SEI about Reflections on Software Agility and Agile Methods: Challenges, Dillemmas & the Way Ahead (see the corresponding presentation slides)

Some other related documents from the SEI are:


See! Not everything from the SEI is about CMM or CMMI ;-) They also a have a wealth of resources on Software Architecture and Software Product-Lines and other areas of Software Engineering!