Sunday, April 29, 2007

BOOK: Release It!

I just received a copy of "Release It! Design and Deploy Production-Ready Software" by Michael Nygard. This looks to be yet another winner from the PragmaticProgrammers' Pragmatic Bookshelf. In fact it made #1 on Amazon.com's "Hot New Releases" list for Design Tools and Techniques for the past two weeks.

Actually, this book isn't about what I had originally thought from reading the early descriptions. I thought it was going to be related to build+release+deployment engineering (CM guy that I am :). It's not about that at all. It is about architecture and design for production deployment concerns, such as: hardware/software "fit", availability/reliability, operability, stability, capacity, and maintainability (not just of the code, but of the deployed product at the customer's site).

"Release It!" covers all those things many of us software-only, high-level abtractionists forgot (or worse yet, never learned) about design & architecture for where the rubber meets the road. I need to add it to my reading list!

Saturday, April 21, 2007

April CM Journal and LDM

The April issue of the CM Journal, and there is a FANTASTIC article in it by Austin Hastings about his Longacre Deployment Management strategy for dealing with database CM. It's long, but well worth the read for the insight into a new way of thinking about and doing CM of a database.

The April CM Basics issue has a companion/predecessor article a Case Study: Enterprise and Database CM the describes the initial problem, motivation and challenges that the LDM approach needed to solve. The LDM article goes into the gory technical details of the solution.

Saturday, April 14, 2007

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 Demand against Throughput, 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

Saturday, April 07, 2007

Defining Design Quality

Nice article on Defining Design Quality at InfoQ.com. The article heavily references the work of James Shore, who is currently working on a book with chromatic entitled "The Art of Agility". It has a pretty nice definition of design quality:
"A good software design minimizes the time required to create, modify, and maintain the software while achieving run-time performance."
It also references a few other nice articles:

This also ties in quite nicely with Agile ideas about "Simple Design" and some earlier blog-postings of mine about Simplicity in Design (and ChangeThis for Simplicity).

Sunday, April 01, 2007

Best Kept Secrets of Code Reviews

The folks over at SmartBear software have written a nice little book entitled The Best Kept Secrets of Code Reviews. It's free if you go over to their webpage and ask for it (you have to fill out a registration form, and it takes a few weeks to arrive, but they havent spammed me at all since I registered with them a few months ago).

This is a pretty good book and it is VERY pragmatic! It is applicable to Agile development too! [You don't have to do Pair-Programming to be Agile! Pairing is part of XP, which is one particular agile method -- several other agile methods do not require it.]

SmartBear also has a pretty neat suite of tools that look to me like they would be REALLY USEFUL for an organization trying to streamline some of its otherwise heavyweight processes for peer-reviews and related quality metrics:
  • CodeCollaborator - Automation for paperless peer code-reviews
  • CodeReports - Continuous source code metrics over time.
  • CodePickle - Suspend & resume code changes in local developer sandboxes (implements the PrivateVersions pattern without using version-control branches)
  • CodeReviewer - automated peer-to-peer code reviews across remote sites
  • CodeHistorian - Data-mining and visualizations for version control systems.

And "No!" they did not ask me to blog or say anything nice about them or their products! I'm simply coming from the perspective of someone in a large organization who has witnessed a lot of homegrown and heavyweight processes and tools for these kinds of things, and don't see too many commercial tools addressing the peer-review aspect of development and trying to make it lighter-weight and better-integrated with version-control and the rest of SCM.

The have some other nice resources too:

Looks like a lot of "good stuff" to me!!!