Monthly Archives: July 2007

A Somewhat Questionable Pair of Commit Messages

Andrew recently mentioned that I'm working on E2 currently.  We dog food all our products, and automatically deploy updates to our internal systems.  While doing some work on E2 I discovered that it isn't currently automatically updating.  In troubleshooting this I noticed that the line saying to do this was commented out.  The svn log had the following messages:

commit xxx: ADDED: Automatic deployment for E2
commit xxx+1: REMOVED: Automatic deployment for E2

Less than fully helpful when trying to work out why the automatic deployment was removed.

Lean Software Development

“Every line of code costs money to write and more money to support. It is better for the developers to be surfing than writing code that won't be needed. If they write code that ultimately is not used, I will be paying for that code for the life of the system, which is typically longer than my professional life. If they went surfing, they would have fun, and I would have a less expensive system and fewer headaches to maintain.” Jeff Sutherland, CTO PatientKeeper

The quote above is a fun (if slightly confronting) way of thinking around the idea that Software Development is all about delivering value to customers.  The premise is that there is a long lasting cost to any line of code that is added to a software system.  The cost is much greater than the initial development cost, so making sure that the right features are added is key.  The implication is that the team (including the customer) needs to be sure that adding code (including complexity and future maintenance) does add enough value to justify the long term cost (the maintenance cost will be much higher than the initial development).

The term "Agile Software Development" is getting a little bit old hat.  All the cool kids are talking about Lean development, as described by the Poppendiecks. The Lean Software Development principles are taken from domains such as Lean Manufacturing, especially as seen in Toyota, and initially introduced byWilliam Edwards Deming (Jason Yip links to YouTube videos introducing the ideas). The book Lean Thinking also has been recommended as a good introduction to the topic.

I have been hearing Doug talk about the idea, but haven't had much exposure before attending a NetObjectives Webinar on the topic. The principles (as articulated by the Poppendiecks) are:

  • Eliminate Waste,
  • Focus on Learning,
  • Build Quality In,
  • Defer Commitment,
  • Deliver Fast,
  • Respect People, and
  • Optimize the Whole.

The most valuable thought for me was the idea of optimizing the whole.  That is to ensure that the whole process is considered when performing process optimizations, and care is taken to avoid making localized optimizations that end up actually hindering the effectiveness of the process.  Lean Development is a very interesting and useful looking way of working.    It is well worth looking at the references listed above, and learning more.

PMI — Plus Minus and Interesting

A technique for thinking from De Bono's Thinking Course

One of the first techniques introduced in the book De Bono's Thinking Course is the PNI approach.  In this approach you pick a problem (and a potential solution), and work through the Positive, Negative and Interesting points around the problem.

The goal is to spend a short (about 2-3 minutes) amount of time brainstorming the different ideas around a problem, doing this before investing energy or effort in attacking or defending a particular point of view.  By doing this, you are actually thinking about the problem rather than thinking about the attack or defense of a particular position.  This is important as it is easy to make the investment more in the attack/defense of a position, than in actually thinking about the problem itself.  This is particularly true for smart people.

Some examples of the PMI approach follow. I’m taking one pretty technical example (JavaScript on Rails), and using one of the exercises from the book. I think these examples highlight that the categorisation of ideas could easily differ depending on who is performing the exercise. In particular the idea of not using Ruby might be a plus for many people.

JavaScript On Rails

This issue is based around the idea of re-implementing Ruby on Rails in JavaScript (as done by Steve Yegge).

Plus

  1. Can use rails ideas in JavaScript
  2. Can use rails ideas in places where ruby isn’t possible
  3. deploy easily to JVM

Minus

  1. not using Ruby
  2. fewer languages in the mix

Interesting

  1. Rails in an ECMA standard language
  2. JavaScript gives a C like language.

 

All Children Should Adopt a Senior Citizen

Plus

  1. Learn from their elders
  2. elders are cared for
  3. cheap care
  4. cheap babysitting
  5. learn responsibility

Minus

  1. not enough elder people
  2. children have enough on their plate already, and need time to just be kids
  3. will end up as a responsibility and chore for parents
  4. what happens if something goes wrong for the children

Interesting

  1. less need for carers

The above gives some general ideas on the PMI approach. It might be worth trying it yourself. Perhaps you could play with the ideas:

  1. Safari on Windows
  2. Having all Staff Working a 20 hour week
  3. All Developers should use Laptops
  4. Use IntelliJ as an IDE
  5. Use OSX for Java Development

Naturally (since I’ve gone to the effort of writing this article), I plan to use this technique in my daily life (professionally and otherwise). It provides a useful tool for helping thinking.

Edward De Bono on Thinking

First on series of articles talking about thinking and learning

As an IT professional, my work is thinking and intellectual.  One of the ways to do better and improve as an Engineer is to improve my thinking abilities.  In this light I have been reading some of the works of Edward De Bono on thinking.  In order to best reflect on what I am reading and learning, I plan to blog about this.  We'll see how this goes in practice, but the definite plan is to regularly blog my thoughts.