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)
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:
Perspectives:
Found a few other links too:
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:
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.
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
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:
- Software Architecture in Practice
- The SEI webpage on Attribute-Driven Design
- The paper Quality Attribute Design Primitives and ADD
- Introduction to the ADD Method
- A Practical Example of Applying ADD (SEI Technical Report)
- Links from Real-world Software Architecture in .NET Developer's Journal
- Presentation from Paul Clements on Designing Software Architectures
- The paper Generalizing a Model of Software Architecture Design from Five Industrial Approaches (by a star-studded list of authors in the field)
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:
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!
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!!!
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
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!
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
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.
by Jens Norin and Daniel Karlström, in the Proceedings of the 6th Conference on Software Engineering Research & Practice in Sweded (SERPS'06), October 2006 (and also in September 2006 as a Softhouse Whitepaper on Lean CM)
by Joe Beckett, Plant Magazine, June 2005
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.
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:
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 IntegrationDavid 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/column2See 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 DevelopmentFrom 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:
[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.
[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:
- Agile Management for Software Engineering, by David J. Anderson, Prentice-Hall PTR, September 2003
- Lean Software Development: an Agile Toolkit, by Mary & Tom Poppendieck, Addison-Wesley, October 2005 in The Agile Software Development Series
- Implementing Lean Software Development: From Concept to Cash, by Mary & Tom Poppendieck, Addison-Wesley, September 2006 in The Addison-Wesley Signature Series
- Lean Software Strategies: Proven Techniques for Managers and Developers, by Peter Middleton & James Sutton, May 2005 by Productivity Press
- Managing the Design Factory, by Donald G. Reinertsen, The Free Press, New York, 1997
- Product Development for the Lean Enterprise, by Michael N. Kennedy, Oakela Press, 2003
Presentations:
- Lean Project Management, by David J. Anderson
- Agile Management for Software Engineering, by David J. Anderson
- Managing Lean Software Development with Cumulative Flow Diagrams, by David Anderson
- Lean Manufacturing and the Theory of Constraints – Focusing Lean, by Eric Gowland
- Lean Accounting & Throughput Accounting, Peter Milroy
- Lean Six Sigma - Benefits beyond CMMI L3, Nancy POMA, EDS, October 2006
- Software and Lean: Like Chocolate & Cranberries, by James S. Sutton, STSC 2005 Proceedings
- Lean Software Development, by Dr Christoph Stiendl, 2004
- Lean Thinking: The Theory behind Agile Software Development, by Mary Poppendieck, 2002
- Implementing Lean Software Development (Practitioner’s Course), Mary Poppendieck, November 2006
- Competing on the basis of Speed, 1hr video presentation to Google by Mary Poppendieck
- Other talks by Mary Poppendieck at http://www.poppendieck.com/events.htm
Articles/Papers:
- Business Process Management: What's Driving Toyota?, Baseline magazine, September 2006
- Agile Product Development: Managing Development Flexibility in Uncertain Environments, by Stefan Thomke and Donald Reinertsen, California Management Review 40, no. 1 (fall 1998): 8-30
- Managing Lean Software Development with Cumulative Flow Diagrams, by David J. Anderson
- Agile Software Management Accounting for Systems, by David J. Anderson
- Agile Software Management: Dealing with Uncertainty, by David J. Anderson
- The Lean-Agile Connection: Developing Quality Software Efficiently by Alan Shalloway
- Introducing the Integrated Theory by Dan Rawsthorne and Alan Shalloway
- Whitepaper: Agile Work Uses Lean Thinking, Whitepaper by Mishkin Berteig
- Business Performance Through Lean Six Sigma : Linking The Knowledge Worker, The Twelve Pillars, And Baldrige / by James T. Schutta
- Introducing Lean Software Development, by the Lean Software Institute
- Lean Six Sigma and High-Performance Organizations Combined, by Tom Devane (book excerpt)
- Lean Thinking. Protein-based dietary fad or Management’s New Testament?, BPM Europe
- Bringing Lean Systems Thinking to Six Sigma, by Paul Mullenhour and Jamie Flinchbaugh, 2005
- Lean Software Delivery with the IBM Rational Solution, by Clay Nelson, The Ratioinal Edge, October 2006
- TOC and Lean, Iowa State University Center for Industrial Research and Service
- Lean Thinking for Process Improvement, part 2 of a three part series by bizmanuals.com
- Six Sigma and Lean Manufacturing, by Michael Baudin
- Agile vs Lean Software Develompent
- Lean articles at isixsigma.com
- How to Compare Six Sigma, Lean and the Theory of Constraints, by Dave Nave, Quality Progress, March 2002
- Software Development Convergence: Six Sigma-Lean-Agile, by David Hallowell
- Design for Six Sigma and Lean Manufacturing, by Praveen Gupta, 2001
Websites / Blogs:
- Tom & Mary Poppendieck’s home page at http://www.poppendieck.com/
- David Anderson's Agile Management website at http://www.agilemanagement.net/
- Lean Enterprise Wiki search engine: http://lean-enterprise-swicki.eurekster.com/
- http://www.leansoftwareinstitute.com/
- http://leaninsider.productivitypress.com/
- http://www.lean.org/
- http://www.evolvingexcellence.com/
- http://www.leansoftwareengineering.com/
- Lean blogger Pete Shmula at http://www.shmula.com/has lots of nice blog-entries/articles on aspects of Lean
- NetObjectives Lean Software Resources at http://www.netobjectives.com/resources/lean
- Lean manufacturing - Wikipedia, the free encyclopedia
Joe Little has authored a nice little booklet on The Elements of Agile Style
The March issue of the Agile Journal is about scaling-agility and agile adoption in the enterprise.
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!
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!
In October of last year over at DevX.com, Rod Coffin and Derek Lane wrote a darn good article (in two parts) that gives a nice, concise overview of seven agile methodologies:
Check out some of the other articles at the DevX.com Architecture Zone.
There are a lot of REALLY GOOD manifestos over at ChangeThis.com! Back in May 2006 I blogged about Simplicity in Design and included several links/resources on the subject. Turns out ChangeThis.com has a few good manifestos on the subject as well (and gets more every month). Here are the ones I liked most:
Other manifestos not necessarily related to the above that I found interesting are:
In an earlier blog-entry reviewing the book Code Craft, I mentioned the classic paper by Peter Miller entitled "Recursive Make Considered Harmful" ...
Anyway, I recently ran across a bunch of webpages that examined or revisited the issue. I thought several of them were worth sharing, so here they are:





