PMI-ACP Agile Training
March 28, 29 and 30, 2012 in Phoenix AZ and REAL-ILT
April 14, 21 and 28, 2012 in Phoenix AZ and REAL-ILT - Weekend format on 3 consecutive Saturdays.
May 23, 24 and 25, 2012 in Raleigh-Durham NC and REAL-ILT
June 6, 7 and 8, 2012 in Phoenix AZ and REAL-ILT
Early bird special $1195 instead of regular price $1595.

COACHING
Become lean/agile and focus on client satisfaction. Our coaches are experts in continuous improvements. Learn more.
STAFFING
Leveraging our Talent Network to seek the best fit for both your organization and people. Learn more.
TRAINING
Our certified trainers are skilled motivators and industry experts to provide you up to date content. Learn more.

Agile Blogs

Re: Use case fundamentals

Alistair Cockburn -

Good article.

I don’t think I quite understand the subtletees between System Scope and Strategic Scope, and I’ve been writing Use Cases for years!! Maybe I’m not reading it right or maybe this could do with some better examples. Talking of examples more real life (less technical examples) would be nice. “Add device to database” – whats that all about? How about “check my account balance”!

Another thing that got me thinking was “logging in” as a sub-function? I know that generally you log-in in order to do something else but isn’t it a user goal in its own right? Sometimes I log into websites just to see what I can do next! Sometimes I don’t do anything. Anyway perhaps I’m over analysing. Its just that I like all my “User Goal” Use Cases to be the starting point and the sub-functions to be Extends or Includes.

But as I said, good article. Thanks

-by Mark on 10/6/2009 at 11:06 AM


Great artical.I like it.
And I have a confusing point.I am in an Ecommerce project. I found that it is hard to define the “search a product” as user goal level or subfunction level.For example, “user search for a product”, a subfunction level in cockburn’s perspective, has many steps including configure the facets, narrow the serach category, key in the key words. Becides, there many other approaches to search a product, such as browse the category, view the promotion, etc. So my question is should I still take the search a product as a subfunction level use case?

-by Yvonne on 10/21/2009 at 5:43 AM


Really nice article, it explains use cases in a really understandable way.
However, is it possible that you explain the difference between System scope and Strategic scope in a different way? I found really it difficult to distinguish between them.
I’m a Human-Computer Interaction student, so I really need and want to understand these concepts.
Thanks in advance.

-by Alexander on 3/21/2010 at 10:18 AM


Hello Alistair,

My question is about the section ‘Alternate Flows’ vs ‘Extensions’.

For the past 3 years, I have been interpreting and developing tests from Use Cases.

However, only recently I took up writing Use Cases. I have your book Writing Effective Use Cases and one thing I get stuck is in writing Alternate Flows (RUP template).

In the book, for the general use case template you use, there is a section called ‘Extension’ which lists the Alternate Flow and also the Error/Failure scenarios.

However in the RUP template, there are 2 sections called Alternate Flows and Extension Points.

My question is where in the RUP template do we identify the “Failure/Error and the steps to Handle it” and how do we use the ‘Extension Points’ section.

For example:

Actor: User who is a fan of Alistair and wants to learn on how to write Use Cases.
Goal: To access Access alistair.cockburn.us website to find a particular topic.

Basis Flow:
1. User Logs into website.
2. Searches for topics interested.
3. Reads the topic.
4. Exits the website.

Alternate Flows:

1a. Do not have account.
User creates an Account and starts from Step 1 in Basic Flow.

1b.Login Failure.
User has an account and correct login info but enters it wrong.

3a. Leaves a comment and starts from Step 4 in Basic Flow.
3b. Still does not understand, tries to search again but does not get the answer lookig for.

Thanks,
Vijay

-by Vijay on 6/17/2010 at 5:13 PM


A quick question, do we use field names in the use case flow and can a bank statment for e.g be depicted in the use diagram as an secondary actor.

-by Ameera on 7/1/2010 at 8:06 PM


Hi, Ameera,

No, don’t use field names in the use case flow (or not often, not many, and not enough to interrupt the flow of the narrative). E.g. “Customer enters name, address, phone number” would work, but “Customer enters First Name, Middle Initial, Last Name, 1st Street Address, 2nd Street Address, State, 7-Digit Zip Code, Area Code, 7-Digit Phone Number” wouldn’t work.

A bank statement is not an actor, it is a data structure, and so would not be on the use case diagram at all.

cheers Alistair

-by Alistair on 7/1/2010 at 10:01 PM


Hi Alistair,

If you could validate the below case let me know whether I am going in the rite direction. I am wirting use cases for Custome Account Managment within ecommerce environment :

I have my use cases listed like this.

Manage Profile Information — Which covers the Manage aspects of profile info Such as Update profile info, deactivate account and cancel update actions by the user.

I have taken the main flow as Update profile info and then branched out (alternates) as cancel update, deactivate account.

Whats the better way of writing this use case. The way I mentioned or in the CURD way. View profile info, then update, cancel and deactivate. We are writing use cases in Blue Print and the tool really does not give the flexibility as a word doc. If what I have written would help in answering the question then I can put my steps here.

Need your advice on this.

Thanks,
R.

-by R on 9/13/2010 at 4:58 PM


Hi, R (is that your real name or your way of avoiding putting your real name here?), Both ways work – I like your approach better because it generates fewer “droplet” (teensy) use cases, making it easier to navigate the description of the system. cheers, Alistair

-by Alistair on 9/13/2010 at 5:27 PM


Heyy Alistair… I was kind of lazy enough to type few letters in my name… My name is Ramesh.. Thank you very much for your reply…

Regards,
Ramesh alias R

-by Ramesh on 9/14/2010 at 10:12 AM


Hi Alistair,

Probably a basic question, still would like to validate as diffrent companies have different approaches.

Do we write the BRD (Business Requirement Document) – other words a scope document in system or user perspective or both.

I am going with the 1 in my example below because we determining what we are going to provide our customer as a future functionality via the system and at this stage user does not really have any kind of interaction or can perform an action.

Eg. 1. System shall provide the user with the ability to do “xxxx”
2. User shall have the ability to do “xxxx”

Thanks,
Ramesh.

-by Ramesh on 9/16/2010 at 1:54 PM


Hi, Ramesh. With use cases we ALWAYS (how rarely I write that!) write from a bird’s eye view of the interaction between the actor and the person, showing the intention getting accomplished, using an action verb. That is, neither of the two choices you gave me, but rather, for xxx=”change color of the item selected”, choice 3: “User changes the color of the item selected.” (The next sentence is probably: “System presents the item in the new color.”). Cheers, Alistair

-by Alistair on 9/16/2010 at 7:21 PM


Hi Alistair… I agree with your when we are writing use cases.

My Q is more related to when we are in the process of Scope definition, when we get or write high level requirements from the business or stake holders and when we want to put them in a readable format. My question is even before creating the basic use case model itself to complement the business case.

Thanks,
Ramesh.

-by Ramesh on 9/17/2010 at 1:07 AM


Hi Alistair… I agree with your when we are writing use cases.

My Q is more related to when we are in the process of Scope definition, when we get or write high level requirements from the business or stake holders and when we want to put them in a readable format. My question is even before creating the basic use case model itself to complement the business case.

Thanks,
Ramesh.

-by Ramesh on 9/17/2010 at 1:25 AM


Hi Alistair… I agree with your when we are writing use cases.

My Q is more related to when we are in the process of Scope definition, when we get or write high level requirements from the business or stake holders and when we want to put them in a readable format. My question is even before creating the basic use case model itself to complement the business case.

Thanks,
Ramesh.

-by Ramesh on 9/17/2010 at 6:11 PM


Hi Alistair,

I’d like to know what exactly are the differences between Alternate scenarios and Exception scenarios ? Or have i misunderstood them to be different .
Thanks,
Vipin

-by Vipin Menon on 10/29/2010 at 5:20 AM


Hi, Vipin. I used the word “Extensions” back in 1994 because they have the same structure and meaning as the “extends” relation Ivar Jacobson introduced for use cases (one scenario extends another, one use case extends another : same word, same semantics, same structure, same meaning). Some other authors chose the word “Alternate” simply as a word to use. “Extension” and “Alternate” are synonyms. Then some other people decided that “Exceptions” should be different in some fashion to both of those, and introduced “Exceptions” as different from “Alternate”. Their thinking was that an “Alternate” is somehow another normal, OK path, while an “Exception” was for things going wrong. In the end it makes no difference – they really end up being the same, except that people on projects waste time arguing whether something is an exception or an alternate. That’s why I don’t use “Exceptions” at all. They are all really just Alternate or Extension scenarios. Cheers. Alistair.

-by Alistair on 10/29/2010 at 12:45 PM


Im a computer systems student at Vaal university of Technology in South Africa,my problem is the workload of the course itself System Analysis because we only focus on RUP as our main resourse hence its deficult to concentrate on PC for more than 10hours daily,is the any other material that can i can be reffered to mybe a book or any other study material also for software engineering

-by makelekele on 11/18/2010 at 5:54 AM


Hi Alstair,

I have a little question.
Can weuse use cases to specify algorithms where there is no intercations.
Thnaks for your response.

-by Fatima on 11/29/2010 at 11:36 AM


Hi, Fatima — you can, but it’s usually not so wonderful, usually an algorithm represents better in a programming pseudo-language. Here it is simply a question of what reads most easily for you. Good luck. Alistair

-by Alistair on 11/29/2010 at 12:43 PM


Hi Alistair,

Why do I not see any content from you on the topic of business use case versus system use case. Am I not looking hard enough?

Regards

-by Ashar Malik on 1/11/2011 at 7:43 AM


Alistair,

I have a basic question, I am new to this environment. In which all documents we can use ‘use cases’. In my understanding it can be used in functional requirement document. Is there any other document that normally have these use cases.(e.g. BRD, in my opinion, should not have it)

Basically I want to know which all documents can have use cases and which all documents cannot have, use cases. Please advise.

-by Puneet on 2/16/2011 at 9:15 PM


Hi, Puneet —- Use cases are functional (behavior) requirements or process descriptions, and can show up in any document: BRD would have process descriptions and short use cases quite possibly. TSDs tech specs probably are too detailed for them to be of much use. Alistair

-by Alistair on 2/17/2011 at 3:57 AM


Alistair,

I have a basic question, I am new to this environment. In which all documents we can use ‘use cases’. In my understanding it can be used in functional requirement document. Is there any other document that normally have these use cases.(e.g. BRD, in my opinion, should not have it)

Basically I want to know which all documents can have use cases and which all documents cannot have, use cases. Please advise.

-by Puneet on 2/17/2011 at 11:38 AM


Thanks a lot Alistair for your answer, thats what I had thought, but wanted to confirm from the expert, :-).

-by Puneet on 2/17/2011 at 11:41 AM


hi,

how would i represent the same use case Eg. ‘Create quote’ done by two actors but what they do to achieve the goal is different. Eg. Actor 2 has few more steps/fields to complete when compared to Actor 1. do i have two separate use cases or can this be solved using the ‘extend’ function? – have a Actor 2 specific create quote’ which extends to the generic create quote use case?

Thanks!

-by Adi on 3/2/2011 at 3:59 PM


hi,

how would i represent the same use case Eg. ‘Create quote’ done by two actors but what they do to achieve the goal is different. Eg. Actor 2 has few more steps/fields to complete when compared to Actor 1. do i have two separate use cases or can this be solved using the ‘extend’ function? – have a Actor 2 specific create quote’ which extends to the generic create quote use case?

Thanks!

-by Adi on 3/2/2011 at 4:48 PM


hi,

how would i represent the same use case Eg. ‘Create quote’ done by two actors but what they do to achieve the goal is different. Eg. Actor 2 has few more steps/fields to complete when compared to Actor 1. do i have two separate use cases or can this be solved using the ‘extend’ function? – have a Actor 2 specific create quote’ which extends to the generic create quote use case?

Thanks!

-by Adi on 3/2/2011 at 4:48 PM


Hi Alistair,

Please do we need user to review use case specification?

-by tina on 3/2/2011 at 5:45 PM


Hi Alistair:

May I enlist your insight?

I have been asked to review UC work done by an analyst and have come across an unfamiliar actor-actor relationship: ‘uses’

My understanding was that the only valid actor-actor relationship is the specialization/generalization kind, to show similarity between actors but where one actor (such as a sales supervisor vs. a sales rep) can perform additional behavior beyond that of the generalized actor.

I checked out something Ellen “G” wrote in her Jogger book and she indicates there is another relationship: ‘includes’ to illustrate how one role combines the characteristics of two or more roles.

So, is this the same as ‘uses’? I have never seen this before in your book or any other UC book.

On a different note: the UC author also defined one of his cases as ‘cancel member subscription’ I believe this UC is too granular – like functional decomposition. Maybe better to say: Manage Memberships and include the ‘cancel’ function as an alternate. What is your feeling on this?

Thanks, Anya

-by Anya on 3/3/2011 at 10:52 AM


Hi Alistair,

Can I use ‘extends’ to describe a post condition? E.g. the main use case is ‘Copy File’ and once the goal is achieved, the system emails the user that the copy is successful. I need to capture this ‘Email User’ as a post condition. I believe this cannot be a use case on its own.

The problem is the ‘Email User’ becomes a pre-condition for another user case ‘Sign-off file copy’ where the user logs in to the tool and signs off. My question is how to represent the ‘Email User’ use case.

Thanks,
Ashok

-by Ashok on 3/12/2011 at 1:31 AM


sounds like Email User is an extension step in Copy File. Each extension step is a baby extending use case in its own right (little known fact, check Writing Effective Use Cases to see). “That user has been emailed.” is a precondition in the user case Sign Off File Copy.

I’m going to start a video FAQ subscription “sometime soon”, where I’ll answer these questions on video. Email me if you want to be notified when this goes live.

Alistair

-by Alistair on 3/12/2011 at 11:09 AM


Hi Alistair,

Can I use ‘extends’ to describe a post condition? E.g. the main use case is ‘Copy File’ and once the goal is achieved, the system emails the user that the copy is successful. I need to capture this ‘Email User’ as a post condition. I believe this cannot be a use case on its own.

The problem is the ‘Email User’ becomes a pre-condition for another user case ‘Sign-off file copy’ where the user logs in to the tool and signs off. My question is how to represent the ‘Email User’ use case.

Thanks,
Ashok

-by Ashok on 3/14/2011 at 12:58 AM


The answer to your first question is No.
Just write that it is a postcondition.
Just write that it is a precondition.
There is no problem – this is all pretty normal.
Do consider reading the pages in my book which cover this.

cheers – Alistair

-by Alistair on 3/14/2011 at 2:59 PM


Hi Alistair,

My question is about Save and Cancel actions on a use case.

Example:
Use Case: Save Employee
Now, I have to actions at the end of flow.
a. User clicks Save button
b. User clicks Cancel button

How can I translate this in a use case, either (b) Cancel action will be an extension? or its just an alternate flow.

Thanks in advance
SS

-by ss on 3/16/2011 at 4:26 AM


Hi Alistair,

My question is about Save and Cancel actions on a use case.

Example:
Use Case: Save Employee
Now, I have to actions at the end of flow.
a. User clicks Save button
b. User clicks Cancel button

How can I translate this in a use case, either (b) Cancel action will be an extension? or its just an alternate flow.

Thanks in advance
SS

-by ss on 3/16/2011 at 5:00 AM


Hi, SS… extension and alternate flows are synonyms :). Alistair

-by Alistair on 3/16/2011 at 12:47 PM


Hi Alistair,

How many pages must a use case be?Will technical team members read through and comprehend a complete use case if it runs to many pages? If long use cases are a problem, what are the options?

Thanks in advance.

-by MM on 4/1/2011 at 2:10 AM


Hi Alistair,

How many pages must a use case be?Will technical team members read through and comprehend a complete use case if it runs to many pages? If long use cases are a problem, what are the options?

Thanks in advance.

-by MM on 4/1/2011 at 2:16 AM


A good use case usually fits on one page. A long use case might take two pages. I hope your technical team can manage that.

-by Alistair on 4/1/2011 at 4:45 AM


Hi Alistair,

Which of the following is a good way of writing use cases?

Option 1: Add Role, Edit Role, Delete Role
Option 2: Manage Role – and use alternative flows to represent the 3 different actions.

The email that I sent to you for the video subscription bounced. Can you please send the video to my email?

-by Ashok on 5/13/2011 at 8:10 AM


Hi Alistair,

Which of the following is a good way of writing use cases?

Option 1: Add Role, Edit Role, Delete Role
Option 2: Manage Role – and use alternative flows to represent the 3 different actions.

The email that I sent to you for the video subscription bounced. Can you please send the video to my email?

-by Ashok on 5/13/2011 at 8:51 AM


Hi Alistair,
Use case talk about a triggering event. If it’s not specified, would you agree with the following statement :
“A primary actor is using the system to achieve a goal by interacting with it. If no triggering event is specified, it can imply that the primary actor initial action is the trigger for this use case”.

Thanks

-by Guillaume on 5/25/2011 at 11:27 AM


yes.

-by Alistair on 5/25/2011 at 12:30 PM


“Preconditions” – Amount of information required

I am working on a use case where an Actor A performs Task 1. Inorder to perform Task 1 , Actor A needs a permission level of PL1.

I also have an alternate/extension flow where Actor A does not have the right permission level.

But, if I have a precondition saying Actor A has permission level of PL1, then there is no need for the alternate flow.

So what type and how much of information should be idenitified in preconditions of an use case?

-by villavan on 5/31/2011 at 3:16 PM


“Preconditions” – Amount of information required

I am working on a use case where an Actor A performs Task 1. Inorder to perform Task 1 , Actor A needs a permission level of PL1.

I also have an alternate/extension flow where Actor A does not have the right permission level.

But, if I have a precondition saying Actor A has permission level of PL1, then there is no need for the alternate flow.

So what type and how much of information should be idenitified in preconditions of an use case?

-by villavan on 5/31/2011 at 3:18 PM


In addition to my above question, if we have too much of information in the preconditions, then is there a good chance that important requirements might be assumed to exit in the SuD and can be overlooked?

Thanks.

-by villavan on 5/31/2011 at 3:34 PM


Yes – good point. I have often seen “use cases” with a rich template, and found major chunks of requirements scattered all through the template, making it almost impossible to work out what the system is really supposed to do. “Do” should be all in the UC body. Cheers, Alistair

-by Alistair on 5/31/2011 at 4:03 PM


Hi Alistair, Sometimes the SuD needs to perform a task like notify the user when the system completes a task. Can the SuD be the Actor itself?

-by rahul on 5/31/2011 at 6:14 PM


Alistair hello.

I have one problem. I have two roles in my UC model, Employee and Manager(Manager extends Employee). Manager can to create, update, delete tasks and assignments for employee. Employee only can to read those assignments and tasks. But, same thing holds for Manager too, he also can to read assignments and task which he created.

Should I split all that in separated use cases (for example “Read list of manager’s tasks”, “Read list of employee’s task”)? I ask this because those use cases are similar, but it tends to have different scenarios for different actor roles.

Please, sorry for my bad English.

-by jorvidias on 6/25/2011 at 5:59 PM

Try not to split the use cases. Either make the writing identical, if the behaviors are the same, or make the smaller alteration an extension. More use cases = more confusion (generally). Alistair

Thanks for answer Alistair.

Does that mean that i can to write alternatives in extensions by roles. For example, i write main scenario for Employee role, and in extension i write alternative for Manager role?

To be more precise, i have identical use case(Read list of assignments) for Employee and for Manager, but semantically they are different for each of roles. For Employee it means list of his assignments(duties), for Manager it means list of assignments which he assigned to some employee. Does it make sense to define two actors for use case(which is ok) and to define alternatives in the flow, by role, where appropriate?

-by jorvidias on 6/26/2011 at 7:49 AM

You could, and that would work, but I would first try to “make the writing identical, if the behaviors are the same”. More text = more confusion. Alistair


Hi Alistair,
I am stumped on how to express the following scenerio in a use case(s):

Actor will access a data mart in order to pull data from 7 different information areas within that data mart for the purposes of marketing research.

Are all 7 options seperate use cases or are they extensions of Use Case 1 “Access Data Mart”? I don’t see how this fits since as mentioned in your discussion, “access datamart” is not a user goal and will always be in scope. So we have 1 actor, 1 system, and 7 options in the system. Does this mean I have 7 use cases? They are all fairly similar in process but use different data.

Thank you!

-by bwhigh on 7/19/2011 at 3:32 PM


Hello Alistair,
First off, many thanks for all your inputs into the Use Case Writing.
Just wanted to know your perspective on the concept and usage of ‘Business Use Cases’- In the assignment i am involved in, it is decided to go with Business Use Case initially and then identify system use cases.
As far as system use cases are concerned there are number of conventions and practices to identify them.
What would you suggest as a ‘right level of detail’ to be covered in Business Use Cases?

-by Bijesh E B on 7/19/2011 at 3:32 PM


Hi Alistair…

I have a basic question. For complex use cases, we model the use cases in packages. How do we depict this packages in Top level uses cases. DO we show them ellipses or some other notation?
I searched through the web but did not get a consistent answer..

Hope you can answer with an example..

-by Abhi on 8/5/2011 at 3:19 AM


Alistair,
got a question about primary actors.

Can a use case have more than one primary actor?

I know that for scenarios where more than one primary actor can interact with a use case, you recommend writing somewhere in the use case specification, that actor A can also execute all use cases which Actor B interacts with.

But if I were to adopt a ‘pure’ UML approach where all Actors are actually roles, would your suggestion be permissible, or even necessary, given the chosen Primary Actor name is should encompass all users who interact with that use case?

Cheers

Raymond

-by Raymond on 8/15/2011 at 7:17 PM


_Hi, Raymond, see ._

-by Alistair on 8/19/2011 at 5:48 PM


Hi Alistar,

What is the rule regarding Use Case Activity scenarios?

can we use System – Actor – Actor – System or it has to be

System – Actor – System or

System – System – Actor

-by Aamir on 8/29/2011 at 11:48 PM


Does a Use Case always have to have a Pre conditon? A search initiated from a public web site for instance? The only functional pre condition I can come up with is that the user can read and type :-).The UML definition of the pre condition is that it is an OPTIONAL set of constraints that must be fullfilled when the behaviour is invoked but the template my client is using has a section for this and it looks weird with nothing in it….I do read and use your books and find them really good as they are just the right balance between the theory and practice and your approach emphasizes the fact that the Use Cases have to add value in the process of developing good and useful applications, otherwise what’s the point…Thank you.

-by Helena on 9/15/2011 at 11:08 PM


Hi Alistair,
Would you agree in making the following distinction between Primary and Secondary Actors :
A primary actor must match a Role (requires some thiking from the analyst and stakeholder in identifying roles)
A secondary actor can either be a Role or a System ; if a secondary actor is a system, it implies that the system we model takes a role (primary actor of the interacting system if an analysis has been carried out)
Thanks

-by Guillaume on 9/19/2011 at 9:52 AM


Hi Alistair,

Is there a definite way to name a use case? Do you consider it from the perspective of the primary actor or from a third party (looking at both the actor and the system)? Cos’ it seems that a wrongly named use case could lead to confusion over the primary and secondary actors.

For example, if a Customer makes a deposit at an ATM system, is the use case called Deposit Money or Accept Money?

Thanks!

-by YK on 9/25/2011 at 11:49 AM


Hi Alistair,

Is there a definite way to name a use case? Do you consider it from the perspective of the primary actor or from a third party (looking at both the actor and the system)? Cos’ it seems that a wrongly named use case could lead to confusion over the primary and secondary actors.

For example, if a Customer makes a deposit at an ATM system, is the use case called Deposit Money or Accept Money?

Thanks!

-by YK on 9/25/2011 at 8:14 PM


Surely it is up to you as business analyst – if you write a use case Accept Deposit then your primary actor is the entity accepting the deposit, I.e. ATM. The reverse applies if you write a use case Deposit Funds, customer is primary, everything else is secondary. Not confusing.

-by Pd on 11/29/2011 at 4:33 AM


Hi Alistair,

First, thanks for having this list and responding to it. It is very helpful for a newbie like me. I have a newbie question and can’t seem to find any info on it. The question is; What is the definition of a Usage Model in relation to Use Cases, and how are they used?

Thanks!

-by Nick on 1/2/2012 at 9:14 PM


hi, Nick – no idea, never heard of Usage Model. I’m guessing it’s UX thing; and so relates to the person – UI – system portion of a use case (omitting business rules and access to back end systems). That’s my guess. Alistair

-by Alistair on 1/3/2012 at 2:41 AM


Hi Alistair,

I am working with a client who has many systems that from a requirements perspective are poorly documented.

I want to use use cases for the purpose of conveying necessary changes to these systems, but do not have the luxury of creating all the complete use cases.

To what degree (and do you have any examples) should I document use cases to provide context in which to express change. Do you have any other advice to offer on this?

Thanks,
Phil

-by Phil on 1/3/2012 at 8:43 AM


just sketch the UCs loosely, write only the new steps & extensions carefully.

-by Alistair on 1/3/2012 at 1:21 PM


Hi Alistair,

I notice you mention that there should be only ONE primary actor for a use case. In the scenario where you may have more than one role who can initiate the use cases, how should we model this?

Should there be a generic role, and then use generalisation between actors?

-by Peter on 2/20/2012 at 6:32 AM


yes, just name the role. causes no problems.

-by Alistair on 2/20/2012 at 5:55 PM

Re: Everyone should be a methodologist

Alistair Cockburn -

This blog entry reminded myself of several errors, I (and my company) lately ran into. Thanks for putting these out.

-by Markus Gärtner on 10/26/2008 at 5:51 AM

I was surprised to see F.P. Brooks mention something that reminded me of “Tried Once (“Do what I did”)” while reading through “The Mythical Man Month”. He states in Chapter 5 – The Second System Effect, that one should be aware of architectures (obviously in computer building) that are implementing the second system. Replacing architecture with methodologist lead to somehow the same reasoning and when remembering that the book was written over 30 years ago, it’s quite amazing.

-by Markus Gärtner on 11/05/2008 at 3:10 PM

When I read this post I found this sentence very interesting and inspiring:

Methodology Success = Project delivered + Staff would do it again

Here some observations from the practices and reflections I made reading this book [1].

That sentence means that a methodology succeed when helps the team to accomplish the project and fulfill members needs.

The first interesting thing that I found is that accomplishing the project is not the only outcome of the team. Indeed when the project is finished the team could have increased their team-work effectiveness, have evolved the tools and technology used for accomplishing projects, have elaborated useful information and learned new things and generated new knowledge, have resolved conflicts influenced or attained consensus with other teams and departments within the company. Or the team could have decreased some of those things.

The other interesting thing is that the team and the methodology are not the only things that contribute to determine the success of the failure of the project. Also the project goal itself matter (i.e. it can be impossible to achieve) together with the tools and technology used and the available resources. Also the context matter, the environment within the team operate (i.e. the company culture, structure, rules, ...). And sometime the needs of the core group of the company can be more important of the team’s needs and of the project success itself [2] and in some case can cause the project failure.

Another observation that I found interesting is that sometimes “Staff would do it again” do not tell the whole story about the methodology success. For example it is possible to notice even in real life situations cases when someone want to continue to do something that is not beneficial for him, or someone want to stop something that is beneficial to him.

And finally something I have to remember correctly:

A methodology is the conventions the team agrees to follow.

So the success of the methodology here is intended as the success of the team applying that methodology. This does not automatically tell something about the methodology itself. For example a team could fail a project because it fundamentally misunderstood or badly practiced FDD in a way that compromise or reduce the chances of success. So it is about the team, not about the method FDD.

[1] Small groups as complex systems; H. Arrow, J.E. McGrath J.L Berdahl; Sage Publications; 2000
[2] Core group theory, Art Kleiner

-by Luca Minudel on 2/19/2012 at 6:51 PM

Hi, Luca, thanks. Try the reverse logic: “We can’t assert that the methodology was successful if the project didn’t deliver; we shouldn’t assert it if the team wouldn’t use it again.” That picks up other project failure causes and other team issues that you mention. Does that work for you? Thanks for the links to [1] and [2]. Alistair

-by Alistair on 2/20/2012 at 12:02 AM

Yes, that’s the idea.

The assumption is that the staff does not have dysfunctional dynamics that affect his judgment of “Staff would do it again” and the evaluation of what project delivered take into account properly also the other project outcomes.

-by Luca Minudel on 2/20/2012 at 6:14 AM

No, it’s simple logic. We are trying to learn whether used-Xmethodology (helps) project success, but we can’t observe that relationship directly. Suppose you want to assert that A is worth pursuing, be it methodology or the shape of chairs or anything. If the team fails, for whatever reason, then A may be good or bad, but that information gets lost in the noise, so you don’t learn anything about A. If the project delivers, then you learn that maybe A is part of that, but certainly not for sure. That the team fails tells you nothing about A, that the team succeeds does not yet imply A is good.

To decide that A is good, you have to have multiple successful projects where A shows up over and over; at that point only is there enough information to start subtracting out the other causes of success and start to assert that A is good.

Also, A may be good, in fact, but the team hates it (fear, whipping, tied to chairs, etc. come to mind). I met one of those teams. To go out and advertise that other teams should use A, as a responsible citizen interested in protecting the working lives of programmers, etc., I chose that the team had to also say that they would be willing to do it again. I did meet a team where they claimed success, but the team fought against the methodology the entire time. Even if the projec delivered successfully, I could not go out and say that the methodology was “successful”. The team would abandon it in a heartbeat.

In the first of the two constraints I set on myself, failure on the project causes so much noise as to obscure the role of the methodology. As you point out, the failure is due to many possible reasons. In the second of the two constraints, I strengthened it so that a negative would cancel out the apparent positive.

These are not strong constraints – it is, however, surprising how few projects/methodologies get past both constraints.

I think we’re in agreement. I hope the logic is clearer this time. Alistair

Points Are About Relative Effort Not Ranking

Mike Cohn's Blog -

I’m thinking of buying a new car. So I’ve put together a list of cars to consider. Here they are in priority order:

  • Bugatti Veyron Super Sports
  • Pagani Zonda Clinque Roadster
  • Lamborghini Reventon
  • McLaren F1
  • Koenigsegg CCX
  • Porsche Carrera GT
  • Aston Martin Vanquish
  • Toyota Prius
  • Toyota Camry
  • Tata Nano

Unfortunately, though, I’m not sure I can afford my top priority car. So let me put some points on each car. I’ll start with the least desirable car and put a 1 on it, a 2 on the next car, etc. That reorders our list so with points on each car we get:

  1. Tata Nano
  2. Toyota Camry
  3. Toyota Prius
  4. Aston Martin Vanquish
  5. Porsche Carrera GT
  6. Koenigsegg CCX
  7. McLaren F1
  8. Lamborghini Reventon
  9. Pagani Zonda Clinque Roadster
  10. Bugatti Veyron Super Sports

Now I think about my personal spending limits and I can spend between $25-$50k on a car. I’d like to be closer to $25k but a good salesman might get $40-50k out of me. Since the Tata Nano (at one point) goes for about $2500 that means I can afford between 10-20 points.

So, looking at the list again and the points assigned to each car, I think I’m going to buy a Bugatti (10 points), a Pagani (9) and a Tata (1 point). Unfortunately, when I show up at the Bugatti dealer, I am somewhat informed that the Veyron lists for $2,400,000.

What went wrong here?

The problem is that points are not a ranking. When we rank product backlog (or car backlog) items we use ordinal numbers (such as first, second, third). We cannot add ordinal numbers together. We cannot say that the distance between first and second is the same as from second to third. The Bugatti in this example is not ten times the cost of the Tata.

Ranking stories (or cars) like this is worthless. We want story points to instead reflect the relative effort involved. For cars we could put points on as follows:

Tato Nano 1 Toyota Camry 12 Toyota Prius 14 Aston Martin Vanquish 102 Porsche Carrera GT 193 Koenigsegg CCX 218 McLaren F1 388 Lamborghini Reventon 640 Pagani Zonda Clinque Roadster 740 Bugatti Veyron Super Sports 960

These points are of course based on the relative costs of these cars. I need to be able to do the math on these estimates that someone would want to do. Someone can afford 20 points on a car–which should they buy? Should I buy this item for 10 points or those other two for 5 points each? You can’t do that when points are assigned via a ranking.

Story points on an agile product backlog represent the effort to implement the backlog item. Since cost on most software projects is made up almost exclusively of labor (rather than buying parts), we can think of a story point estimate on the product backlog as being the cost, as in the car example here.

And, when I look at the relative costs here, I can tell I belong in the Toyota dealership rather than the Bugatti dealership.

The end of software engineering and the start of economic-cooperative gaming

Alistair Cockburn -

Humans and Technology Technical Report, HaT TR 2004.02, Jan 14, 2004

This paper was invited for the first issue of the ComSIS Journal, Computer Science and Information System (http://www.comsis.org), appearing in the Feb 2004 inaugural issue: (http://www.comsis.org/ComSIS/Volume01/InvitedPapers/AlistairCockburn.htm)

Abstract

“Software engineering” was introduced as a model for the field of software development in 1968. This paper reconsiders that model in the light of four decades of experience, and finds it lacking in its ability to explain project success and failures, predict important issues in running projects, and help practitioners formulate effective strategies on the fly.

An alternative underlying model for software development is described: Software development is a series of goal-directed, resource-limited, cooperative games of invention and communication. The primary goal of each game is the production and deployment of a software system; the residue of the game is a set of markers to assist the players of the next game. People use markers and props to remind, inspire and inform each other in getting to the next move in the game. The next game is an alteration of the system or the creation of a neighboring system. Each game therefore has as a secondary goal to create an advantageous position for the next game. Since each game is resource-limited, the primary and secondary goals compete for resources.

The cooperative-game model provides the benefits that the software engineering model misses: It raises to the proper priority level issues crucial to successful software projects; it explains how, historically, teams with messy-looking processes sometimes outperform others with tidier processes; and it helps busy practitioners decide how to respond to unexpected situations. Finally, it is seen that much of engineering in the general belongs in the category of resource-limited, cooperative games.

I. Introduction

Software development is not “naturally” a branch of engineering. It was proposed as being a branch of engineering in 1968 as a deliberate provocation intended to stir people to new action [Naur-Randell]. As a provocation, it succeeded. As a means for providing sound advice to busy practitioners, however, it cannot be considered a success. After 35 years of using this model, our field lacks a notable project success rate [Standish], we do not find a correlation between project success and use of tidy “engineering” development processes [Cockburn 2003a], and we do not find practitioners able to derive practical advice to pressing problems on live projects.

One might defend the software engineering model by asserting that this is due to our not yet doing enough “software engineering.” However, project debriefings show that some very messy-looking projects succeed quite nicely while many process-oriented projects fail quite badly. Opposites of both occur as well, making it difficult to see what does correlate with project success. Whatever does correlate with project success, it does not appear to be tidiness of the process, or the amount of “engineering” used [Cockburn 2000a, 2003a].

The term “software engineering” fails a crucial test, that of suggesting good actions to the busy practitioner. If told to “do more software-engineering” on their current projects, would project managers, executives, programmers and testers

  • produce similar interpretations of this phrase?
  • be correct with respect to what the term software engineering really calls for?
  • produce good advice for the project at hand?

When I ask people what it would mean for them to “do more software-engineering,” they usually return a blank look. The answer, when if comes, usually involves their doing more intense modeling of the system to establish a priori its correctness and verisimilitude (match to the real world), spending more time on estimation of cost and time, and in general looking to construct a software equivalent to mass-production manufacturing facilities. As discussed below, these are not actually what is called for in engineering at all, and worst of all, they are often not good strategies for leading the project to success.

The failure of the software engineering model leaves our field needing an underlying model that

  • explains why successful projects succeed and failing projects fail,
  • intrinsically names topics known to be important to project success, and
  • leads the person on a live project to derive sensible advice as to how to proceed.

In this paper, I describe a new model for software development: A series of resource-limited, goal-directed, cooperative games of invention and communication. The new model explains historical data, can be converted intuitively by people on projects into meaningful strategies, identifies a lexicon of terms that correlate well to project success and failure, and points to future topics of research for our field as well as pointing to what results to borrow from other fields.

The primary use of the new model is in creating strategies for managing software development. It creates space for, without completing, an adjunct model that should cover the thought processes of the designer-programmer while creating and manipulating the design and expression of the program. This adjunct model, which may derive from craftsmanship [McBreen], will have a natural fit into the framework created by the economic-cooperative game model.

The paper is structured in five sections:

Section II,Cooperative Games, breaks apart the terms in the cooperative game model, showing their relation to software development projects. The new model is presented first in order to highlight concepts that are important to have in view when reviewing the historical record.

Section III, Software Engineering, examines the origin of the term software engineering, discusses the failure of the term to either correlate to project success or to offer good advice to busy practitioners, and presents project experience reports that are anomalous to the software engineering lexicon but natural in the cooperative game lexicon.

Section IV, Engineering in Action, reexamines engineering itself, showing that if the term engineering were properly interpreted, then the term software engineering would have a very different connotation today. Engineering is seen also to be an economic-cooperative game of invention and communication. The poisoning of the term “engineering” after WWII can be seen to contribute to the failure of the term “software engineering.”

Section V, Future Research, looks at how the cooperative game lexicon points to research topics for our field.

Section VI. Summary, recapitulates the essential points of the paper.

II. Cooperative Games

Viewing software development as a “series of resource-limited, cooperative games of invention and communication” meets the objectives for an underlying model of our field:

  • It lets us make sense of historical successes and failures.
  • It names at the top priority level a set of topics that are known to be important to project success but do not normally have a place to live in discussions of software development, topics such as community, amicability, morale, talent, trust, proximity, and sufficiency.
  • It offers immediately usable advice to people busy on live projects.

Let us look at the core concepts arising from the model and how they relate to successful software projects.

Games, Cooperative Games, Series’ of Games

Although the Miriam-Webster dictionary defines game only as “an activity engaged in for diversion or amusement” [Webster], the term has grown considerably in scope over the last century. Some managers resist the idea of software development as any kind of ‘game’ because, as one manager retorted, “We are not here for amusement”. Managers obviously do not want frivolous, non-productive use of time on their projects, for reasons that will become more clear as we examine the economically overconstrained game that is software development. While fun generally is implicit in common uses of the term (and, indeed, it is a good thing to find people having fun on a project; see the discussion of morale below), “games” are no longer only about frivolous or non-productive activities.

The range of what currently falls into the category of games is so broad that it is very difficult to find something in common across all of them. Wittgenstein [1953] discusses _rule following_as essential to the concept, in that a ‘game’ ceases to exist at the moment the players decide to stop following its rules (a game is therefore a voluntary activity to the extent that the players have the choice to act in another way). Games consist of “moves” toward or away from some target, with some sort of measurement against the distance from the target.

Some games are solo, some are group-based. Some center around achieving a goal, while others center on interactions between the participants. Some only last minutes or seconds, while others last years, even lifetimes. In finding a home for software development, I find three categorizations of a game useful:

  • It may be finite or infinite in nature.
  • It may be competitive or cooperative.
  • It may be terminated after a goal is achieved (including time-termination of the game), or it may have no distinct endpoint (it just ends whenever it ends).

The purpose of an infinite game is to keep playing the game [Carse]. Individuals, organizations and countries play infinite games of survival. Individual people play the infinite game of managing their careers (so they may act to enhance their market value at the expense of the project). Government contractors arrange and rearrange staff on any one contract, possibly creating sub-optimal results for that contract, as moves in an infinite game of obtaining more contracts. It can be seen that these infinite games interfere with optimal play of a single project, and the project leaders have to contend with that interference as part of their project strategy.

Among _finite_games, some come to an end as soon as a goal is achieved, others come to an end just whenever they happen to stop. Within each category, some are competitive, others are cooperative. Tennis and chess are competitive, goal-terminating games. The children’s game “king of the hill” (fighting to defend the top of a hill from the other children) is competitive but not goal-terminated. The children keep playing after, and particularly after, one of them becomes the new king of the hill. They stop only when it gets too dark to continue or they are called in. Poker is similarly a competitive game with an arbitrary ending point. In the open-ended cooperative games category we find jazz music and dancing. In both these cases, people focus on the quality of their interactions and the group performance, and the game stays in play for as long as the people decide to keep going.

The category remaining is the _goal-terminated cooperative_game. In this category we find rock and mountain climbing, exploration expeditions of all sorts, and software development. The terminating goal for rock climbing is reaching the top of the cliff face; it is with respect to that that the team first evaluates its efforts. After that, they ask whether it was a good climb, or a pleasant one, or an interesting one. First and foremost, though, the team needs to complete the climb.

A software project has much in common with rock climbing. The primary goal is to deploy the system. It is with respect to this goal that the team is first evaluated. After that, one may ask whether it was a fun project, or well-run, or the program is aesthetic or maintainable. If the team does not deliver the software, however, the project is generally considered a failure. (Note: it is possible – and often a good idea – to abandon the game in the middle when detecting that the goal no longer worthwhile.)

One notable difference between software projects and rock-climbing is that software projects come in series and build upon each other in ways that climbing trips do not. In software, a team will alter the deployed system, or develop an adjacent system that interfaces with it.

Thus, unlike a rock-climbing trip, a software project has two goals:

  • To deliver the system;
  • To set up for the next game.

The full evaluation of the project therefore includes, first, whether the system was delivered, and second, to what extent an advantageous position was created for the next game.

These two goals compete for resources. The team can deliver the system more quickly if the system will not have to be extended in the future. (It can deliver the system much, much sooner if bugs will not have to be fixed!) Or, the team can set in place a better software architecture and more training and documentation for their successors at the expense of delaying or even preventing the current delivery.

Since project teams are limited in time, money, and people, it is not possible to perfect both goals. Most project teams are happy to achieve the first goal and any modicum of the second. Even project teams having extensive resources find the second goal to be is essentially unbounded in scope. In general, a team can at best hope to deliver an acceptable system in a named time-frame, with acceptable but imperfect preparation for the future games.

To understand the shift of strategies that occurs when working with games series’, let us construct another resource-limited cooperative game and examine it. Consider a race across an uncharted swampland in which some particular (unknown) artifact must be produced at some particular (unknown) place in the swamp. A team in this race would employ scouts and specialists of various sorts, and would create maps, route markings, bridges and so on. They racers would not, however, construct commercial quality maps, roads or bridges, since doing so would waste precious resources. Instead, they would estimate how much or little of a path must be cleared for themselves, how strong to build the bridge, how fancy of markings to make, how simple a map, in order to reach their goal in the shortest time.

If the race is run as part of a series, there will be new teammates coming after them to pick up the artifact and move it to a new place. The first team will therefore be well served to make slightly better paths, maps and bridges, always keeping in mind that doing this work competes with completing the current stage of the race. They also will be well served if they leave some people who understand the territory to be part of the next team. Thus, the optimal strategies for a series of races are different than for a single race.

There is no closed-form formula for winning the game. There are only strategies that are more useful in particular situations. That realization alone may be the strongest return for using the economic-cooperative game language: people on live projects see that they must use their minds at all times to observe the characteristics of the changing situation, to collect known strategies, to invent new strategies on the fly; and that since a perfect outcome is not possible in an overconstrained situation, they much choose which outcome to prioritize at the expense of which others.

Cooperating and Communicating

At its core, software development is people inventing and communicating,

  • solving a problem that they do not fully understand, which keeps changing underneath them,
  • creating a solution that they do not fully understand, which also keeps changing underneath them, and
  • expressing their thoughts in artificial and limited languages that they do not fully understand and that also keep changing underneath them, to an interpreter that is unforgiving of error,

where every choice has economic consequences, and resources are limited. Software development is a resource-limited, goal-directed, cooperative game, whose moves consist of invention and communication. The people, who are inventing, manipulating and communicating information across multiple heads, must share their information in order to produce the solution.

This means the speed of the project is proportional to the speed at which information moves between people’s heads. Every obstacle to detecting and moving information between heads slows the project. Understanding and attending to this issue is essential to playing the game effectively.

The following terms are elements of the cooperative game lexicon, and are concepts that help people both understand and steer projects:

  • Ability, a combination of talent and skills development. Raw talent provides the ability to invent better solutions or see patterns faster. People can increase their skills in an area according to their talent. The combination of talent with developed skills produces a person’s ability in an area. Teams with greater ability in key areas have the potential to do better (whether they actually will do so depends on their strategies, as well as issues of community, communication, and motivation).
  • Community, involving amicability, trust, morale and shared experience. Amicability is “the willingness to listen with good will.” As amicability decreases, people withhold information from each other or do not listen when provided information. Amicability is fed by trust and morale. Some people are initially trusting, and have high trust until they are hurt. Others are initially untrusting, and will only reach high trust after many demonstrations of competence and non-damaging behavior by the people around them. Their experiences as a group feed their ongoing trust, morale and amicability levels [Brown] [Tyler].
  • Communication, based on shared vocabulary, proximity, and communication technologies. The team members’ shared experiences give them not only a basis for trust, but also a vocabulary of references that they use to speed their communication. Communication involves not only deliberate but also accidental signaling of information, as comes from worried, happy, or relaxed body expressions. The closer people are physically, the more verbal and non-verbal cues they pick up from each other, which speeds the communication. As they move farther away, the greater the role of communication technologies in simulating proximity and the more inventive they have to be in using it (see, for example, [Herring]).
  • Individuals. With hundreds of thousands of software development specialists now in the world, statistical characteristics apply to general ability levels available. However, software development is an activity of building and passing along understanding, which is sensitive to the chemistry between individual pairs of people and within groups of people. Thus, on any one project, people operate and must be managed at the level of individuals. On any given day, they are individuals in action, as opposed to roles in action.

It is easy to think that “communicating a design” is nothing more than capturing its current shape in a particular descriptive format, such as the Unified Modeling Language. However, communication is not mere “transmission of information” [Maturana]. Communication, which may be thought of as “touching into a shared experience” with another person [Cockburn 2002a] takes forms that depends on the experiences shared between the individual people involved. People who have worked together before communicate through abbreviated references to previous designs and previous situations. Those with only a broad common understanding of algorithms and design patterns communicate more laboriously through references to those algorithms and design patterns. The remainder are reduced to using simple alphabetic documentation forms such as UML or comments in the code.

As Peter Naur showed in his discussion of “Programming as Theory Building” [Naur] what must be transferred is understanding, which is not conveyed through documentation languages and design snapshots, but is built internally by each person individually, based upon their previous knowledge. Conveying understanding is aided by showing what had been but got changed, what was rejected, and the rationales involved. This often requires direct dialogue between the people.

Since communication happens through every perceptible body movement of each participant, it happens faster when line-of-sight and multiple modalities of communication, such as gesturing, speaking, drawing, and moving, are available [McCarthy] [Cockburn 2002a]. Thus, in a resource-limited game of intensive communication, a superior strategy will often be to let people talk to each other in the same room, and photograph whiteboards or videotape their discussions, managing to be at once faster, richer, less expensive, and better suited to conveying understanding.

Interestingly, in playing this constantly shifting game, even contrary strategies do become appropriate on occasion; see for example the Cone of Silence strategy for an example of deliberately making communication more difficult [Cockburn 2003b].

Inventing

Invention is required at every level of the game. Users invent what they believe will prove useful in their future work, developers invent designs, testers invent tests for the system, managers invent overall project strategies for shifting situations.

Some work has been done on invention techniques: brainstorming techniques [Bordia], paper-based prototyping for user interface design [Ehn] [Snyder], CRC cards for object-oriented design [Beck], or simply discussing ideas at whiteboards, possibly using standardized design notations during discussions [Ambler]. There are some non-obvious factors in setting up invention environments, such as concealing the relative social status of the participants in order that ideas not be unduly promoted or tainted by knowledge of the suggestor’s social rank [Bordia] [Weisband] [Markus]. More research of this sort is needed.

During invention, people use specialized props and specific communication modes so that ideas in their minds become externally available for examination by themselves and others. That may call for informal props such as flipcharts, drawn timelines, index cards or sticky notes, or it may call for formal graphs, tables, and models. It is important to note that these items are transient: the value they provide is during the session. Archiving them for future use is a separate strategy in the economic game of communication. People often conflate these transient props with the more permanent markers used to remind or inform.

Props and Markers

A person may create a prop to help in making a move, or may create a marker for the next person (who might be him- or herself some time later). Each prop or marker has one of three functions and optimal forms:

  • To remind the participants of something they decided or discussed. This is communication to themselves in the future. Photographs of whiteboard discussions, rolled up flipchart drawings, napkins from restaurants and the like are very effective, not just because they are inexpensive, but also because the very imperfections in the materials serve to bring to mind the context of the earlier discussion. Obviously, the material conveys less information to people who were not present. Knowing that the purpose of these markers is only to remind themselves, the team can decide to use very rough and inexpensive markers for this purpose. Agile software development approaches [Highsmith] emphasize the use of these sorts of inexpensive reminder markers.
  • To inspire a new thought in the participants. This is the invention or exploration component. Tactile props, such as paper-based user interface prototypes [Snyder], CRC cards [Beck], brainstorming cards, even stuffed animals, are intended to stimulate new neural connections in the handler through the involvement of multiple modalities. Visual-analytical props, which include simulation outputs, graphs charts, specifications, and analytical or descriptive (UML-type) models allow the handler to examine and reflect on the state of their current understanding. Not intended for communicating across time, the results of the exploration session must be recast into a reminder form. Just which reminder form to cast them into is an economic decision. The team decides after each session for whom, for what purpose and how to retain the results.
  • To inform a newcomer. This marker in intended to bring the newcomer some distance toward the group’s total understanding of the situation. It is not possible to bring the person to a complete understanding of the situation [Naur] [Cockburn 2002a], so the economic decisions to be made are how much time to spend on constructing it and how much information to try to put into it. This is the most expensive marker, since the newcomers have the least amount of shared understanding with the rest of the team. The marker has to bring them from a more remote starting point, using a more generic set of references. The software engineering field has traditionally emphasized the informing category of marker, with an eye to allowing total staff changeover.

Markers include people as well as artifacts. The richest marker a team can leave in place for the next team is a person from the previous team, who can inform__the new participants in ways and with efficiencies that no artifact can match. For just this reason, it is a common strategy to leave some number of people from the former team in place for the next game. Without those people, informing the next team is generally too expensive and too slow for the economics of the next game.

The inevitable economic tension comes from the degradation of understanding that occurs with each change in team members, placed against the need to allow changeover of the team. Reminding markers are optimal as long as the same team stays in the game, informing markers are critical if there will be a drastic team change. Over the course of a few games, the organization may be able to keep the same team in place, but eventually, of course, there will be no one left from the original team. Thus, it is generally faulty strategy to use only reminding markers or only informing markers, only artifacts or only people as informing markers. The organization’s executives and the team have to choose between various imperfect solutions to this problem.

Team Evolution in the Game Series

Occasionally, a group of people works through the strengths and differences of the various individuals involved, and becomes a “jelled” team [DeMarco].

There are several reasons to keep jelled teams intact.

  • They have an internal memory of the paths taken, and so require much smaller set of reminding markers and very little in the way of informing markers, thus saving on marker-construction costs.
  • They have developed very rich shared experiences, so their communication is very much faster than another group.
  • Finally, they have sorted out their issues of community and trust, which each new team must work through as part of learning to work together.

It is tempting for the manager to split the team into pieces so that each person can “communicate” to other teams whatever it is that the team had learned. Doing this operates from the idea that one person can “seed” other teams or that it is possible to “graft” one piece of a team onto another, as one does with a tree or vine.

However, playing the analogy game, a jelled team is not so much like a plant as it is like a racehorse, all of whose parts have slowly been brought to optimal function. Transferring a person from one team to another is therefore more like cutting off one of the racehorse’s legs and grafting it onto a second horse. Experienced managers recognize that each group of people must work through their individual issues of personality and community themselves, in order to build their own communication pathways and shared experiences.

Maintaining a working team while introducing new people into it is a third overconstrained problem facing the manager. A manager might introduce new people onto the team in a slow stream, or according to the Progress Team / Training Team(alias_Day Care_) strategy [Cockburn 1998], so that each person can come to know the workings of the community without disrupting the others. Or the manager might use an apprenticeship model, such as pair programming [Williams] allowing efficient, person-to-person mechanisms to inform the new person about the project’s situation.

Sufficiency-in-Communication

Software development is resource-limited and overconstrained in several dimensions:

  • Delivering the system soon and inexpensively competes with creating an advantageous position for the next game.
  • Creating inexpensive markers competes with creating them to work for a wider range of new people.
  • Keeping the team intact competes with introducing new people.
  • Using a smaller number of highly qualified people (with lower communication costs) competes with using more people of more average capability.

A project is always off balance in one of these dimensions. While making maximum forward progress, the team reduces documentation or training; while bringing the documentation up to date or training new people, it reduces forward progress. The static equilibrium that is so often sought, is not possible. There is at best dynamic equilibrium, where each move corrects one out-of-balance quality by putting some other quality out of balance. The team is continually playing a game of brinkmanship with its resources, producing results that are adequate or sufficient with respect to their respective purposes.

The effective game player recognizes that a model or piece of documentation need not be complete, current or even correct to be useful. A reminding marker need only be sufficient to remind the recipients, a prop need only be sufficient to allow people to create an interesting next move, and an informing marker needs only to be sufficient to allow the new person to ask a good question or look at another informing marker. “Adequate” is a fine condition for a communication device if the team is in a race and short on resources.

The notion of sufficiency-in-communication allows us to explain the success of many projects that succeeded despite their “obviously” incomplete documents and sloppy processes (several examples are presented in the next section). They succeeded because people made good choices in stopping work on certain communications as soon as they reached sufficiency_,_ and before diminishing returns set in.

This is the second place where busy practitioners get usable advice from the cooperative game model. Weighing the cost of alternatives, people on live projects understand they must choose which activities to amplify and which to stop, given their current position and priorities. They shift their requests. They accept that design documents can be hints into the code, instead of up-to-date with the code They use the project plan for strategizing, rather than expecting it to always match the current state of the project. They ask the requirements gatherers to capture just enough information to communicate to the specific designers present on the project (as opposed to some idealized set of designers). They replace typing with faster communications, such as visits in person or short video clips. Above all, they make different choices depending on whether the designers are expert and sitting close by each other, or novice and working in different time zones, whether the system is likely to kill someone if it fails, or just cause inconvenience [Cockburn 2000b].

In theory, their choices will take into accountthe needs of both the current game and the following games. However, it often happens that the people making these decision are those accountable for delivering _this and only this_system. They naturally optimize for the current game at the expense of the succeeding game (which is a good strategy over a short number of games, but eventually self-destructive). The cooperative game model offers a response to this fallibility – in order to protect the interests of the succeeding games, a decision-maker should be present who both has a direct influence on the present game and a direct interest in the outcomes of the succeeding games. Whether such a person actually is present is just another aspect of playing the game well or poorly. The game concept does not prevent a group from playing poorly; it does provide an explanation of what constitutes better or worse play.

Economics and Games

Casting software development into the language of economically limited cooperative games brings into play fields of research not normally not associated with software development: economics and options theory. Some limited work has been done in viewing software decision-making through options trading and financial planning[Sullivan] [Denne] [Reinertsen] [Cockburn 2002b]. We might hope that informatics researchers can make some of this material relevant to practical project management; in raw form, the results are out of reach of the average practitioner. The body of economic theory targeting choice-making under imperfect circumstances is a promising but still untouched area waiting to be investigated in the context of developing software.

Precursors: Pelle Ehn’s Language Games

In 1988, Pelle Ehn built upon Wittgenstein’s notion of “language games” [Wittgenstein] to develop the idea of software development as a language-game itself [Ehn]. To Ehn, that ongoing language-game involves not only verbal communication, but also activity-based communication, specifically learning-by-doing and communicating-by-doing. Ehn describes software development as making moves in this language-game to evolve a common understanding of the forthcoming system. He discusses artifacts as markers, including both the final system as well as intermediary design artifacts as markers. He writes (his italics):

Every move in the language-game of designing is a local experiment, where the initial moves often must be reframed, as the changed situation most often deviates from the initial appreciation. . . . In the conversation with the materials of the situation, the designer can never make a move that has only intended implications. The design material is continually talking back to him. This causes him to apprehend unanticipated problems and potentials, which become the basis for further moves. (p. 230).

Artifacts can support both _communicative_and instrumental activities . . . toward other humans or towards ‘objects.’ (p. 162)

In the language-game of design we use these artifacts as reminders and paradigm cases for our reflections on future computer artifacts and their use. The use of design artifacts brings earlier experiences to out mind and it ‘bends’ our way of thinking of the past and the future. . . . this is how they ‘inform’ our practice. If they are good design artifacts, they support good moves within a specific design-language-game. (pp. 109-100)

... models of computer systems architecture, information system models, program specifications etc. . . . These kinds of artifacts support reflection. (p. 169)

. . . prototypes, mock-ups, scenarios with role playing, etc. . . . also allow for involved practical experience, not just detached reflections. . . . they can be used as reminders or paradigm cases . . of practical understanding. (p. 169)

Recognizing the impossibility of perfect communication between people, Ehn primarily focuses on the communication between developers and users of a system:

... paradoxical as it sounds, users and designers do not really have to understand each other in playing language-games of design-by-doing together. Participation in a language-game of design and the use of design artifacts can make constructive but different sense, to users and designers. (p. 118).

... it is hard to see how we as designers of computer artifacts for page make-up could manage to come up with useful designs without understanding how the knife is used or what counts as good layout. For this purpose, we had to have access to more than what can be stated as explicit propositional knowledge. This we could only achieve by at least to some extent participating in the language-games of use of the artifacts. (p. 116)

Hence, what designers (and users, I would like to add) do and know, to a great extent has to be experienced in practice, not for some romantic or mystical reason, but because it is literally indescribably in linguistic terms. (p. 214)

Ehn’s ideas are clearly source to, and an intrinsic part of the cooperative game concept described in this paper. However, even though he writes,

The rule-following behavior of being able to play together with others is more fundamental to a game than explicit regulative rules. Playing is interaction and cooperation (p. 106),

he does not develop the economics of the cooperative and group communicative aspects of the language-game, the fact that a team consists of multiple minds using multiple languages, all out of sync with each other. Not only does each move in the game involve multiple people, but there is an cost to pulling the minds closer (but never fully) together. Also missing is the notion of achieving a goal. The team is not simply “getting together to design” or to “build language”; the team is charged with producing something specific in a time-frame.

If we add three elements to Ehn’s language-game concept,

  • the goal-directedness of the assignment,
  • the economic constraints, and
  • minds separated by experience and distance,

we derive the economic-cooperative game model of this paper.

Cooperative Gaming at the 1968 NATO Conference

The term “software engineering” was coined for the 1968 NATO Conference on Software Engineering [Naur-Randell]. We look at their construction of the term in the next section, but it is useful here to extract from those proceedings a few sample quotes that illustrate to what extent they were already referencing the above concepts.. Here are sample statements from attendees at that conference, marked with terms from the lexicon:

Individuals: “I would never dare to quote on a project unless I knew the people who were to be involved.” (Fraser, p. 50)

Communication: “We could use more and better and faster communication in a software group as a partial substitute for a science of software production. We cannot define the interfaces, we do not really know what we’re doing, so we must get in a position where we can talk across the interfaces. (Buxton, p. 53) [Ed. note: compare with the description of talking across interfaces at Lockheed’s Skunk Works engineering facility, in Section IV]

Communication and communication technologies: “An attack on the problem of communication is crucial for successful production. We are not using automation (remote consoles, text editing, etc.) as much as we should.” (Gillette, p. 53)

Amicability: ”. . . if I’m setting up a software group to carry out a project I’m extremely careful that all the people working on it are close personal friends, because then they will talk together frequently, and there will be strong lines of communication in all directions. One in fact uses personal relationships to support technical communication.” (Buxton, p. 53)

Shared experience: ”. . . if I were suddenly to recruit you lot and form a rather good software house it would be excellent publicity, but it would not actually work. It certainly wouldn’t work at first, because you do not have a sufficient level of communication. One way to obtain this is by a commonality of experience. This is a major difficulty because it leads exactly to the point made by Buxton. It encourages you to work with your friends. But you have to remember that those who are incompetent find each other’s company congenial.” (D’Agapeyeff, p. 55)

Detecting information: “It is relatively easy to set up a communication system, manual or automatic, which will let me find information that I already realize I need to know. It is more difficult to make sure I also get information which I need, but of whose very existence I am ignorant.” (Randell, p. 55).

Detecting information: (An unintended response to Randell’s problem) *”*There was a fourth communications mechanism which every project has, and which perhaps does not get encouraged as much as it should be. There are certain people in any organization who are remarkably effective at passing gossip. Many of the potential troubles in a system can be brought into the open, or even solved, by encouraging a bit of gossip.” (Fraser, p. 55)

Strategies in unknown territory: “Only one thing seems to be clear just now. It is that program construction is not always a simple progression in which each act of assembly represents a distinct forward step and that the final product can be described simply as the sum of many sub-assemblies. (Fraser, p. 11)

III. Software Engineering

To understand the failure of the software engineering model and the need to replace it, we need to understand how that model originated, how it is failing, and what anomalies need explaining by the new model.

The 1968 NATO Conference and Software Engineering

The software engineering model came as a “provocative” action in chartering the 1968 NATO Software Engineering Conference [Naur-Randell]. In the words of the conference organizers:

1. BACKGROUND OF CONFERENCE

... In the Autumn of 1967 the Science Committee established a Study Group on Computer Science. The Study Group was given the task of assessing the entire field of computer science, and in particular, elaborating the suggestions of the Science Committee.

The Study Group concentrated on possible actions which would merit an international, rather than a national effort. In particular it focussed its attentions on the problems of software. In late 1967 the Study Group recommended the holding of a working conference on Software Engineering. The phrase ‘software engineering’ was deliberately chosen as being provocative, in implying the need for software manufacture to be based on the types of theoretical foundations and practical disciplines, that are traditional in the established branches of engineering. (p.8)

Despite having the term as a focal point for the conference, the participants showed little understanding of either the term “software engineering” or engineering in general, and provide little guidance as to just what readers are supposed to infer from the term “software engineering.” Alan Perlis’ keynote speech contains the following:

This is the first conference ever held on software engineering and it behooves us to take this conference quite seriously since it will likely set the tone of future work in this field in much the same way that Algol did. We should take quite seriously both the scientific and engineering components of software, but our concentration must be on the latter. (p.78)

Unfortunately, that is all he offers on the intention of the term. We pick from the following sentence the hint that making people interchangeable is a core part of its success criteria.

Stability in our goals, products and performances can only be achieved when accompanied by a sufficient supply of workers who are properly trained, motivated, and interchangeable. (Perlis, p. 79)

Ross offers the following thought on why software development is “engineering”:

I agree very strongly that our field is in the engineering domain, for the reason that our main purpose is to do something for somebody. (Ross, p.74)

Since all of volunteerism is about “doing something for somebody,” the above sentence does not advance our understanding much. We would not want for all volunteer activities to be brought inside the engineering discipline. It is possible that Ross was thinking of the dictionary definition of engineering (“the application of science and mathematics by which the properties of matter and the sources of energy in nature are made useful to man” [Webster]). However, that definition runs into a problem straight away, since programming is not about harnessing the “properties of matter” nor the “sources of energy in nature.”

David introduces the “utility” aspect of engineering:

Software engineering and computing engineering have an extremely important and nice aspect to them, namely that people want to work on things that meet other people’s needs. They are not interested in working on abstractions entirely, they want to have an impact on the world. This is the real strength of computing today, and it is the essence of engineering. (David, p.74)

David also worries about the direction that engineering education is taking:

Incidentally, I think that a lot of engineering education in the United States is stuck in the mud. (p. 74).

We shall see, in Section IV,“Historical Origins of the “Engineering Myth’,” why he might feel this way.

In short, the conference attendees were not asserting that software development is actually engineering (whatever that might mean), but rather, they presuppose that it will be fruitful to consider software development as engineering, for whatever benefits that might bring.

Their provocative phrase has had a good run of 35 years. It is quite reasonable that after this length of time we reconsider whether it really is the most appropriate and fruitful term to use for our practitioners’ activities.

Failure of “Software Engineering” in the Present Day

If the term they coined in 1968 had performed properly, we should be able to find after 35 years of use that

  • people in the industry have a similar interpretation for what the term intends;
  • the interpretation provides good advice on live projects; and
  • the correct application of the term correlates to more successful projects.

I find people using the term “engineering” to mean

  • building models [SEED],
  • looking up the answers in code books.
  • balancing design trade-offs in the face of conflicting demands.
  • predictable and repeatable methods and outcomes.
  • that a project runs like a modern factory with statistical controls.
  • “the application of science and mathematics by which the properties of matter and the sources of energy in nature are made useful to man” (Webster’s 1977).

The model-building interpretation was put in strongest form by Ivar Jacobson as “software development _is_model building” [Jacobson, public talks]. This view carries with it the implication that the more model building one is doing, the greater the completeness and verisimilitude of the model, the better a job one is performing. In this interpretation, lots of model building should correlate to project success. Experience runs to the contrary, however. One experienced designer raised the appropriate objection this way,

“I feel when I start modeling that I am doing something useful. However, after a time, I find that I am more fiddling with the model than making real progress, and it is never clear when I passed the point of diminishing returns. Nobody ever talks about when I should stop modeling.” (Colaizzi, private communication)

In other words, building models may be useful, but also may be counterproductive. How is a person to decide which? The term “software engineering” does not give a useful clue in the way that sufficiency-in-communication does.

Several of the interpretations of the term “engineering” confuse the activity of doing engineering with the results after having done engineering. People often mean, “Make software development more like running a factory, with statistical quality controls.” However, running the factory is not the act of doing engineering, it is what comes after the engineering activity is finished. Designing the plant was the act of doing engineering, and it was a creative act, fundamentally non-repeatable and very sensitive to the characteristics of the people doing the work.

Nor is the dictionary definition useful. Converted to verb form, it advises us to “apply more of science and mathematics.” Indeed, it is clear that a portion of software development depends on mathematics, and early efforts in software engineering did usefully revolve around maximizing the contribution of mathematics to solve programming problems. This work led to efficient algorithms for searching, sorting, encryption, distributed control and compiler generation among others. The mistake lies in thinking that software development is mostly mathematics. It may well be that the role of mathematics in software development has passed its peak.

The phrase, “do more software-engineering,” besides generating confusion, seems mostly to generate guilt. People are sure they have not done enough of something, without being clear as to what that something is. This notion of guilt was vividly illustrated in a recent interview with a programmer I’ll call NJ, one of two programmers in a four-person company. He asked me for help in discovering what they needed to do more of in their development methodology. Here is an approximate transcript of our discussion:

NJ: I think we’re not doing enough of something, but I do not know what.
AC: Are you getting software out every few weeks or each month?
NJ: Yes.
AC: How are the bugs – are the bug counts high?
NJ: No, they’re fine.
AC: What about the company owners – are they happy with the rate of progress and what they see being delivered?
NJ: Yes.
AC: Are there any particular problems that you can see now, or in the near future, either with the software, its quality, or the documentation you have for it?
NJ: No.
AC: If there is nothing wrong with the way you are working, why are you asking for something to change?
NJ: It just seems too simple. I feel like we should be doing something more, and I thought you could tell us what we’re not doing enough of.

We as a community do not know what the term “software engineering” means after 35 years. Without that common understanding, it is of course hard to get people to do more of it.

Nor has project success become standard over the years, despite 35 years, establishment of “software engineering” as a valid university curriculum around the world, and the creation of the Software Engineering Institute. The Standish Report of 2003 indicates a success rate of only 34% of projects, with 15% outright failures and 51% of project in what they consider the “challenged” state [Standish]. In my own comparisons of projects [Cockburn 2000a, Cockburn 2003a], I found that

  • almost any process can be made to work on some project;
  • any process can manage to fail on some project;
  • heavy processes can be successful,
  • light processes are more often successful, and more importantly, the people on those projects credit the success to the lightness of the process.

The software engineering model does not predict the high success rate of lightweight (low-ceremony) process and the low success of very-high-ceremony process. Obviously, poor management is a non-methodological factor of greatest significance, but even normalizing for that does not give meaningful predictions.

Explaining Anomalies

Many experienced developers are not surprised by the above results. It is exactly that lack of surprise that deserves investigation. What is the experienced developer looking at to gauge the likelihood of success of any given project, if not similarity to “engineering”?

In 1991, I began interviewing and debriefing project teams as part of constructing a new methodology for the IBM Consulting Group. In each interview, I asked people at several different levels of control (project manager and programmer, for example) what they had done, what they thought worked well for them, what they would do differently, and what their priorities were [Cockburn 1998, Cockburn 2003a]. What caught me most by surprise was that they did not talk much about the subjects I had expected them to, particularly modeling tools, and modeling in general. In fact, those tended to be the items they put lowest on the list of priorities [Cockburn 1998, pp. 62-63].

Instead, I encountered sentences that did not make any sense to me at the time I wrote them down. One successful leader said:

“Give me a maximum of four people working in one big room, and access to our users and we’ll deliver software to them every month or two. That’s all I need. If you make me have more people, I could use eight people in two rooms. But not more.”

It is tempting to suggest that this person is not a competent manager, being unable to work with more than eight people. But that is not what he is expressing. He is describing what does work, at least for him.

Another sentence that took a long time for me to notice, was the reference to pride-in-work:

“I mean, it works. It’s not broken. But it’s not as though I drive home feeling proud of the work I’ve done during the day.”

However, the sentence that kept showing up and eluded my understanding was this one:

“At key moments, a few key people stepped in and did whatever was needed.”

I could not find a satisfactory way to understand this. Was it heroism in a form that signaled poor project management? Why did so many successful project teams refer to it with pride instead of embarrassment? Should it be stamped out, or harnessed? The “software engineering” modeldid not provide any advice here.

These sorts of anomalies show up in the oldest case studies. In the late 1960s, Gerald Weinberg described the negative effects of removing a bank of vending machines. Note how his, and the other excerpts in this section, are naturally matched by the cooperative game lexicon:

[At] at large university computing center . . . a large common space was provided near the return window, so that the students and other users could work on their programming problems. In the adjoining room, the center provided a consulting service for difficult problems, staffed by two graduate assistants.

At one end of the common room was a collection of vending machines . . . the noise from the revelers congregating at the machines often became more than some of the workers could bear. . . . [The computing center manager] went to investigate their complaint. . . . Without more than fifteen seconds of observation he went back to his office and inaugurated action to have the machines removed to some remote spot.

The week after the machines had been removed––and signs urging quiet had been posted all around––the manager received another delegation. . . . They had come to complain about the lack of consulting service; and, indeed, when he went to look for himself, he saw two long lines extending out of the consulting room into the common room. He spoke to the consultants to ask them why they were suddenly so slow in servicing their clients . . . For some reason, they said, there were just a lot more people needing advice than there used to be.

The manager spent two weeks checking for a possible source of the increased load, but all courses and other users were carrying on normally. . . . After some time, he discovered the source of the problem. It was the vending machines!

When the vending machines had been in the common room, a large crowd always hovered around them––but not necessarily for fol-de-rol, as the manager had so quickly assumed. True, they were drinking coffee and chatting, but they were chatting about their programs. . . . Since most of the student problems were similar, the chances were very high that he could find someone who knew what was wrong with his program right there at the vending machines. Through this informal organization, the formal consulting mechanism was shunted, and its load was reduced to a level it could reasonably handle. ([Weinberg], pp. 49-50)

Dee Hock describes how the first VISA credit card clearing system was developed by a group of people who did not seem to have the qualifications to do the job and used a spectacularly messy process:

We decided to become our own prime contractor, farming out selected tasks to a variety of software developers and then coordinating and implementing results. Conventional wisdom held it to be one of the worst possible ways to build computerized communications systems.

We rented cheap space in a suburban building and dispensed with leasehold improvements in favor of medical curtains on rolling frames for the limited spatial separation required. ...

Swiftly, self-organization emerged. An entire wall became a pinboard with every remaining day calendared across the top. Someone grabbed an unwashed coffee cup and suspended it on a long piece of string pinned to the current date. Every element of work to be done was listed on a scrap of paper with the required completion date and name of the person who had accepted the work. Anyone could revise the elements, adding tasks or revising dates, provided that they coordinated with others affected. Everyone, at any time, could see the picture emerge and evolve. They could see how the whole depended on their work and how their work was connected to every other part of the effort. Groups constantly assembled in front of the board as need and inclination arose, discussing and deciding in continuous flow and then dissolving as needs were met. As each task was completed, its scrap of paper would be removed. Each day, the cup and string moved inexorably ahead.

Every day, every scrap of paper that fell behind the grimy string would find an eager group of volunteers to undertake the work required to remove it. To be able to get one’s own work done and help another became a sought-after privilege. Nor did anyone feel beggared by accepting help. Such Herculean effort meant that at any time, anyone’s task could fall behind and emerge on the wrong side of the string.

Leaders spontaneously emerged and reemerged, none in control, but all in order. Ingenuity exploded. Individuality and diversity flourished. People astonished themselves at what they could accomplish and were amazed at the suppressed talents that emerged in others.

Position became meaningless. Power over others became meaningless. Time became meaningless. Excitement about doing the impossible increased, and a community based on purpose, principle, and people arose. Individuality, self-worth, ingenuity, and creativity flourished; and as they did, so did the sense of belonging to something larger than self, something beyond immediate gain and monetary gratification.

No one ever forgot the joy of bringing to work the wholeness of mind, body, and spirit; discovering in the process that such wholeness is impossible without inseparable connection with the others in the larger purpose of community effort. Money was a small part of what happened. The effort was fueled by a spontaneous expansion of the nonmonetary exchange of value. ...

No one ever replaced the dirty string and no one washed the cup. ... The BASE-1 system came up on time, under budget, and exceeded all operating objectives.” ([Hock], p. 205-207)

The standard software engineering lexicon would predict that this project should have been a disaster. In the cooperative game lexicon, however, it is clear that these people capitalized on the key factors of rapid communication, cooperation, trust, community, and pride-in-work.

The 1968 NATO conference itself is so rich with anomalies that question the engineering lexicon and support the cooperative game lexicon that I cannot include them all. Here are a representative set:

Fraser: “Design and implementation proceeded in a number of stages. . . . Each stage produced a useable product and the period between the end of one stage and the start of the next provided the operational experience upon which the next design was based. . . . The first stage did not terminate with a useable object program but the process of implementation yielded the information that a major design change would result in a superior and less expensive final product. During the second stage the entire system was reconstructed; an act that was fully justified by subsequent experience.. . . The final major design change arose out of observing the slow but steady escalation of complexity in one area of the system.” (pp. 11-12)

Smith: I’m still bemused by the way they attempt to build software. . . . All documents associated with software are classified as engineering drawings. They begin with planning specification, go through functional specifications, implementation specifications, etc., etc. This activity is represented by a PERT chart with many nodes. If you look down the PERT chart you discover that all the nodes on it up until the last one produce nothing but paper. It is unfortunately true that in my organisation people confuse the menu with the meal. (p. 52)

Kinslow: The design process is an iterative one. I will tell you one thing which can go wrong with it if you are not in the laboratory. In my terms design consists of:

:: 1. Flowchart until you think you understand the problem.
:: 2. Write code until you realize that you do not.
:: 3. Go back and re-do the flowchart.
:: 4. Write some more code and iterate to what you feel is the correct solution.__(p. 21)

Ross: The most deadly thing in software is the concept, which almost universally seems to be followed, that you are going to specify what you are going to do, and then do it. And that is where most of our troubles come from. (p .21)

Perlis: A man can communicate with about five colleagues on a software project without too much difficulty. Likewise he can supervise about five people and know pretty well what they are doing. One would structure 120 people in three levels, in which no man is talking to more than about eight people, both across his level and up and down . . . (p. 51)

Opler: I think I know how to organise reasonably successful communication for projects of between 10 and 50 people. . . . every member of the staff receives a three-ring binder and perhaps half-a-dozen pages stating the very first decisions and ground rules for the project, including an index. As the project proceeds everybody contributes sheets, which must be countersigned by their management. . . . This had interesting side-effects. I noticed that one part of the book was not filling in very fast — this led to early discovery of a worker who was lagging behind, and who eventually had to be dismissed. (p. 55)

Fraser: The question of what methods should be used for organising information flow between members of a production team depends largely on the size of the team.
I was associated with a 30-man project . . . We had three, or rather four, forms of information flow. The first was based on the fact that the compiler was written in a high-level language and hence provided, in part, its own documentation. The second form of information flow was based on documentation kept in a random access device which was regularly accessed by every member of the team. This was a steel filing cabinet kept in my office. . . . This was probably the most important form of communication we had. Its merits were that there was only one set of authoritative information, and that the indexing scheme, albeit crude, was sufficient to allow one to find, in most cases, the relevant information when you needed to make a decision. . . .
There was a fourth communications mechanism which every project has, and which perhaps does not get encouraged as much as it should be_._There are certain people in any organization who are remarkably effective at passing gossip. Many of the potential troubles in a system can be brought into the open, or even solved, by encouraging a bit of gossip. (p. 55)

Even in 1999 we find the same issues in play. Here is an excerpt from a team working at the top level of the Software Engineering Institute’s Capability Maturity Model. Note the importance given to issues of trust, communication, pride-in-work and personal, individual interactions:

. . . To be most effective, engineers must be motivated and energetic; they need to be creative and concerned about the quality of their products, and they should enjoy their work and be personally committed to its success. This can only be achieved if management trusts the engineers to work effectively and the engineers trust their management to guide and support them. . . . Management also needs to ensure that the engineers consistently follow disciplined methods and that the teams do not develop interpersonal problems. [Webb]

IV. Engineering in Action

The previous section raised the question of what professionals do while they are doing engineering and why people do not automatically think of craft and cooperation issues with respect to the term. In this section we look at the degradation of the term “engineering” in the last half century, and consider its more appropriate constituent parts.

Historical Origins of the “Engineering” Myth

Engineering once incorporated craft as an aspect, but lost it following WWII, as discipline envy flowed from applied physics to engineering and thence to software development. Schön recounts:

After World War II, in the glow of engineering triumphs which would have been impossible without the contributions of physics, and later on under the shadow of Sputnik, the advocates of engineering science had succeeded in transforming the engineering curriculum into an education in applied physics. By the late 1960s, however, leading practitioners and educators were beginning to have second thoughts. Harvey Brooks, the dean of the Harvard engineering program was among the first to point out the weakness of an image of engineering based exclusively on engineering science. In his 1967 article, “Dilemmas of Engineering Education,” he described the predicament of the practicing engineer who is expected to bridge the gap between a rapidly changing body of knowledge and the rapidly changing expectations of society. The resulting demand for adaptability, Brooks thought, required an art of engineering. The scientizing of the engineering schools had been intended to move engineering from art to science.
Aided by the enormous public support for science in the period 1953-1967, the engineering schools had placed their bets on an engineering science oriented to “the possibility of the new” rather than to the “design capability” of making something useful . . . Practicing engineers are no longer powerful role models when the professors of highest status are engineering scientists. . . . by 1967 engineering design had virtually disappeared from the curriculum, and the question of the relationship between science and art was no longer alive. . . . (pp. 171-172)

The result of this inflation of the infallibility of mathematical prediction was that people started expecting things made of “engineering” – and by implication, software development – to be predictable in cost, time and quality. However, even practitioners of the oldest field of engineering, civil engineering, fail in the same way as the average software developer when put in a similar situation. The project to build a highway under the city of Boston, to take one example, was estimated in 1983 as costing $2.2 Billion and being completed in 1995. At the time of this writing in 2003, it is scheduled for completion in 2005 at an approximate cost of $14.6 Billion [Cerasoli] [Chase]. The cost overrun is ascribed to the fact that it is larger than previous projects of this sort, and employs new and untried technologies. Martin Fowler quips [public talk], “Compared to civil engineers, software developers are rank amateurs at cost overruns”.

Popular expectations for engineering are faulty because the popular understanding of engineering-as-an-activity is itself faulty. If we reframe engineering as another entry in the economic-cooperative game category, along with framing laws and constitutions, the difficulty in accurately predicting the trajectories of engineering projects becomes more understandable. Predicting those is in the same category as predicting the time and cost for lawmakers to frame a new law or constitution (or any other activity in the economic-cooperative game category).

Doing Engineering

“Doing engineering” involves doing direct work in a situation, reflecting on the lessons learned in doing that work, and generating theories local to the problem at hand.

In The Reflective Practitioner, Donald Schön (1983) considers a key aspect of professional practice to be the engagement in a “reflective conversation with the situation.” Schön gives examples of both novice and experienced engineers gaining intimate knowledge of materials, actions and consequences, setting those next to their personal theories about the problems and solutions encountered to construct their next actions. Schön’s observations are incorporated in Pelle Ehn’s description of the language-game of development: “In the conversation with the materials of the situation, the designer can never make a move that has only intended implications. The design material is continually talking back to him. This causes him to apprehend unanticipated problems and potentials, which become the basis for further moves.” [Ehn, p. 230]

The leader of Lockheed’s famed “Skunk Works” facility harnessed rather than fought the need for guessing, experimentation, feedback and communication that are crucial to effective engineering. Kelly insisted on people sitting close together and taking accountability for decisions all the way from design to testing [Rich]. This can be seen both as effective “reflective conversation with the situation” and as effective play in a resource-limited cooperative game of invention and communication:

Kelly kept those of us working on his airplane jammed together in one corner of our [building]... My three-man thermodynamics and propulsion group now shared space with the performance and stability-control people. Through a connecting door was the eight-man structures group. ... Henry and I could have reached through the doorway and shaken hands. . . .

I was separated by a connecting doorway from the office of four structures guys, who configured the strength, loads, and weight of the airplane from preliminary design sketches. ... The aerodynamics group in my office began talking through the open door to the structures bunch about calculations on the center of pressures on the fuselage, when suddenly I got the idea of unhinging the door between us, laying the door between a couple of desks, tacking onto it a long sheet of paper, and having all of us join in designing the optimum final design. ... It took us a day and a half. ...”

All that mattered to him was our proximity to the production floor: A stone’s throw was too far away; he wanted us only steps away from the shop workers, to make quick structural or parts changes or answer any of their questions.

The similarities in team set up between Kelley’s expert group and Dee Hock’s _ad hoc_group are not accidental, but essential to accomplishing the group assignment [Allen]. Contrast Kelley’s and Schön’s understanding of engineering with that proposed by the 1968 NATO conference attendees:

Today we tend to go on for years, with tremendous investments to find that the system, which was not well understood to start with, does not work as anticipated. We build systems like the Wright brothers built airplanes — build the whole thing, push it off the cliff, let it crash, and start over again. (Graham, p. 12)

If we investigate the Wrights’ methods, we find, quite to the contrary, that they practiced engineering in the best sense, namely, reflective conversation with the situation, using guesses, experiment, theory, and, of course, feedback. Their own account reads as follows [Wright]:

In order to satisfy our minds as to whether the failure of the 1900 machine to lift according to our calculations was due to the shape of the wings or to an error in the Lilienthal tables, we undertook a number of experiments to determine the comparative lifting qualities of planes as compared with curved surfaces and the relative value of curved surfaces having different depths of curvature. . . . In September we set up a small wind tunnel in which we made a number of measurements. . . but still they were not entirely satisfactory. We immediately set about designing and constructing another apparatus from which we hope to secure much more accurate measurements. . . . we made thousands of measurements of the lift, and the ratio of the lift to the drift with these two instruments. (pp.15-18)

Engineering as a Cooperative Game

Much of “doing engineering,” along with doing research, and developing software, is playing a goal-directed and resource-limited cooperative game of invention and communication. Thomas J. Allen of MIT researched and documented the essential role of proximity and communication in research and development organizations in the 1970s [Allen]. He found, as Kelly’s Skunk Works team and other researchers, engineers and software developers find, that the energy and time expended in detecting and transferring ideas between minds is a key factor in the team’s progress. Proximity, accountability, morale, community and trust are aspects of reducing delay in detecting and transferring ideas. Rapid feedback across the total process is part of Schön’s “reflective conversation with the situation.”

We could attempt to bring the world back to a pre-WWII appreciation of the craft elements of engineering.

! See, for example,
:: Foundations for software engineering (discussion: Re: Foundations for Software Engineering),
:: Designing an incremental-iterative one-semester, undergraduate course in software engineering, and
:: the book/course series Software engineering in the 21st century.
(There’s also a talk on these topics that I haven’t yet uploaded.)

Even if we managed that, though, we would still not address a primary desiderata for an underlying model for our field: to evoke a reaction in busy practitioners to attend to community, cooperation, amicability, trust and sufficiency-in-communication. The cooperative game vocabulary does that.

V. Future research

The cooperative game model indicates several areas of research. The first centers around people’s abilities to create software:

  • the mechanics and economics of inventing,
  • the mechanics and economics of communicating over various media for various purposes, including optimal occasions to avoid using face-to-face communication,
  • how and why people cooperate,
  • what affects trust and pride,
  • what affects morale.

A second area of research centers around theories of decision making with bounded rationality and imperfect communication. A third area centers around project funding, perhaps borrowing from venture capital financing and strategies for options trading.

One caution is called for here. There is an old story about a man looking for his wallet at night under a lamp post. When a passer-by stops to help and asks him where he lost it, he points into the darkness and replies, “Over there somewhere.” The passer-by asks, “But then why are you looking for it over here?” The man replies, “Because the light is better here.” When suggesting research for our field, I often hear the response. “We do not research people issues because we are computer scientists. It is not that these topics are irrelevant, but they aren’t for us.” These speakers are comfortable under their lampposts and do not wish to venture into the darkness.

However, we work in the arena of software development, and so it is incumbent on us to learn how to do a better job at creating software. If we must learn something about people to accomplish that, then indeed, we must learn something about people. We needn’t learn everything about people, only those things surrounding invention and communication on cooperative games. That will, of course, include motivation, reward, fear, trust, amicability, pride, ego, community, modalities in communication, and solo and group idea creation.

It may well be that we will do as we have done in the past with other areas of enquiry, and learn things that other specialists do not know. It may be that we will incorporate into our field knowledge from other fields, as we have done in the past with fair success. Whichever way it goes, it is thoroughly part of our job to learn more about the active component in our arena: people.

VI. Summary

When “software engineering” was introduced in 1968 as a model for the field of software development, it was introduced as a provocation rather than as a model deduced from experience [Naur-Randell]. This paper reconsidered the model in the light of four decades of experience, and found the model lacking in four respects:

  • The model does not intrinsically generate topics known to be important to project success, topics such as talent and skill, team cohesion and interpersonal communication [Boehm].
  • The model fails to explain the historical record of successful and failing projects [Cockburn 2003a]. In particular, it fails to explain the success of so many low-ceremony, even sloppy-looking projects, and the declared preference of experienced, successful developers with those processes.
  • After 35 years of use, different people still interpret the term in very different ways, leading to conflicting recommendations for behavior on projects.
  • The term, and the model, do not lead practitioners on live projects to derive effective advice as to how to proceed.

This paper introduced a new model:

Software development is a series of resource-limited, goal-directed, cooperative games of invention and communication. The primary goal of each game is the production and deployment of a software system. The residue of the game is a set of markers to assist the players of the next game. People use markers and props to remind, inspire and inform each other in getting to the next move in the game. The successor game is an alteration of the system or the creation of a neighboring system, and so each game has as a secondary goal to create an advantageous position for the next game. The primary and secondary goals compete for resources in a resource-limited situation.

This model intrinsically names issues known to be important to project success: cooperation, communication, cost-of-, rate-of-, and sufficiency-in-communication. It quickly hints at other relevant issues: individual talent and skill, relations between people-as-individuals in pairs and in groups, the value of retaining jelled teams, the diminishing returns with extended modeling and documentation, and the importance of learning and applying different strategies for different circumstances.

With those topics brought to the fore, the new model was shown to fit project experience reports from untrained groups in the 1960s and 1970s up through a CMM Level-5 organization in 1999. Practitioners on live projects find the model useful because it illuminates the key issues and the trade-offs they have to deal with in their overconstrained situations.

The model introduces the possibility of usefully borrowing results from other fields to help in creating project management strategies. Economic theory, theories of decision-making with bounded information, and options trading seem particularly relevant.

A brief retrospective of engineering in the general sense indicated that much of engineering also belongs to the category of resource-limited, goal-directed, cooperative games of invention and communication.

The economic-cooperative game model serves primarily in building project strategies. It model does not capture the thought processes of the designer-programmer while creating and manipulating the design and expression of the program. An adjunct model, picking up aspects of a mental craft, needs to be added. This adjunct model will want to incorporate Peter Naur’s consideration of programming as “theory building,” Donald Schön’s idea of “reflective conversation with a situation,” and the issues of efficiency, manipulability and aesthetics of the program [Coplien]. The adjunct model will be subject to and have a natural fit with the economic-cooperative game model.

References
  1. Allen, T., Managing the Flow of Technology, MIT Press, 1984.
  2. Ambler, S., Agile Modeling, John Wiley & Sons, 2002.
  3. Beck, K., Cunningham, W., “A laboratory for teaching object-oriented thinking,” _ACM SIGLPLAN_24(10):1-7, 1989.
  4. Bordia, P., Prashant, K., “Face-to-face versus computer-mediated communications: A synthesis of the literature”, The Journal of Business Communication 34(1),U of Illinois, Champaign, IL, Jan 1997, pp. 99-120.
  5. Boehm, B., Software Cost Estimation with COCOMO II, Prentice Hall PTR, 2000.
  6. Brown, K., Klastorin, T. & Valluzzi J., “Project Performance and the Liability of Group Harmony,” IEEE Transactions On Engineering Management, 37(2), May 1990, pp. 117-125.
  7. Carse, J., Finite and Infinite Games, Ballantine Books, 1987.
  8. Cerasoli, R., Office of the Inspector General, Commonwealth of Massachusetts, “A History of Central Artery/Tunnel Project Finances 1994 – 2001: Report to the Treasurer of the Commonwealth”, available online at http://www.state.ma.us/ig/publ/cat01rpt.pdf.
  9. Chase, T., “Revelation 13: The Big Dig” http://www.revelation13.net/bigdig.html
  10. Cockburn, A. [1998], Surviving Object-Oriented Projects, Addison-Wesley, 1998.
  11. Cockburn, A. [2000a], “Characterizing People as Non-Linear, First-Order Components in Software Development”, 4th International Multiconference on Systemics, Cybernetics, and Informatics, Orlando, FL, July, 2000. Online as Humans and Technology Technical Report, TR 99.05, at <a href="http://alistair.cockburn.us/" target="_blank">http://alistair.cockburn.us/</a> crystal/articles/cpanfocisd/characterizingpeopleasnonlinear.html.
  12. Cockburn, A. [2000b] “Selecting a Project’s Methodology”, IEEE Software, 17(4), July/Aug 2000, pp.64-71.
  13. Cockburn, A. [2001], “The Expert-in-Earshot Project Management Pattern”, in Succi, G., Marchesi, M., Extreme Programming Examined, Addison-Wesley, Boston, MA, 2001, pp. 245-247.
  14. Cockburn, A. [2002a], Agile Software Development, Addison-Wesley, 2002.
  15. Cockburn, A. [2002b], “Learning from Agile Development, Part 1,” in _CrossTalk: The Journal of Defense Software Engineering,_October, 2002, pp. 10-14
  16. Cockburn, A. [2003a], People and Methodologies in Software Development, Dr. Philos. dissertation, Faculty of Mathematics and Natural Sciences dissertation no. 264, University of Oslo, 2003, online at <a href="http://alistair.cockburn.us/htdocs/crystal/books/pamisd/peopleandmethodologiesinsoftwaredevelopment.pdf" target="_blank">http://alistair.cockburn.us/htdocs/crystal/books/pamisd/peopleandmethodologiesinsoftwaredevelopment.pdf</a>.
  17. Cockburn, A. [2003b], “The ‘Cone of Silence’ and Related Project Management Strategies,” Humans and Technology Technical Report 2003.01, online at http://alistair.cockburn/crystal/articles/cos/coneofsilence.htm.
  18. Coplien, J., “Software Development as Science, Art and Engineering.” In Rising, L, ed., The Patterns Handbook: Techniques, Strategies, and Applications, pp. 321-332. Cambridge University Press, New York, January 1998.
  19. DeMarco, T., Lister, T., Peopleware: Productive Projects and Teams, 2nd Ed., Dorset House, 1999.
  20. Denne, M., Cleland-Huang, J., _Software blank">by Numbers: Low-Risk, High-Return Development Prentice Hall PTR, 2003.
  21. Ehn, P., Work-Oriented Development of Software Artifacts, Arbetslivscentrum, Stockholm, 1988.
  22. Herring, R., Rees, M., “Internet-Based Collaborative Software Development Using Microsoft Tools”, in _Proceedings of the 5th World Multiconference on Systemics, Cybernetics and Informatics_SCI’2001). 22-25 July, 2001. Orlando, Florida., online at http://erwin.dstc.edu.au/Herring/SoftwareEngineering0verInternet-SCI2001.pdf.
  23. Highsmith, J., Agile Software Development Ecosystems, Addison-Wesley, 2003.
  24. Hock, D., Birth of the Chaordic Age, Berret-Koehler, 1999.
  25. Jacobson, I., Christerson, M., Jonsson, P., Overgaard, G., Object-Oriented Software Engineering: A Use Case Driven Approach, Addison-Wesley, 1992.
  26. Markus, M., “Asynchronous technologies in small face to face groups,” Information Technology & People, Apr 92, 6(1), p.29.
  27. Maturana, H., Varela, F., The Tree of Knowledge, Shambhala Publications, 1988.
  28. McBreen, P., Software Craftsmanship, Addison-Wesley, 2001.
  29. McCarthy, J., Monk, A., “Channels, conversation, cooperation and relevance: all you wanted to know about communication but were afraid to ask,” in Collaborative Computing, Vol. 1, No. 1, March 1994, pp. 35-61.
  30. Naur, P. Randell, B, _Software Engineering: Report on a conference sponsored by the NATO Science Committee,_Garmisch, Germany, 7th to 11th October 1968, Naur, P., Randell, B., eds., 1969, online at http://homepages.cs.ncl.ac.uk/brian.randell/NATO/
  31. Naur, P., “Programming as Theory Building”, pp.37-48 in Computing: A Human Activity, ACM Press, 1992.
  32. Ohno, T., Toyota Production System: Beyond Large-Scale Production, Productivity Press, 1988.
  33. Reinertsen, D., Managing the Design Factory, Free Press, 1997.
  34. Rich, B., Janos, L., Skunk Works: A Personal Memoir of My Years at Lockheed, Little, Brown and Company, 1994.
  35. Schön, D., The Reflective Practitioner: How Professionals Think in Action, Basic Books, 1983.
  36. SEED, “Object-Oriented Software Engineering”, The SEED Project, online http://seed.edrc.cmu.edu/SC/requirements/SC-req-2-development.html.
  37. Snyder, C., Paper Prototyping: The Fast and Easy Way to Design and Refine User Interfaces, Morgan Kaufmann, 2003.
  38. Standish, 2003 CHAOS Chronicles, The Standish Group International (http://www.standishgroup.com), summarized at http://www.findarticles.com/cf_dls/m0EIN/2003_March_25/99169967/p1/article.jhtml
  39. Sullivan, K, Chalasani, P., Jha, S., Sazawal, V., “Software Design as an Investment Activity: A Real Options Perspective,” in Real Options and Business Srategy: Applications to Decision Making, L. Trigeorgis, ed., Risk Books, December 1999.
  40. Tyler, T., Kramer, R., eds., Trust in Organizations: Frontiers of Theory and Research, Sage Publications, 1996.
  41. Webb, D., Humphrey, W., “Using TSP on the TaskView Project”, in CrossTalk: The Journal of Defense Software Engineering, Feb 1999, pp. 3-10, online at http://www.stsc.hill.af.mil/crosstalk/1999/feb/webb.asp
  42. Webster, N., _Webster’s New Collegiate Dictionary,_1977.
  43. Weinberg, G., The Psychology of Computer Programming, Silver Anniversary Edition, Dorset House, 1998.
  44. Weisband, S., Schneider, S., Connolly, T., “Computer-mediated communication and social information: status salience and status differences”, in _Academy of Management Journal_38(4), Mississippi State, Aug 95, pp. 1124-1143.
  45. Williams, L., Kessler, R., Pair Programming Illuminated, Addison-Wesley, 2002.
  46. Wittgenstein, L., Logical Investigations, Basil Blackwell, Oxford, UK, 1953.
  47. Wright, O., How We Invented the Airplane: An Illustrated History, edited by F.C. Kelly, Dover, 1953.

A Detailed Critique of the SEMAT Initiative

Alistair Cockburn -

Dr. Alistair Cockburn, Humans and Technology, inc.
Humans and Technology Technical Report HaT TR 2010.02, April 16, 2007

Author’s Note

The purpose of this article is not to dissuade those already participating in the SEMAT discussions from continuing their discussions; it is to arm those who have not been participating in the discussions and who may not be versed enough in the field to read through the spin emanating from the initiative to determine what the group is really up to.

Background

The “Software Engineering Methods And Theory” (SEMAT) initiative started with a call for action in three articles in Dr. Dobbs Journal late in 2009, followed by a request for signatories, leading to a meeting in Zurich in March 2010. That will be followed up by small group meetings at different times and places.

The call-for-action was itself fairly contentious, as was the meeting in Zurich. The organizers called it a great success; I viewed it otherwise and withdrew from the initiative.

To understand SEMAT, we first need recognize that SEMAT is just a group of people getting together to discuss whatever they want. They are free to discuss matters that do not interest others. They are free to change directions as they wish should they themselves feel a change is needed. To the extent that the group wishes to gain wider respect and become a funded initiative, however, they should take the critique in this article into account.

Quick Summary

Here is a quick summary of the final critique:

  1. The call-for-action was inflammatory, poorly researched and logically broken; it uses the very hype-for-fashion language that it decries, it is internally contradictory, the problems it deplores it cannot fix, and its proposed solutions do not address the problems named. It sets a direction in tone and content that does not do the topic justice. It is a red herring, intended to generate support through appeal-to-authority, hype, and ambition.
  2. The organizers are not interested in the same topics I am.
  3. They are unlikely to discuss either engineering or engineering theory – a more accurate name for the initiative would be the Meta-Process-Kernel initiative.
  4. Whatever they produce is unlikely to affect topics that matter to the industry.
  5. They are unlikely to produce anything soon.

The rest of the article will address primarily the first and the third points. The second and fifth are strictly personal opinion; for the fourth, time will tell.

Stage 1: The SEMAT Call For Action

SEMAT originated with three articles:

Methods Need Theory
Why we need a Theory for Software Engineering
The SEMAT Initiative: A Call for Action
The Authors

The primary authors of the articles and founders of the initiative are Dr. Bertrand Meyer, Professor of Software Engineering at the ETH in Zurich and Fellow of the ACM, and Dr. Ivar Jacobson, one of the co-creators of the Unified Modeling Language and the Unified Process. Both have doctorates in the field, both have published articles in academic and popular journals, both are supposed to know the state-of-the-art in software engineering and software development methodologies.

The articles are, however, not written as peer-quality pieces. They are simple advertisements for the SEMAT initiative, full of the “fear, uncertainty and doubt” rhetoric common to sales campaigns in general. More seriously, they misrepresent the state of the industry along the way.

As an expert in the field, I found the following deficiencies in the articles:

“Method Needs Theory”

In this article, Ivar and Bertrand lament that software development methodology selection looks like fashion or politics. They write:

The prevalence of fads more typical of fashion industry than of an engineering discipline.”

They are correct, it does look like fashion or politics – indeed it always will. There is nothing the SEMAT initiative can do to change the nature of human beings, or the tendency of human beings to be attracted to new and popular trends. In fact, the attention being given to SEMAT is exactly from the fashion, hype, and sloganeering that they decry in this article.

My assessment is that since this lament is quite true, fully irrevocable and outside the scope of anything SEMAT can hope to accomplish, they should not introduce it as an enticement to join the initiative or bring it up as a problem to solve.

… the elegantly written foundational document of the [Agile] approach is a “manifesto”, long on emotional appeals in the first person plural and short on facts. This style may be effective to capture attention, but as ideas mature it should yield to more traditional (even if also more boring) forms of argumentation.

The authors once again use precisely the polemical language they decry.

They are correct in saying that the manifesto is a statement of personal values (which have, indeed, shown themselves valuable to the industry). They neglect, however, to mention the over eight years of carefully constructed literature that they should well know, which are exactly the traditional (and more boring) forms of argumentation they ask for. See, for example, these books:

Anderson’s Agile Management for Software Engineering
Armour’s The Laws of Software Process
Cockburn’s Agile Software Development: The Cooperative Game
Poppendieck’s Implementing Lean Software Development
Reinertsen’s Managing the Design Factory

There are many other writings in articles and journals examining and testing the validity of the agile approach; those books constitute a good starter set.

“If we separate the ingredients from the cocktail we can empower people to build the methods they need”

The first problem is that they are contradicting their own position. Doing what they suggest will produce exactly the explosion of methodologies they lament at the start of the article. What will the difference be?

The second problem we have at this point is that it has long been established in the professional literature that methodologies will inevitably increase in number, not decrease. When I “established” this result for my doctoral dissertation in 2002 it was already then considered an old result, not a new one, and therefore not of interest to the review committee. Recognizing the need for multiple methodologies was not only a foundational view of the Unified Process that Ivar Jacobson helped to design in the mid-1990s, it was foundational to his preceding methodology family, Objectory, around 1990.

Methodologies come in the tens of thousands, a well-established if tiring fact that every manager in our industry needs to absorb. The question is not whether there can be fewer but how to handle the ever-increasing number and flavors of methodologies.

For the purpose of the SEMAT initiative, their own recommendation invalidates their opening complaint about the number of methodologies in use. This is the self-contradiction inherent in the call-for-action.

Software development is a human activity, but it consists of well-defined steps with well-understood relations between them.”

That assertion is not backed up in the research literature. On the contrary, the state of research more indicates that we don’t yet understand what is happening on software projects, and as we start to understand it, there are not well-defined steps, and there are fuzzy, overlapping relations between them.

Find the Kernel — the Mother of all Methods.”

This is a variant of the self-contradiction above, that there should be both one and many methodologies. As indicated earlier, all the research indicates that there is no “mother of all methods,” but rather, we will find a never-ending set of localized methodologies that depend on the technologies employed, staff size and distribution, the financing model, and more. More on this can be found by established researchers such as Capers Jones and Barry Boehm.

Phil Armour in his "Second Law of Software Process" (at ACM but an account is needed there) phrases the paradox this way:
“We can only define software processes at two levels: too vague and too confining.”

The authors don’t seem to be aware of this law. They should take it under consideration as a factor in their agenda.

“What we are missing is the cornerstone of science and engineering: a theory, and its validation.”

There are three problems with this:

  1. They never say why we need a theory of software engineering and its validation. To motivate the request, they should point to such a theory and its validation in another branch of engineering, and show how that has benefited that industry.
  2. A theory of the type they ask for exists and has been published since 2006. As experts in the field, they would be expected to know of its existence, and would either refute or include it in their plans for validation.
  3. The theory they end up proposing is not a theory at all, but is the design of a meta-method-kernel (more on this, below). The artifact they propose to create does not meet the request they themselves issue.

That concludes the analysis of the first article in the series.

“Why We Need a Theory for Software Engineering”

From the title of the second article, written by Ivar Jacobson and Ian Spence, we would expect to get the answer to the dangling question from the first article, why we need a theory for software engineering. That answer never shows up.

After much the same diatribe as in the first article, they show what they do have in mind.

Find the ‘truth’ of software engineering. We can then describe and capture this small set of essential concepts in the form of a minimal, practice independent process.”

Their theory of software engineering, it appears, is to be a practice-independent process of some sort. It is not actually a theory at all, as called for in the first article – it does not admit of validation and falsification, it does not produce predictions. It also runs into Armour’s second law of software process, that of being too vague.

This approach will make it easier to adopt new practices without having to change the other practices you have.”

Leaving aside the continued contradiction over one-versus-many methodologies, I also hunger for a way for people to adopt new practices without having to change the other practices in place. I have ever since 1991,when Wayne Stevens, the architect of the IBM Consulting Group’s methodology family, introduced me to his approach to that very problem. Unfortunately, in two decades of looking, we have not yet found a way to do this well. Having such a thing would certainly be valuable. It is not a theory, but it is a good thing.

They close with, ”Our understanding of software engineering lacks a basic theory.”

The article ends with the same three problems as the first article:

  1. They still never say why we need such a theory.
  2. They still ignore the existing theories on the table.
  3. Their proposed theory is not a theory at all, but just the design of a meta-method-kernel. The artifact they propose to create does not meet their own request.
“The SEMAT Initiative: A Call for Action”

The final article of the three, the call-for-action, is authored by the three creators of the SEMAT initiative, Ivar Jacobson, Bertrand Meyer, and Richard Soley, a key organizer of earlier OMG efforts. In this article, the authors announce: ”the goal of “re-founding” software engineering as a rigorous discipline.”

I analyze the call for action in the next section.

Stage 2: The SEMAT Call For Action

The call for action reads:

Software engineering is gravely hampered today by immature practices. Specific problems include: ...

  • The prevalence of fads more typical of fashion industry than of an engineering discipline.
  • The lack of a sound, widely accepted theoretical basis.
  • The huge number of methods and method variants, with differences little understood and artificially magnified.
  • The lack of credible experimental evaluation and validation.
  • The split between industry practice and academic research.

We support a process to re-found software engineering based on a solid theory, proven principles, and best practices that:

  • Includes a kernel of widely-agreed elements, extensible for specific uses.
  • Addresses both technology and people issues.
  • Is supported by industry, academia, researchers and users.
  • Supports extension in the face of changing requirements and technology.
The Problems SEMAT Proposes to Address

Let’s look at the specific problems they set out to address with SEMAT:

“The prevalence of fads more typical of fashion industry than of an engineering discipline.”

That people become attracted to fads is part of ordinary human nature, it is not due to the immaturity of the industry. Nothing SEMAT can accomplish will affect this problem.

Oddly, the SEMAT itself uses the exact fad/fashion rhetoric in its founding articles and call-for-action that it decries in this first problem topic.

“The lack of a sound, widely accepted theoretical basis.”

In none of the articles did they get around to showing why this is a problem, nor did they hint at the existence of the theories already present.

The key phrase, though, in this bullet is the phrase “widely accepted”. When I pointed to the presence of my theory, Ivar told me, “But that’s not widely accepted.” That true statement is the primary reason I joined SEMAT. If I wish my theory to get critical review, it needs to go through this sort of a challenge process.

However, it is also a catch-22. No theory of software engineering will pass critical review and become a “widely accepted basis” at this early stage of our industry. This includes even after the SEMAT initiative if finished. More generally, there is no sound, widely accepted theory of any of the engineering disciplines.

I accepted to join SEMAT in order to join the search for such a thing, because that topic interests me. I do think there is a possible theory and that it can be useful both in industry and in education; and I think that my own proposal is a decent starting point – and still falls short of what’s needed.

With regard to the problem-statement opening of the SEMAT call-for-action, I do not dare hope that the SEMAT initiative can resolve this problem.

“The huge number of methods and method variants, with differences little understood and artificially magnified.”

They authors have cycled back to their self-contradiction. The large number of methods and method variants is a well-established fact of life, not an “immature practice gravely hampering software engineering.”

The phrase “artificially magnified” is a reference to ordinary human nature, and is not something SEMAT can aspire to addressing.

“The lack of credible experimental evaluation and validation.”

This is a problem, all right, but it is not something SEMAT can address. Researchers in all fields gnash their teeth at creating credible experimental validation of almost any idea. It has nothing to do with immaturity in our field, it is a natural problem in all fields.

“The split between industry practice and academic research.”

The problem is on both sides: That academic research does not yet value field research in our industry; and few practicing developers read the research literature. It will be good if SEMAT can draw some of each together to discuss, almost regardless of what they center discussions on.

Of all the problems given in this call-for-action, only the idea of getting industry and academia together is addressable by SEMAT.

The Solutions Proposed

Let’s next look at the solutions they propose to address those problems:

“We support a process to re-found software engineering based on a solid theory, proven principles, and best practices.”

This phrase attracts me. I have been working on this topic since 1991, and continue to be interested in it. I agreed to join SEMAT in large part because I would find differently-minded peers to argue with and work through what it means to establish this.

I did not understand at the time that they had no real intention of discussing what “software engineering” includes, or that by “solid theory” they mean “meta-process-kernel”. “Proven principles” is obviously not possible, since we can’t prove any of these things, and “best practices” is a suspect term in many places, since what is best varies from context to context.

What remains of this point is that I am interested in this topic at a personal level, and am happy to join other people to discuss it.

“Includes a kernel of widely-agreed elements, extensible for specific uses.”

The design of a meta-process-kernel turns out to be the heart of the SEMAT initiative. If you interested in that topic, then SEMAT is the place to be. If you are not interested, as I am not, then SEMAT is unlikely to be for you.

The topic has some value. If it is achieved, we will have a normalized vocabulary for discussing software development processes and practices. It doesn’t match the rest of the call-for-action, but it has some value.

“Addresses both technology and people issues.”

This is good as stated. It was only during the Zurich meeting that I came to the conclusion that the group is primarily interested in mathematical formalisms. Since I don’t think mathematical formalisms capture what happens on a project, this goal seems out-of-reach for this initiative.

“Is supported by industry, academia, researchers and users.”

A good idea, if the results fit industry needs.

“Supports extension in the face of changing requirements and technology.”

It is not clear to me what this means, whether the meta-process-kernel will be so robust as to be able to handle all future ideas or that there will be an ongoing committee of people to add to the meta-process-kernel.

Summary of the Call-For-Action

Following these three articles, my (incorrect) interpretation of the SEMAT initiative was that this group intends to:

  • Define what the phrase software engineering means.
  • Place that on a “solid theory”.
  • Design a meta-process-kernel allowing people to discuss the commonalities and differences of the inevitably ever-growing number of local software development processes.

Rereading those three points, I am left with the question asked by many others: Why is the term engineering being used in this call-for-action? What part of the problem statement is sensitive to the difference between engineering software and simply developing it.

This question remains unanswered.

Stage 3: The Zurich Meeting

Part of attending the workshop was preparing a statement addressing ”How to find solutions to the problems addressed by the SEMAT effort.”

The meeting was two days long, with about 32 attendees, sitting in a U-shape around a long room.

(You may need to maximize the window to get all of this photo in view).

A formal report from the meeting was published on the SEMAT site.
.
No agenda was presented upon arrival; the agenda we followed was this:

- On the first morning, key attendees were given 5, 7.5 or 10 minutes to present their views.
- Starting after lunch the five tracks proposed by the organizers (Ivar, Bertrand and Richard) were formally introduced to the group at about 1.5 hours each (this took through lunch on the second day). The five tracks presented were
1) Definitions
2) Theory
3) Universals
4) Kernel Language
5) Assessments
- On the last afternoon, Bertrand and Ivar each gave a prepared talk. That took the meeting to 5pm on the second day.
- After 5pm on the second day, largely because of my evident dissatisfaction with the meeting, we discussed whether SEMAT might address the questions of interest to me: what is software engineering, what do other engineering disciplines think engineering is, and how might SEMAT link to those other efforts. I offered to lead that aspect of SEMAT (and canceled that offer when I withdrew from SEMAT a few days later).

On the morning after the workshop, about 1/4 of the participants stayed over, including notably Scott Ambler, Ivar Jacobson and Larry Constantine.

- For the first hour, under Scott’s guidance, they ran an agile-styled “cardstorming” exercise to list the possible stakeholders of the SEMAT initiative.
- In a second hour, under Larry Constantine’s guidance, they worked on possible alternative tracks for SEMAT. The result was the addition of track 6) Requirements for SEMAT.
Evaluation of the Meeting

What was startlingly missing from the agenda was time to discuss the group’s purpose and its strategy for getting there. Although over quarter of the participants requested time for this at varying times and with various strength over the two days of the meeting, it was never put on the agenda. By the end of the meeting, we had not taken any time to discuss what we were there to do.

Although we didn’t discuss what SEMAT should attempt to accomplish, Bertrand produced productivity goals for us (see the SEMAT report):

  • 50 key concepts in the definitions track,
  • 3-5 relevant theories in the theory track, justification of their relevance, and identification of areas where theories are needed,
  • 20 universals in the universals track, with justification of their relevance, basic design and demonstrator applications in the language track,
  • 5 assessment techniques in the assessment track.

What it means to have productivity goals without purpose, structure or strategy is not clear to me.

What was present during the meeting was something I hadn’t expected, but has since become evident: the interest of the organizers to have a mathematically rigorous description of software development processes. The appendices of the SEMAT report contain the details. In the results of the Theory track we see:

“First, the session chair presented a short list of properties regarding the kind of rigour / formalism one would like to have. Also the range and kind of theories should be discussed. It presented a wish list, which is not intended to name necessary conditions. On the list of desired properties are: · rigor, math-based · compositionality, interoperability and · pragmatics of notations and methods.”

I look for a theory to provide explanation and prediction of what happens on a project. The organizers of SEMAT are looking for a theory to be mathematical and composable. I do not think it is possible to have both, and I think that having accurate predictions from a theory is the more important of the two.

It would be one thing if we had taken some time to properly discuss this topic during within the SEMAT workshop, but instead it is currently being taken as a given in the structure of the work.

After the Meeting

I reflected on the meeting, discussed with other people who had been following the proceedings, and concluded for myself:

  • The organizers have strong views about their direction which they are not yet sharing and which prevents open discussion about the important issues.
  • The organizers are determined to work with mathematical theories of software development, which will make their end results inapplicable in both teaching and in practice.
  • The organizers are too determined to create a meta-method-kernel as an antidote to the industry’s problems. A meta-method-kernel does not solve the problems listed in the call-for-action.
  • I misunderstood why we were in Zurich. I thought we were gathered to discuss the topics. As one participant asked on the third day, “But if we don’t do our work when we are together, when do we do the actual work?”
  • I don’t think the matters being discussed are significant or will improve the way software is developed.
  • I fear that other people will not read what is produced by the group, but will instead hang onto the names of the people involved and have faith in an outcome that won’t appear.
  • I don’t have the time, patience, or funding to participate on the topics that seem to interest this group at the timeframes it appears that will be involved.

At this point I withdrew my support for the initiative.

Summary and Conclusion

Let’s review why I am writing this article.

The purpose of this article is not to dissuade those already participating in the SEMAT discussions from continuing their discussions; it is to arm those who have not been participating in the discussions and who may not be versed enough in the field to read through the spin emanating from the initiative to determine what the group is really up to.

To understand SEMAT, we first need recognize that SEMAT is just a group of people getting together to discuss whatever they want. They are free to discuss matters that do not interest others. They are free to change directions as they wish should they themselves feel a change is needed. To the extent that the group wishes to gain wider respect and become a funded initiative, however, they should take the critique in this article into account.

With those notes in place, my current view is that

  • The call-for-action is factually and logically broken.
  • The use of the word “software engineering” is not relevant to the initiative as it currently stands. Further, the group is unlikely to seriously discuss either engineering or engineering theory.
  • The initiative should more accurately be named the Meta-Method-Kernel initiative to reflect its actual goal.
  • The organizers are generally not interested in the same topics I am.
  • Whatever they produce is unlikely to affect topics that matter to the industry.
  • They are unlikely to produce anything soon.

You may be interested in those discussions, or the direction of the discussions may change. Just be sure to read through the hype and past the famous names to the real content and make sure you are in the discussion you intend to be in.

Postscript: What Do I Think “Software Engineering” Is?

Based on Foundations for Software Engineering (discussion: Re: Foundations for Software Engineering) and the later Design as Knowledge acquisition (discussion: Re: Trim the Tail), here is what I think a theory of software engineering looks like (omitting the ethics portion).

Craft Professionalism teaches us about lifelong learning, deepening mastery over time, and about developing skills in a medium. For software development there are a number of significantly different craft specialities, each working in its own medium.

The Cooperative Game model teaches us about the human component – trust, morale, strategies, the importance of things like invention techniques, decision-making conventions, and the properties of communication.

Lean Processes provide useful mathematics to the design assignment, once we recognize unvalidated decisions as the unit of internal inventory. Having made this adjustment, large amounts of manufacturing theory drops in our laps.

Design as Knowledge Acquisition teaches us that we can pay to learn, and structures our efforts to optimize both knowledge gained and business value accumulated. This view helps get rid of the tension between no-design-up-front rabid agilism and all-design-up-front conservativsm.

The above theory is fairly sound and fairly complete. It does a good job of handling key criticisms and goals:

  • It explains project success and failures quite well,
  • It predicts important issues in running projects quite well,
  • It helps practitioners formulate effective strategies on the fly,
  • It provides a sound pedagogical basis for teaching.

The four elements of software engineering are elaborated in more detail in my Keynote at Agile2009.pps.
My thanks go to Philippe Kruchten for pointing out that Professional Ethics is significantly missing from the above elements. It might fit under Craft Professionalism, but since I am not an expert on engineering ethics, I hesitate to go there. I look forward to longer discussion.

Re: A Detailed Critique of the SEMAT Initiative

Alistair Cockburn -

Thanks, Alistair.
Your opinion/critique is relevant for software developers and, IMHO, it saved SEMAT. Without it, I would have lost one more opportunity to read your very interesting, concise, published research results.
In fact, it would be nice to see a verified Meta-Method-Kernel available (freely) for students and IT professionals.
While this is not available, I will try sooner to make a list of common responsibilities (including the people and technology related ones) in software development, based not only in my own experience (25 years). Then, I would be able to ask for several companies in the world to map these responsibilities to their corresponding specific actual roles and practices. Sharing this, there is one chance people start to reuse/share/evaluate the community’s experience.

-by Edmundo Andrade on 4/16/2010 at 11:32 PM


Hi Alistair,

Let me start with saying that you are one of the “process experts” that I respect a lot.

At pragmatic level, I personally don’t believe whatever SEMAT generates will have any positive impact on my day-to-day work as a software developer. But that’s my personal biased view. At an intellectual level, I have a different take of the SEMAT initiative. I don’t think there’s a need to answer why we “need” a theory. When Einstein put forth his Theory of Relativity, people didn’t ask why we needed an alternative theory for physics. At one level, it’s just human nature craving for understanding the nature. At another level, a new theory gives us an alternative view. The view can be useful (i.e. it predicts accurately things we haven’t seen before), or it isn’t (i.e. it fails to predict). But being right or wrong isn’t important. Either way, our understanding expands after the exercise. It’s very possible whatever resulted from SEMAT will fail miserably when applied in the real world. But to me, there’s fine. That doesn’t automatically negate the value of such initiative. To use a phrase I learned from an UK economist John Kay on many finance/economy theories (e.g. EMH and CAPM), “these theories are illuminating but not true.” (Finance/economy isn’t that different from software engineering. Human are so unpredictable rigid math can’t capture the behaviours.) Even so, they still help us in understanding the world better.

-by John Y on 4/17/2010 at 12:48 AM

Thanks, John. As I write in the article, that would all be fine if they didn’t say “lack of a theory is a problem, a problem due to our industry’s immaturity, and a problem that can be solved by the design of a meta-process-kernel.” I also think that a good theory is practical, I have a decent starting candidate, and I and others use it to both predict project trajectories and to come up with ideas for real projects. And … I wish to remind myself and others, although I’d really prefer they didn’t say they were going to create a theory of software engineering as enticement to join, if N people wish to go off and discuss meta-process-kernel languages in places around the world, that’s totally up to them and best wishes to them. cheers – Alistair

-by Alistair on 4/17/2010 at 1:58 AM


Thank you for the explanation, Alistair.

I was surprised to hear that your approach was not considered as an important part of SEMAT. This seems contrary to these words in Why We Need a Theory: “Now we are not presumptuous enough to propose that our kernel provides the needed theory. More and greater minds than ours are needed to do this.”

As a Supporter of SEMAT I am currently reflecting on my experience and continuing to read (including your material) prior to further involvement.

Bob (Developer)

-by Bob Corrick on 4/17/2010 at 1:52 PM


For me this discussion goes to philosophy. What are the philosophical roots of your views, mine and those leading SEMAT?

And what do the philosophers say about reconciliation?

-by Craig Brown on 4/18/2010 at 8:25 AM


While I like the idea of empirically-based technique, I think it needs to be done bottom-up instead of top-down. Thanks for the summary, Alistair… do you know about the Agile Skills Project?

-by D. André Dhondt on 4/19/2010 at 3:07 AM


I am still interested in what the singatories are going to discusss but the starting point which I believe is ‘working software’ does not allude in any way to a meta-process-kernel. Even the position paper from Larry constantine that your blog linked to seemed to be against the ‘meta’ focus. So I was surprised that this seems to be about rigor.

In my opinion your position paper and opinions seem to be more light-weight and they emphasize a creative bent of mind while the official position seemed to be rigorous.

Now I know the difference :-)

My personal interest stems from a string of improperly managed and tested projects. I want to investigate software engineering also. Hopefully the meta-process-kernel will help to improve the quality in some way. So I will continue to watch and learn.

-by Mohan Radhkrishnan on 4/19/2010 at 4:48 AM


I have been doing some research (rethinking) recently about a need for a theory for project management – PM (in particular I am interested in software project management…). I came across some philosophy including DIALECTICS which could help do solve conflict contexts (thesis—anti-thesis—>synthesis—>thesis) along the lines of the work of the German philosopher Hegel. But some caution is needed (see “A consideration of reflexive practice within the critical
projects movement” — Daniel Sage, et al.).

PM has a lot do do with organizations and people — a project is not an island. I think software projects — and processes — have a lot to do with organizations (contexts), people and the project features itself. And that is really difficult to capture as a theory (or theories) from one discipline. I think a blend of different theories from several disciplines will play an important role in PM (research). Maybe that is the case in software development research/practice…

-by Hermano Moura on 4/19/2010 at 11:16 PM

thanks, Hermano —- I have tried to think of what a theory of Project Management would look like, and I keep coming up empty. I have strategies, and theory for the strategies, but nothing that even looks like a theory for PM. Thanks for the note…. If you have any leads I’d love to see them. cheers,

-by Alistair on 4/19/2010 at 11:28 PM


Alistair — we’ve hung out so I think you’ll know this is meant only to be helpful.

A simple way to remember when to use “it’s” vs. “its”: use the apostrophe to separate “it’s” into “it is” and say it in the sentence. If it makes sense, then use the apostrophe.

-by Bruce Eckel on 4/21/2010 at 4:09 PM

Thanks for the tip about its and it’s, Bruce – Actually I know the rules for its and it’s; what I’m really hoping for is that if you see a typo on the page, you just edit and fix it. Most pages on this site are viewer-editable. thanks,

-by Alistair on 4/22/2010 at 10:19 AM


Alistair,

About your reply to Hermano – is this of interest?
http://www.leanconstruction.org/pdf/ObsoleteTheory.pdf

-by Bob Corrick on 4/22/2010 at 5:58 AM

Hi, Bob, sorry about the URL business – ongoing wars against spammers caused that – I’ll look at the refs…

-by Alistair on 4/22/2010 at 10:20 AM


As I commented on another thread on this site, the metalanguage and kernel are only a part of the SEMAT initiative. Some signatories and participants are passionate in pursuit of rigor and others of us find formality less compulsory. In the end, Alistair prefers to take his marbles home, while I would rather keep playing and hope to shape the game, at least to the extent of keeping the matters introduced in my position paper in play.(And thanks for the citation and link, Alistair.) Many things happened in Zurich, some of them positive. SEMAT may go nowhere, but that does not mean that raising the issues was wrong. And I think more than just software engineering matters may be at stake. (See m-iti.org/node/234).

-by Larry Constantine on 4/23/2010 at 12:28 PM


We posted a commentary of Alistair’s critique on the Semat blog: http://sematblog.wordpress.com

-by Semat on 4/24/2010 at 11:56 AM


Hi Alistair

This is a wonderful article. I was thinking that I was the only one asking about SEMAT to finalize the definition for ‘software engineering”. I am happy to see that you are also asking for it. On SEMAT blog, I gave a definition of “software engineering” for discussion but it was not discussed.

SEMAT or not, a definition for ‘software engineering” and “software development” are needed by the industry. In fact a taxonomy for software industry needs to be drafted and finalized. if such a document is made available, the industry and in turn the general public would benefit significantly. i would be glad to assist you in that endeavor.

Murali

-by Murali Chemuturi on 4/24/2010 at 4:33 PM


Hi Alistair,

Re “what a theory of Project Management would look like”, Hal Macomber has written some interesting articles on this – see e.g.
“Notes on The Underlying Theory of Project Management Is Obsolete” which I think responds to the article that Bob Corrick links to, and “Securing Reliable Promises on Projects”, both on www dot reformingprojectmanagement dot com

Luke.

-by Luke Schubert on 5/5/2010 at 12:49 AM

Thanks, Luke —- I read that article when it came out… correct me if I’m wrong but my recollection is that it doesn’t say what a theory of PM /would/ look like. Am I wrong? Pointer to place or article. (P.s. thanks for re-mentioning that site – I’m back on there now reading good stuff). Alistair

-by Alistair on 5/5/2010 at 7:37 AM


is very good ! thank you!

-by is very good ! on 7/20/2010 at 11:44 PM


Markus Gaertner writes:

Do you plan to follow up on the things that initially struck you on the initiative as it was coined? These terms seem to be attractive to me, despite the efforts put into SEMAT and your mis-interpretation.

In the videos I saw from Robert Martin speaking about craft he uses the ethics and what I understand to be professionalism quite often. Therefore I associate Professional Ethics with craft. In fact, we wrote down the principles statements for the Software Craftsmanship movement as opposed to the twelve Agile principles in terms of the Software Craftman’s Ethics. You can find the most recent version here:

http://groups.google.com/group/software_craftsmanship/web/principles-of-software-craftsmanship

In addition I coined the zeroth law of professionalism to mean that I feel responsible for the actions I take. This means that I have to care about the outcome of my decisions and follow-up on resolving problems as they occur in a professional way. I see you just did that with your detailed critique and your reasons about it.

Markus

Hi, Markus!

I have not lost interest in finding a theory of software engineering, alone and with others (the more I look, the more others I find – Nonaka, Reinertsen, Anderson, Poppendieck, Kruchten, just to name a few). So in that sense I will keep going on the parts of SEMAT that struck me as relevant at the time.

For the rest of SEMAT, we just have to see what they really do, now that they’ve built up all their hype about their efforts – only when they publish something usable will we know what they were/are really up to.

The ethics question is quite interesting : I was asked at a dinner what is the difference between being professional and being engineering, and I couldn’t find an answer.

I applaud the Software Craftsmanship movement. Pete McBreen deserves continuing credit for writing the book before the topic was popular. I have it in my theory of designing-in-teams-talks; Bob Martin has it in his talks; the software craftsmanship site is strong. All of this will in lots of little ways.

So far, that has little to do with SEMAT – the craftsmanship movement is running separately and in parallel. I don’t consider that particularly bad; I’m mostly happy the craftsmanship movement is running at all.

Does that answer your question?
Alistair

-by Alistair on 7/23/2010 at 12:25 PM

Thanks, absolutely. Hoping to see some new ground on software engineering, but maybe it’s time to just call it “development”, and go on. Haven’t made up my mind on these metaphors completely, yet.

-by Markus Gärtner on 7/23/2010 at 5:12 PM


Check out my short PPT Alistairs talk not given at TEDxUoU 2010.pps (discussion: Re: A short theory of designing in teams.pps) for the (now) 5 chapters of team design (with SE and general sw dev included).

-by Alistair on 7/23/2010 at 11:11 PM


Thanks for the corrections, Bill.

-by Alistair on 8/17/2010 at 7:06 PM


Hi Alistair,

I justed wanted to thank you for your thoughts on SEMAT. I attended a lecture by Dr. Jacobson and spent some time reading the material on their website. The only conclusion I could draw was the one I did not know was already formulated, i.e. “We can only define software processes at two levels: too vague and too confining”. I believe they are heading for the latter.

Best regards,
Erik

-by Erik Brännström on 10/24/2010 at 7:34 AM


This is embarrassing ;) I did not mean the latter, instead I meant that the project will most likely become vague and watered down due to all the compromise that is inevitable if they want to reach a broad agreement. I actually wrote a short paper on the subject.

Sorry for not getting things right at first!
Erik

-by Erik Brännström on 10/24/2010 at 9:32 AM

Re: Alistair the blockger

Alistair Cockburn -

Blockg on, Alistair. Your subtle (suttle) approach to humor is rather more the high road than the “cocky” approach so often taken by the Yanks. Power to the understatement!

YT

-by Yours Truly (YT) on 1/29/2010 at 3:24 AM


sya nk hack gold

-by iqram haikal on 2/18/2012 at 3:23 AM

The Maxwell Curve: Getting more production by working less!

Scrum Log Jeff Sutherland -


Recently I was coaching teams at OpenView Venture Partners and Scott Maxwell, the founding partner, jumped up and said, “Jeff, I want to show you the Maxwell Curve! Here is what we have learned by running Scrum internally with teams of venture capitalists making investments.”

“As venture capitalists we used to want people to work harder and harder to get more productivity, certainly more than 40 hours a week. We would push them and push them until they started to burn out, get demoralized, and threaten to quit.”

“Now it is different with Scrum. In order to double our productivity we need to work less, certainly no more than 40 hours a week. Scrum is intense and you cannot work extra hours at that pace without losing productivity.”

The VCs proved to themselves that sustainable pace works. The maximum productivity point is no more than 40 hours a week with Scrum.

The head of OpenView Labs that supports our investment portfolio companies recently told me he was concerned. Productivity had stayed about the same when they cut their 60 hour weeks to 40 hour weeks. He felt guilty they hadn’t doubled productivity although he was happy with a major improvement in lifestyle for him and his team.

He asked me to do a retrospective with his team to see what they could do to improve. I found out that the number of story points was up 20% by moving the work week to a sustainable pace. However, 25-35% of the stories they used to work on were eliminated by prioritizing the Scrum Product Backlog (they were considered “junk” stories). This meant that they used to have to do about 160 story points to achieve the 120 story points per week they do today.

So their velocity is 160% higher by working a shorter work week. The big question for them is, “Would velocity increase if they worked less?”


Agile Succeeds Three Times More Often Than Waterfall

Mike Cohn's Blog -

Agile projects are successful three times more often than non-agile projects, according to the 2011 CHAOS Manifesto from the Standish Group.

The report goes so far as to say, “The agile process is the universal remedy for software development project failure. Software applications developed through the agile process have three times the success rate of the traditional waterfall method and a much lower percentage of time and cost overruns.” (page 25)

The Standish Group defines project success as on time, on budget, and with all planned features. They do not report how many projects are in their database but say that the results are from projects conducted from 2002 through 2010. The following graph shows the specific results reported.

Coffee machine design problem, part 2

Alistair Cockburn -

(note, 2011: I like rereading Section 5 on “Design Quality”. Still a good test)

ObjectPascal code by Alistair Cockburn C++ code by Chuck Allison

(This version is the prepub version eventually published in C/C++ User’s Journal, June 1998, with C++ code)

This is the second of a two-part article on a problem I use to teach and test people on object-oriented design. The problem is simple, strong on “design” issues, it illustrates a work situation where circumstances change regularly, and provides a touch-point for discussions of designs in even large systems.

In the first part, I said that in communicating a design, we give:

  1. The name of the key components in the system.
  2. The main responsibility of each.
  3. A drawing of the key communication paths between them.
  4. A list of the services provided.

The first article showed a simple design for a bank, and also for the first part of the coffee machine problem.

Here is what happened last time…

The Coffee Machine Problem recapped:
“You and I are contractors who just won a bid to design a custom coffee vending machine for the employees of Acme Fijet Works to use on their lunch and coffee breaks. (Arnold, the owner of Acme Fijet Works, like the common software designer, eschews standard solutions. He wants his own, custom design. He is, however, a cheapskate.) Arnold tells us he wants a simple machine. All he wants is a machine that serves coffee for 35 cents, with or without sugar and creamer. That’s all. He expects us to be able to put this little machine together quickly and for little cost.”
We get together and decide there will be a coin slot and coin return, coin return lever, and four buttons: black, white, black with sugar, white with sugar.

You designed a suitable machine using objects. I showed the typical solution I get at this point. It had four main components:

COFFEE MACHINE (1) DESIGN:

  1. Cash Box: Knows amount of money put in; Gives change; Knows price of coffee; Turns Front Panel on and off.
  2. Front Panel: Captures selection; Knows what to mix in each; Instructs Mixer what to mix.
  3. Mixer: Knows how to talk to the dispensers.
  4. Dispensers (cup-, coffee powder-, sugar-, creamer-, water-): Knows how to dispense a fixed amount; Knows when it is empty.

We installed the machines. Then Arnold visited us, and told us to

“Add bouillon, at twenty-five cents.”

We added the extra button, and designed the second machine. I was not happy, because the second machine had a radically different allocation of responsibilities (I am hoping, in all of this, that your own, personal designs worked out better than the typical ones I see):

COFFEE MACHINE (2) DESIGN:

  1. Cash Box: Knows amount of money put in; Gives change.
  2. Front Panel: Captures selection; Knows price of selections, materials needed for each; Asks Cash Box if enough money has been put in; Instructs Mixer what to mix.
  3. Mixer: same as before.
  4. Dispensers: same as before.

I am still not happy with the design, because the front panel has become a “mainframe” object. It knows everything about the machine. This typically leads to a maintenance nightmare. But I can’t articulate it better than that, so we proceed with the design.

Arnold visited us again, and said:

“I want to use company badges to directly debit the cost of coffee purchases from the employees’ paychecks. Since there already are badge readers, this should be a simple change.”

We add a badge reader and link to payroll. We made the design change. It turned out not to be too bad. Our responsibility allocation was basically sound, so we only had to change the cash box to talk about “sufficient credit available”, instead of “coins deposited”.

COFFEE MACHINE (3) DESIGN:

  1. Cash Box: Accepts cash or charge. Answers whether a given amount of credit is available.
  2. Front Panel: same as before, but only asks Cash Box if sufficient credit is available.
  3. Mixer: same as before.
  4. Dispensers: same as before.

We pick up the story at this point, section 4…

4. Arnold gets competition

People are starting to buy lattes instead of his coffees. Arnold wants the machine modified just slightly, so that he can create a “drink of the week”. He wants to be able to add new drinks and change prices anytime, to match his competition. He wants to be able to add espresso, cappuccino, hot chocolate, latte, choco-latte, steamed milk — in short, anything he can mix together.

We add a couple more buttons, a milk steamer and dispenser, and a couple more powder dispensers. We conclude our cash box design is pretty safe, now, and discuss how to meet Arnold’s request.

The first, and typical suggestion at this point, is to beef up the mainframe object so that it knows everything. I put my foot down, finally, and ask for a really good, robust design, so that we or Arnold can change the products and prices at will, without tearing the machine apart any further.

Ready, set, Go. This works best if you cover up the diagrams below and do your design on your own.
_______________________________________________________________________________________________________________

The design we come up with at this point bears no resemblance to our original design. It is, I am happy to see, robust with respect to change, and it is a much more reasonable “model of the world”. Fort the first time, we see ‘product’ show up in the design. The responsibilities are quite evenly distributed. Each component has a single primary purpose in life; we have avoided piling responsibilities together. The names of the components match the responsibilities.

COFFEE MACHINE (4) DESIGN:

Cash Box: Knows credit available. Handles money and direct debit.
Product Selector: Knows products, captures selection, coordinates Cash Box and Mixer to validate and produce the drink.
Product: Knows its own price and recipe.
Recipe: Knows the quantity and sequence of ingredients.
Ingredient: Knows what it is.
Mixer: Interprets a recipe, controls the dispensers.
Dispenser (cup-, coffee powder-, sugar-, creamer-, water-): Knows how to dispense a fixed amount; Knows when it is empty.

Figure 1 shows the new design. Figure 2 shows an interaction diagram for it. The code is at the end of the article.

Figure 1. The Coffee Machine, design 4.
_______________________________________________________________________________________________________________

Figure 2. Interaction diagram for design 4.
_______________________________________________________________________________________________________________

When Arnold wants to add a product, we add a new Product to the existing set in the machine, and let the front panel know which button selects the new product. Should Arnold change the recipe or price of a product, we have exactly one, highly localized change to make. In other words, we have reduced the trajectory of change, as described in all the advertising on object technology.

For the first time, we have a component which is not static. The selected Product rolls around the system, sharing its knowledge with the fixed components. For many newcomers to OO, such an object is non-intuitive. It simplifies the machine considerably, and more importantly, it provides the localization of changes we have been searching for.

5. The quality of a design

We saw in the first article what a “design” looks like. It looks like:

Components, Responsibilities, Interaction channels, Services.

But what makes a design “good”? How could we get to that fourth design?

Building from the above problem, I would offer that:

“Discussing the “quality” of an OO design is discussing the futures it naturally supports.”

Let us first get clear on one important point: Each of the four designs was fine in its time. Each was object-oriented, each worked. There was no “intrinsic” fault in any.

What differs is that they support different futures. In the first design, we did not think that the future might call for prices varying by product. Hence, the design did not support that easily. In the first two designs, we did not think of direct debit or credit cards.

The third design is constructed so that most of the system is indifferent to whether cash or credit is used, supporting both futures naturally.

The fourth design is constructed so that most of the system is indifferent to the actual prices and recipes. It naturally supports a future of changing recipes and prices.

Here is the down side to this: It seems we can’t discuss the quality of a “design” until we have voted for a future! E-e-yuck.

We can, of course, evaluate the solution with respect to its space and performance goals (notice that to do that, we have to have a space and performance goal!). We can talk about how “comfortable” the design seems, how “natural”. But we cannot talk about how robust it is without nominating a future to support. Different futures give rise to different optimal designs (just as different goals give rise to different space-time tradeoffs).

In general, the Evolution Test is one of six that I have watched people apply to a design:

  1. Data Connectedness Test. Can you actually gather all the information needed from the objects, to deliver the services needed, or are parts of the information unobtainable? (I have seen a major system’s design fail this test!)
  2. Abstraction Test. Does the name of the object convey its abstraction, does the abstraction named have a natural meaning and use in the language of the experts? Very many objects do not do well in this test. It is highly subjective, but everyone gets a sort of “ahh” feeling when you improve it.
  3. Responsibility Alignment Test. Do the name, main responsibility statement, and data and functions align? During design evolution, usually the latter explodes past what the name or primary responsibility call for. Sometimes that is time to split the object, sometimes it is time to rethink what abstraction you really have in front of you.
    Variations Tests. This has two parts (test 4 and test 5):
  4. Data Variations Test. This checks that the design naturally handles all the sorts and shapes of data the system will encounter.
  5. Evolution Test. This asks, what changes are likely in the business rules, technology, services, etc., and how does the design handle them? How many components have to change?
  6. Communications Patterns Test. This checks for odd run-time communications patterns. One particularly looks for cycles, but possibly other odd shapes. Nothing is “wrong”, but you may get suspicious.

You can see that the “talking about the futures” is test 5. I have found that experienced designers create robust designs by paying close attention to tests 2 and 3: Abstraction and Responsibility Alignment. One designer said that the Responsibility Alignment test covers all the rest.

An expert designer to whom I showed this problem immediately criticized the first three designs because they failed tests 2 and 3. He said: “There are no abstractions here, just machine parts; and the “front panel” doesn’t even say what it is good for, it just says where it is.”

So, in the absence of a known future, it seems that the Abstraction and Responsibility Alignment tests may predict the robustness of the design. I am not ready to assert this strongly yet, not based on the evidence of a mere coffee machine problem. But I am ready to nominate it as a candidate for discussion.

6. Merging responsibilities to invent new designs

Where did design 4 come from ? We actually first obtained design 4 from the Evolution Test in a classroom situation. We took a student’s design and asked: How many components do we have to change to add ‘moccha’ at $1.25? The answer was, “two”. So we asked: “Is it possible to create a design in which only one component has to change?”

To address the question, we found the two responsibilities that were affected. Price and Recipe. They were in separate objects. The abstraction Product had not yet shown up. To create a single point of change, we merged the two responsibilities and asked whether that meant anything. Someone called out: “Product!” And the room gave an audible sigh of relief, as they recognized a “better fit” of the abstractions to the problem (test 2). In the thinking my hypothesis just above, it does seem that recognizing and creating the abstraction would have led us to the design that protects the futures the best.

It is for this reason that I, and others, prefer the way design 3, in the previous article, used objects instead of strings to indicate the ingredients. We do not yet know what function the ingredient objects will serve. They do at least as well as strings, and they capture an abstraction. But their real promise is that they mark a place where the design can safely grow, as the requirements evolve.

I wish to add that there are at least a few people and organizations who actively use the Evolution Test in design reviews, asking, “How many components do we have to touch to create this change?” That is the real test of the design.

7. Teaching design

I have used this problem to teach basic OO design to college freshmen in a 2-hour test period; to experienced programmers just learning object design in one day of a week-long course; and in four hours to non-programming professionals who need enough OO design ability to work on a business object model right away. I have also used it to allow experienced OO designers to compare their design approaches.

The problem is useful because: It is simple. It is tangible. It builds basic design vocabulary. By design 4, we have a fairly subtle design that can be used as a template for other designs that need roving objects.

COFFEE VENDING MACHINE 4

The following classes are as in design 3:

Class Ingredient
Class CoffeePowder subclass of Ingredient
Class BouillonPowder subclass of Ingredient
Class Water subclass of Ingredient
Class SteamedMilk subclass of Ingredient
Class Sugar subclass of Ingredient
Class Creamer subclass of Ingredient

The following classes are trivial. Each is read-only and returns its data members on demand.

Class Recipe Responsibility: Knows its ingredients and quantities Data members: IngredientsAndQuantities[*] <filled in by the subclass> Class Product Responsibility: Knows its price and recipe Data members: Integer price , Recipe recipe Class BlackCoffee subclass of Product Class WhiteCoffee subclass of Product Class BlackSugarCoffee subclass of Product Class WhiteSugarCoffee subclass of Product Class Bouillon subclass of Product Class Moccha subclass of Product

Here is where the design is different:

Class CashBox Responsibility: Knows credit available. Handles money or direct debit. Data members: integer cashIn, nickelsAvailable, dimesAvailable, quartersAvailable = 0 Functions: …as in design 3, plus… boolean _haveYouCreditFor_( Product: product ) { self.doYouHave( product.price ) } _deductFor_( Product: product ) { self.deduct( product.price ) } Class ProductSelector Responsibility: Knows products; Captures selection; Coordinates CashBox and Mixer. Data members: Product products[5] ={BlackCoffee, WhiteCoffee, BlackSugarCoffee, WhiteSugarCoffee, Bouillon} availableChoices[5] = { } Product selectedProduct < Chuck… how, in C++, would I create an array of products indexable from the selection object??> CoinBox coinBox Mixer mixer Functions: select( drinkString ) { selectedProduct = lookup( drinkString ) if coinBox.haveYouCreditFor( selectedProduct ) then { mixer.make( selectedProduct ) coinBox.deductFor( selectedProduct ) } } Class Mixer Responsibility: Interprets recipes; Coordinates dispensers. Data members: Dispenser cupDispenser, coffeeDispenser, sugarDispenser, waterDispenser Functions: make ( Product product ) { Recipe recipe = product.recipe } <Chuck, what is the currently approved C++ way to iterate through a collection?> forAll ingredient in recipe { self.dispense( ingredient ) }

An open letter to object technology newcomers

Alistair Cockburn -

Humans and Technology Technical Report HaT.TR.96.02.

(note, 2011: It’s fun rereading this letter every 5 years or so and to see how current it still is, or goes out of fashion and then back into fashion as OO design and use cases go in and out of fashion.)

1. Intro

Over the last 6 years, I have spent numerous and pleasant long evenings in restaurants, bars, and hotel lobbies, discussing the nature of object orientation with other interested seekers of truth, light and wisdom. Over the years, we have been able to answer many of the questions we asked at the beginning. The other night I spent such an evening in a restaurant discussing those same questions asked by a new colleague. The next day, his office-mate wanted the same questions answered, and suggested I capture the discussion for his other colleagues to read. Considering the number of like-minded colleagues he has around the world, asking the same questions, it seems sensible to write it for them all to read.

The key questions were:

  • “Why is it that some OO experts get really upset when I do or say anything that is not strictly and purely object-oriented, but use cases are so popular, while not being object-oriented, and object modeling looks so much like data modeling?”
  • “Would the model produced by a data modeler look the same or different as the structural part of an object model, and would the model produced by a process modeler look different or the same as the behavioral part of an object model?”
  • “Why do we use use cases and scenarios, instead of just modeling the structure of the business?”

The questions are asked repeatedly by new arrivals to object orientation, and cannot be answered without having certain experiences. They come right to the heart of working with object orientation on a daily basis. So they are worth receiving consideration and serious response.

2. “Why is it that some OO people get really upset when I do or say anything that is not strictly and purely object-oriented, and yet use cases are so popular, while not being object-oriented, and object modeling looks so much like data modeling?”

My answer comes in 3 steps.

“When Bob <invented name for generic OO expert> and I get together to talk about OO, there is a shared understanding we have of each other, that we are experienced and convinced users of object technology. We understand and expect to use object identity, polymorphism, combined data and behavior, instance responsibilities, inheritance. So when I say, ‘Tomorrow we’ll do data modeling on the application form,’, Bob does not think that I have abandoned objects in favor of relational tables, but expects that we are discussing the structural aspects of the situation, which will show up in the object model. He forgives my use or misuse of the term because he has associated certain expectations with my speech.

1. When Bob visits your organization, just learning object technology, he sees a strict separation of data from behavior, and an absence or neglect of object identity and polymorphism. So when you say ‘data modeling’, he comes down on you like a ton of bricks. He wants to make sure that you get clear about the shifts you need to make. You will notice that over the last months, your model (and modeling) have slowly acquired object identity, polymorphism, and combined behavior with data. It is perhaps now less dangerous to use the word ‘data modeling’, but there is the chance that he will think you are sliding back into previous work styles. In other words, he does not have those safe expectations with respect to your speech, and so you are obliged to speak carefully.

2. In the end, even an object model has structural aspects and behavioral aspects. We use those words to signal that we are not making the mistake of doing ‘just’ data modeling or ‘just’ process modeling. In point of fact, modeling the structural aspects is just a particular form of data modeling, being a bit careful with the meaning of the term data modeling. It is not that we are modeling the tables on the disk, but modeling the structure of the information that will be captured. Data modelers refer to this as the ‘conceptual data model’, as opposed to the logical or physical data model. It is something they regularly produce.

3. On the other hand, if two OO people are talking, and one starts talking about, ‘process modeling’, the other does not have a safe interpretation to give. Does the person really mean process modeling with standard data-flow diagram? These have been shown over the years to give great difficulty when going to an OO implementation, and so the conversation is about to enter a difficult period. Does the person mean the behavioral aspects of the model? Does the person mean modeling a process as an object in itself? This is interesting because it is not done that often. So ‘process model’ is not safe to insert into the conversation because the intent is too ambiguous.

4. Getting finally to use cases and scenarios, they are primarily requirements-gathering techniques, and are neutral to the implementation technology. They contribute a value in guiding the conversation during design, giving it context and scope. The fact that they are not ‘object-oriented’ is neither good nor bad. The fact that they resemble functional decomposition scares some people, but is also neither good nor bad. The important consideration is that they contribute value to the design process. When they are used to describe internal designs, they present a picture of the behavior of the system. Procedural code, flow charts, interaction diagrams, Petri nets, data-flow diagrams, use cases, all show aspects of behavior, and have different uses, advantages and disadvantages. As long as you know that objects have behavior as well as data, you can work open the discussion about how best to capture or describe the behavior within and across objects.”

3. “Would the model produced by a data modeler look the same or different as the structural part of an object model – would the model produced by a process modeler look the same or different as the behavioral part of an object model?”

“In my experience, there are two groups of data modelers – those who model the data on the disk, and those who model the information in the system or in the organization. There is a world of difference between the models they produce and the discussions one can have with them.

Those who model the data on the disk talk and think in concrete terms, often in terms of tables. Their models are often quite different from OO models, and they are unwilling to see the similarities that exist across the technologies. In the data modeling community, it is legitimate to say that these people produce logical or physical data models, without being insulting.

Those who model the information in the system produce the conceptual data model. My experience is that the models they produce are very similar to the models produced by experienced OO modelers. These people typically work a lot closer to the business people than do the logical data modelers, which perhaps explains the difference in their results.

Also, there seems to be a body of knowledge, lore, training, or examples that let these people come to their results faster than OO people do. I have time and time again seen OO people go through three or four design iterations, ending up with the same model that the (conceptual) data modelers produced on the first round. So I have a lot of respect for the data modeling community. In fact, when I get stuck in the object design, I sometimes run and snatch a copy of what the data modelers produced, to look at where we are likely to end up.

I had the experience of facilitating a session between warring data and object modelers. We decided to do ‘CRC sessions for an audience’. The four experienced OO designers sat around one end of a long table and were the only active participants. The business experts sat next along the table. They were there to answer questions and correct misstatements about the business. After them were the data modelers. At the far end of the table were other interested people. All told, there were over a dozen people in the room, but only four active people, talking mainly among themselves.

After about an hour of work, a section of the object design had emerged. We asked the data modelers what they had produced in their previous work, whether it was essentially the same or quite different. They said, ‘Essentially the same.’ We repeated this for two more segments of the design and got response from the data modelers each time that we had produced essentially the same design as they had, apart from certain obvious differences in notational technology. They had note used inheritance, but had the same placeholders in the same places. After that we were able to split into groups containing one business expert, one data modeling expert and one OO expert, and they quickly reconciled the rest of the design, identifying where there was a simple difference in technology, and sorting out minor differences. Where there was a difference, it sometimes happened that the data modelers had a better rationale, and sometimes the OO models had a better rationale, and the groups were able to resynchronize their designs.

So there have been at least a few experiences showing the similarity between results of conceptual data modeling and OO modeling with CRC cards.

There were also experiences showing the difference between logical (information-on-disk) based relational modeling and OO modeling. For the most part, the differences were due simply to technology, free use of inheritance and many-to-many relations in the OO model. The difficulties came with the inability of the participants to communicate across those technological differences.

So much for the data modeling part of the question.

The same cannot be said at this time for process modeling. Numerous methodologies, plans, conversions and projects were tried in the early 1990’s to adapt data-flow diagram models to objects. A few projects may have laid claim to success, but in the end there seems to have been quiet consensus that they are difficult to map to object models. Most data-flow-diagrammers-become-OO-designers have dropped them (the Martin-Odell and Ptech groups being notable exceptions). My answer at this time is that process modelers do not produce a model comparable to what OO modelers produce.

The answer is not closed, though. OO people are beginning to model process per se. It is not clear how this will evolve. Will the processes start looking like steps in a procedure (procedural programming reincarnated), will they look like data-flow diagrams, or will they look like encapsulated objects?

4. “Why do we use use cases and scenarios, instead of just modeling the structure of the business?”

“Use case and scenarios …

... guide the conversation, giving it scope and context,

... indicate what to include, exclude, how wide, how deep to go, and when to stop,

... provide variations to stress-test the design.

I have watched a number of groups do a random exploration of the domain when they model without working from scenarios. How does the leader know what questions to ask next? From intuition guided from some previous experience. How does the group know if they are capturing the information they will eventually need? They often don’t, and don’t know it, or do know it and use intuition and guesswork.

Several really expert OO designers have confessed in the late of the night that they do not have a straightforward formula for getting to the beautiful objects. One said, “We have really wild discussions at times”, another agreed to the notion that, “Sometimes we just beat our heads against the walls until eventually some decent objects show up.”

Using scenarios does not prevent wild discussions and beating heads against walls until decent objects show up. Using scenarios provides a context and boundaries for those discussions so that they stay within the area of interest. Without the scenarios, I watch groups go mad as they wander through an arbitrarily large modeling space for days or longer. So the first reason to use scenarios and use cases is to channel the effort.

The second use of scenarios is to determine when you are done.

Consider that you have been given the job of modeling a trucking company. What do you model? Would you include the new purchase value of the trucks… the actual purchase value… the resale value… the make… the color of the interior… the number of speeding tickets issued against it… the number and destinations of its trips? If you try to include everything, you will never finish. Where do you start, when do you stop, what do you include, exclude, and how much detail do you want?

An answer is provided by the scenarios. You need to have sufficient information to deliver all the questions posed by the scenarios. On the structural or full object model, every box (line, phrase) addresses some need of a scenario. If you color the items on the model red as you walk through a scenario, the red items will all be connected in some way (there will be no islands). If you do this for all scenarios, all items will be colored at the end. There are no boxes (lines, phrases) extra, there are no boxes (lines, phrases) missing. Then you are done. During the modeling work, the conversation may go wild from time to time, but there is a way to tell if you have strayed out of the bounds of the current need, or wandered too deep.

Finally, scenarios provide variations to stress test the design and establish its quality.

How do you distinguish the better between two models? Saying, ‘It matches the business’ is necessary, but not sufficient. There are many possible models that ‘match the business.’ What is the measure of quality?

Software has a very high cost function associated with making changes. For a change request, the cost grows rapidly with the area of damage (the ‘trajectory of change’). The goal for software, then, is to change exactly one module. This will not always be possible, but as Kent Beck says, ‘There is a noticeable difference in the quality of the software when you can change just one class.’ For a business model, it is less clear what the cost function attaches to, but minimizing area of damage is a reasonable place to start.

To test the trajectory of change, you need variations. The scenarios provide the variations. ‘What happens when the user wants to <something-or-the-other>?’ How many items on the model do you have to touch? Some techniques, such as the CRC (‘class-responsibility-collaborator’) technique encourage you to invent _impromptu_scenarios rapidly, to uncover likely, but unstated future changes. At the end, you review the likely changes, and see how many items you have to alter to make those changes. For two models that match the business, that one is better which has fewer (Kent says, ‘One’) touched points for each scenario.

You will also find variations in other places, such as the structure of related products. Can you change products touching just one place? Both sources of variations should be used.

There are other uses of scenarios, such as checking requirements with users, and providing functional test cases for the system. These are the three reasons to use scenarios during the modeling activity itself.”

Enabling Specifications: The Key to Building Agile Systems

Scrum Log Jeff Sutherland -

Previously, I discussed the notion of "Agile Requirements" and this concept is embedded in the Nokia Test. There is not a definition of Agile Requirements that is commonly agreed upon, so I now use a standard concept that is better terminology for what is needed.

For many applications, particularly web applications, a story only needs notes and acceptance tests on a card or sticky note. For some applications, like mobile applications for physicians, unless a fully formed prototype is acceptable to a carefully selected group of test physicians, end users will refuse to use the application when it is installed in the hospital setting. Therefore, a fully formed enabling specification, with a fully working prototype, needs to be agreed upon before cutting a line of code.

Apple uses this routinely which is "Why You Can't Innovate Like Apple." PatientKeeper used this strategy during 2003-2008 which is one of the reasons they were the fastest company-wide set of Scrum teams I have ever seen. I called them "The Future of Scrum" at Agile 2005. Some people said PatientKeeper looked more like Kanban than Scrum so they were also the fastest Kanban teams ever seen. I have always run Kanban inside of Scrum since 1993 since Scrum is Takeuchi and Nonaka's view of lean teams. However, we tried to minimize the Kanban, just as Taiichi Ono did and as Toyota does today.

In 2007, I visited PatientKeepers patent attorneys as our CEO wanted to get a patent on a discovery of a reporting strategy for analyzing physician fee payments that would raise hospital revenue by 30% during the first month of use. I asked the Product Owner to bring along what documentation she had for review by the lawyers. There was a three page Agile Specification. This is a document that Product Owners at PatientKeeper use to describe the global concept of a feature. User stories are developed from this document.

Our goal was to work with the lawyers to understand how much documentation was needed for a patent application. The lawyers pointed out that a patent application is an "enabling specification." This is a legal term that describes a document that allows the average person knowledgeable in the domain to create the feature without having any discussion with the originators of the enabling specification.

The lawyers determined that our Agile Specification of three pages was not an enabling specification. To produce a document that would be approved by the U.S. patent office we would need five pages.

It turns out that an enabling specification is exactly what is needed to maximize the process efficiency of executing a user story. The average process efficiency of teams executing user stories is about 20%. This means a story that takes one ideal day of work takes five calendar days to delivery. Systematic Software Engineering, a CMMI Maturity Level 5 company, has extensive data showing that teams that drive story process efficiency to over 50% will double their velocity systematically for every team. (PatientKeeper was running at 10 times the velocity of our waterfall partner in India.)

The definition of an "enabling specification" is part of U.S. patent law which has been adjudicated extensive by the courts so it is not only a commonly agreed upon concept, you can take your requirements to court and the judge will tell you whether or not they are enabling specifications.

In general, requirements are NOT enabling specifications. On a recent project at a large global company we discovered that hundreds of pages of requirements were not enabling specifications. On the average 60% of what was in the documents was useless to developers. It caused estimates to double in size. Even worse, 10% of what was needed by developers to implement the software was not in the requirements.

A user story must be an enabling specification for agile teams to operate at peak performance. If it is not, there will be the need for continued dialogue with the Product Owner during the sprint to figure out what the story means. This will reduce story process efficiency and cripple velocity.

A user story contains a template, notes, acceptance tests, and implies a conversation with the Product Owner. So the conversation may be part of the enabling specification if the conversation is clear before the beginning of a sprint. This can be on a card for a simple application and will be on the order of no more than 3-5 pages even for a complicated mission-critical and life-threatening application like the PatientKeeper Platform.

As the lawyers pointed out, an enabling specification for a major feature needs to be no more than five pages. So all of the documentation needed, including transcribing all the conversations, should be on the order of 3-5 pages for a moderately large feature. This is what I mean by "Agile Specification." I now think "Enabling Specification" is better terminology.

2-231 Obtaining Patent Rights  § 2.07[6]
"A patent specification is enabling if it allows a person of ordinary skill in the art to practice the invention without undue experimentation."

See Jay Dratler. Intellectual Property Law: Commerical, Creative, and Industrial Property, Volume 1 for citations.


Scrum Assessment Checklist

Scrum Log Jeff Sutherland -


Several people have asked me for the Scrum Checklist we have used for years, created by Henrik Kniberg at Crisp in Stockholm. The earlier version was a mindmap. The current version is a checklist.

I've used it for assessment in OpenView Venture Partners portfolio companies by asking teams to evaluate themselves on each item on a scale of 1 to 10. I've found that our teams are very honest about their current capabilities and the results very useful.

We will be talking about this at the Certified ScrumMaster course in Los Angeles.


Re: Use cases

Alistair Cockburn -


Hi

I have a question: How do you write a use case when the functionality to be achieved has been decided before hand to be achieved by an off the shelf tool? The dev team still wants the use case. So what would be the use case level i should be following and how should i write the steps involved?

Thanks

-by Atalichome on 8/2/2009 at 11:33 PM


There are two ways to read the question.. the functionality (or process/function) has been decided to be that of the COTS system provided. Or, the system may or may not have been selected, and a use case is required to gap-analysie the functionality of the system and result in potential dev or customisation effort.

In the first case, simply give them the vendor manuals. Or, maybe what is required is a business procedure manual in how your site will use the system to support its business function. Either way, no use case is really required or even appropriate.

The second case is different. You will still have to do the BA work to determine what the business do for that particular function/s. So, you would still model all of the facets of the function (use case). Then an analysis of how the COTS application meets those requirements and any gaps can be performed resulting in (depending on methodology), requirements, specs, etc from there.

Hope this helps

-by LK on 8/5/2009 at 11:56 AM


I have written a use case relating to ‘intake and eligibility determination’ that is supported primarily by a web-based user interface. This intake may also be accomplished via another channel/technology by the user calling into an interactive voice response (IVR) system. The intake requirements are identical but obvoiusly the web vs. IVR capabilities vary e.g., may not desire to intake ‘text based’ responses via phone key pad because it is cumbersome vs. the web-based alternative. Is it more appropriate to document a distinct use case for the web and a distinct use case for the IVR even though the requirements are the same? Alternatively, should the Technology and Data Variation list simply identify that IVR intake is an alternative that bifurcates the process.

-by AD on 2/25/2010 at 2:07 PM


I’d try for using an extension or Technology & Data Variations to avoid writing a separate use case.

Alistair

-by Alistair on 2/25/2010 at 3:00 PM


Hello!
I’m learning this wonderful new way of gathering requirements and was introduced to the ‘Use Case’ concept just recently. I was wondering if you had any examples of Actor and Primary Actors drawn out with other symbols. It would be nice to see an entire example with symbols.

Thank you,
LUC1

-by LUC1 on 5/7/2010 at 4:46 PM

(Hi, LUC1, nope, sorry, I don’t use the symbols much – mostly focus on the writing. Larry Constantine has other symbols he likes, though, so look up his stuff. Best wishes, Alistair)

If I had a view order use case what would it contain?

Main Flow:
1. User searched orders. THe following search critieria will be provided:
a. order number
b. name of purchser
c. billing address
d. recipient name
e. company name

2. System displays orders based on search critiera.

QUESTIONS:

1. Is that it? Are there any alternate flows?
2. So ability to filter, ability to sort
3. to be able to select company name, and then for the user to be presented with only the names associated with the company, are these part of the UI? or the use case?

These sound like basic questions, but lots of people have issues with these… is there common agreement how this tyep of use case should be written and what should be part of the UI design?

thank you much

-by Shai S on 5/27/2010 at 3:42 PM


Hi,

I’m currently having some difficulties with my use cases.

Essentially we’re repalcing disparate systems between 3 insurance companies (owned by one)on to one platform. All companies will use the same systm, but each will have there own set of products, and each has their own business process. I’m trying to produce a nice set of cohesive use cases, but I’m starting to question the direrction I;m heading with them.

Here’s an example. I have a use case for producing an insurance quote, that in itself sounds pretty easy. You capture some details about the insured, product required, and the system calcualtes a premium. From there you can send out a quote. Simple! Probelm is all three businesses are working with different products that require different data capture and the information that should be displayed, such as the premium breakdown, is very different. I’ve tried to produce a single use case and keep it fairly general. But there are alt flows that will be specifc to each business becasue the behaviour they require under certain circumstacnes is different. What I dont want to happen is to end up with a beast of a use case that’s too hard to read, just for the sake of keeping everything in one place. Is it, in you opinion, OK to split these out into seperate use cases if necessary.

Best regards

-by Pedro on 6/22/2010 at 10:31 AM


Hi, Pedro,

1. Don’t put data structure descriptions into the use case body.

Just say “Visitor enters all the required (and some of the optional) information needed to calculate a quote.” That will take care of most of the problem, because the differences between the companies will be on the data sheets not the use cases.

2. Read the chapter on Parameterized Use Cases in “Writing Effective Use Cases”. That contains some ideas for folding/collapsing text in tidy ways.

3. See if you can get the different companies’ behaviors into a table, so the alt path names a condition, and the table shows the differences in data or behavior of each company in a tidy way where the alt path would be.

In general, tables and use cases are nicely compatible and very powerful together.

Let me know if any of this works for you,

Alistair

-by Alistair on 6/23/2010 at 5:50 PM


HI Alistair
My question is:
Can more than one actor initialize the same use case?

-by Mauricio on 7/7/2010 at 1:01 PM


HI Alistair
My question is:
Can more than one actor initialize the same use case?

-by Mauricio on 7/7/2010 at 1:08 PM


HI Alistair
My question is:
Can more than one actor initialize the same use case?

-by Mauricio on 7/7/2010 at 1:12 PM


HI Alistair
My question is:
Can more than one actor initialize the same use case?

-by Mauricio on 7/7/2010 at 1:28 PM


HI Alistair
My question is:
Can more than one actor initialize the same use case?

-by Mauricio on 7/7/2010 at 1:44 PM


HI Alistair
My question is:
Can more than one actor initialize the same use case?

-by Mauricio on 7/7/2010 at 1:44 PM


HI Alistair
My question is:
Can more than one actor initialize the same use case?

-by Mauricio on 7/7/2010 at 1:45 PM


Hi Alistair

My project requires multiple actors viewing same set of reports. How do I map multiple roles initiating the same use case?

-by George on 8/6/2010 at 9:38 AM


just name the role as the actor.

-by Alistair on 8/6/2010 at 11:44 AM


Hi Alistair

“My project requires multiple actors viewing same set of reports. How do I map multiple roles initiating the same use case?”

I believe I must have been a little clear about the above question.

There are a standard set of reports which could be viewed by both Operations and Finance personnel. Can I make both Ops and Fin roles be primary actors for Use Case: View Reports.
——————-
Ops ——-| |
View Reports ——————-

——————-

Fin ——-| |
View Reports ——————-

Thanks,

-by George on 8/9/2010 at 3:04 PM


Can more than one actor initialize the same use case?

-by Mauricio on 10/7/2010 at 3:33 PM


Hi Alistair,

I am trying to buy a copy of “Writing Effective Use Casses”. Amazon UK have the 2000 edition that they can deliver immediately but also appear to have a 2008 edition but on “1 to 3 months delivery”! If there is a later edition I would rather wait and have that but Amazon do not make it clear if it really is a different edition.

Can you confirm if there are different editions of this book?

Thanks,

-by Alastair B on 11/30/2010 at 9:46 AM

Hi, Alastair — There is no 2008 edition – nothing has changed in use case land since 2000 (for good or for bad). I even went to amazon.co.uk to see what that 2008 book might be, and didn’t find any such – can you give the isbn or amazon.co.uk book code (don’t put http in your answer or the server here won’t let you post the comment, or else put spaces for each / symbol). cheers.

-by Alistair on 11/30/2010 at 11:54 AM

Alistair,

Thanks for the info – I will put my order in!

The “2008” item has ISBN 8177589075 and comes up if you type that into search box of amazon.co.uk. It has no cover image, a higher sale price and the 1-3 months delivery time. The same number works on amazon.com too.

-by Alastair B on 12/1/2010 at 5:27 AM

whoa, crazy! the publisher isn’t even Addison Wesley Longman (some Dorlington thing in maybe Australia?), and the author isn’t even me – it’s Lord Cockburn :), which I am not yet. Thanks for the tip, I’ve notified AWL so they can chase down this either weird typo or nasty impersonation. Thx; cheers, Alistair.


Hi there,
I’ve been writing use cases for some time, but I still keep finding myself perplexed on a daily basis :). We’ve been developing a document management system with heaps of use cases to write. Recently I’ve been wondering how to tackle the following problem.
I have a use case which can be started by two separate actors, however one of the actors performs the use case only on a particular product type and thus needs special permissions to do it. The other actor does not have those permissions, so he can start the use case only for products of a type other than the one mentioned. I used to put a list of needed permissions into the precondition section of the use case, but in this case I would have to put there different permissions for different actors, which doesn’t seem right to me. Do you have any advice for me?
Regards, Marzena

-by Kasia on 9/13/2011 at 10:59 AM

Nice question. I haven’t been there, but here are my two thoughts: 1: put a table in the preconditions field. The point (to me) of the preconditions field is to announce to everyone else what you expect MUST be checked and done and safe BEFORE the use case starts, so that they will not be checked again within the use case! Very important that. 2: If the conditions will indeed be checked within the use case, then they can’t be in the preconditions and you have an extension condition to handle the difference. Eg

1. System verifies that the user has the permissions needed for this product type.
1a. User doesn’t have the permissions needed for this product type: System notifies user and exits the use case.

Thoughts? (Alistair)


This was an excellent answer (but I still don’t know how to solve this particular dilemma ;))!
I was, for some reason, looking for an either/or solution, but you made me think whether maybe both are feasible. I discussed it with a colleague and we realized that some of the permissions are needed for the use case to be started at all and are valid throughout the use case. Those we put in the preconditions. And then there are some that are checked only for a particular step during the use case and those we put as a verification point within the use case.

However, in this case, one of the permissions is only needed when i start the use case in a particular product type, so it doesn’t feel right to me to put it to the preconditions, cause you still can start and run the use case without having this permission. However if you use the exceptional product type, you can’t start the use case at all.
In user interface terms that means you see the command button, but it’s disabled and it informs you you don’t have the permission to use it. If any of the other preconditions are not fulfilled, you can’t even see the button.

If I wanted to put the verification into the use case (which seems to me the most sensible), it would have to be the first step in it. Can the first step in a use case be performed by the system? This is how it would roughly look like:
1. The system verifies that product type is other than A.
1a. The product type is A.
1a1. The system verifies that the user has permissions to activate the product type A.
1a1a. The user doesn’t have the permission. System notifies the user and exits the use case.
2. The user activates the product.
3. The system sets product’s status to active.
4. The system informs the user that the action has been completed successfully.

-by Marzena on 9/14/2011 at 2:57 AM

So there is a visual context in which it is established that the use case can or can’t run? Then those steps belong there, not in this UC. Let’s say this UC is UC 3 and the other is UC 1. In UC 1 you have some stuff going on about what commands to enable and disable … and there is a step in there that says to enable all commands for which this user has permission to run. Then there might (it seems to me) be a Fish level UC called Answer Ability to Run, which takes as input the product and the permissions, and answers simply whether the UC can be run or not. That sets up the precondition needed so that the outer context has the responsibility to not start the UC. You might demand the programmers also put the same validation check into the UC just in case it’s called naughtily :). Bests

Hi Alistair,
When i have multiple systems interacting with the same set of actors, how do i represent the steps involved. For example, lets take a call center enviromnet when the call comes in through the telephony system (all actions like, attending the call by an agent, conferencing the call, putting a call on hold ) and such actions are taken care of by the telephony system. The next system is the case management application when the agent enters infomration and records info captured from the call. How can i combine telephony system (when a call coming in) to the case managemnet application where the agent enters info regarding the call? Shoudl i consider telephony system as a user here? I am super confused.

-by PArhun on 2/9/2012 at 4:03 PM

Re: Basic use case template

Alistair Cockburn -

Hi Alistair,

I have a use case and it is: “View Customer Order.” THis is needed by customer service staff to provide information to customers who call in and ask what is in my order, when is it going to be shipped, etc.

Can you describe what the use case main flow and alternate flows might be?

-by Shai S. on 5/27/2010 at 3:27 PM


Hi, Shai,

I am a professional consultant, making my living by offering coaching on such things as writing use cases. If you are interested, please write me off line (email).

However, that looks like an extremely simple use case question, one your should be able to solve either by browsing online or by reading one of the several good use case books in your technical library.

Please write to me by email if you need more,

thanks,

Alistair

-by Alistair on 5/27/2010 at 8:12 PM


Hello Alistair:

This article has been immensely helpful.Thank you! Could you please point me to any website for subsequent steps after creating an use case. Specifically where would you provide additional information on the pieces (say 50 fields for a EDI transmission) of data that are mandatory and the application of the specific business rules.

Regards,
sghosh

-by sghosh on 1/13/2011 at 2:56 PM


Hi, I realize I need to elaborate a bit more on this. I know that detailed requirements documents are are called for after the use cases in most organizations. However , in this case I am looking for a document light process to cover the requirements and the use cases so that development can begin asap and maintenance overheads can be minimized. We are not heavily invested in software development or engineering resources (by design) and we leverage on COTS products a lot. So what would be a happy medium for achieving traceability as well as keeping the resource overheads low.
Any help is much appreciated.

-by sghosh on 1/13/2011 at 3:14 PM


thanks a lot Alistair, this page is really informative. Brilliant piece of work mate.

-by phrygian on 4/6/2011 at 4:53 AM


Hi, I am student and currently i am having on case study but i don’t have any idea to do it.May have you email so i could discuss it with you.it will be a great help to me from you.Thanks

-by Ahmed on 8/4/2011 at 4:52 AM


Hi Alistair.

I am working for a swedish telecom operator and I am tasked to create uses cases for a new customer selfservice system. The use cases will be used more to support test activities than as a documentation of the system. The requirement were collected before my time and were not documented using use cases.

My question is related to the what level of detail I should address the use cases. To give an example: at a high level there is a Create Order use case, but it can be detailed further in products and even further in services, e.g. Create Mobile Order and Create Mobile Broadband Order, etc. The “flow” of the use case may be much or slightly different depending on the product and service the order is for.

My question is if I should create distinct use cases at the detailed level, or have more high level use cases with the variations detailed as many alternate flows? Where should I draw the line when it comes to details in the use case? With too much detail, the use case becomes a system test script or a procedure.

With kind regards
Pal

-by Pal on 8/15/2011 at 8:45 AM


my vote is No. those look like data differences, not workflow difference. Put the data differences lightly into the text. cheers

-by Alistair on 8/15/2011 at 11:48 AM


Thanks for you quick response, Alistair! Much appreciated.
/Pal

-by Pal on 8/17/2011 at 3:33 AM


Thanks for your quick response, Alistair! Much appreciated.
/Pal

-by Pal on 8/17/2011 at 3:34 AM


Hi Alistiar,

A question on secondary actors. I have a Use Case, say UC1 that involves Primary Actor (PA) and a Secondary Actor (SA). However unlike the ATM example, the SA doesn’t respond to the PA’s request. There might be a delay of a few hours (even a few days). In this case, should my UC1 include the SA’s response (albeit the delay) or should I write another Use case where the SA becomes the PA. My confusion in this case is the end result is the Primary Actor’s goal but if I write a new use case, I cannot consider this as the Primary Actor’s goal (since the Primary Actor of UC2 will be actually the Secondary Actor of UC1 and he will be acting on the Primary Actor’s goal).

Could you suggest a better way of handling such cases?

Thanks,
Ashok

-by Ashok on 2/8/2012 at 11:30 AM


Hi, Ashok, good and difficult question. Could be either way. I’d add it as a new UC in this case. My thought process is that if the system is in a quiescent state and has to wake up and respond to a triggering event, that triggering event gets its own UC. The linkage between the two goes in a kite-level UC. seem reasonable to you? Alistair

-by Alistair on 2/8/2012 at 1:33 PM

Estimating and Planning Are Necessary for Maximizing Delivered Value

Mike Cohn's Blog -

Because I’m so interested in estimating and planning, I always take notice when I see a new blog post or news group posting claiming, “Estimating is waste! Don’t do it!” The thing that never shocks me about these arguments against estimating and planning is that they never come from the business people for whom we are developing products or systems. They understand the value of estimates and plans (and the shortcomings of poor estimates and plans).

Let’s consider that perspective for a moment. How many significant things in your personal life would do without at least some planning first? I doubt you would plan a wedding, a relocation to another city, a holiday trip, or any such event without first engaging in some amount of planning.

Suppose you are considering a first-ever trip to Italy. You would plan that–which cities? how long in each city? what’s your budget? and so on would be some of the questions you would consider. Now suppose you are planning your one hundredth return visit to the city in which you grew up. You will even plan this trip–even if the extent of that planning is to decide you don’t need to plan at all.

Planning is the act of thinking about the future. Sometimes that future holds risk and uncertainty. In those cases we plan more than when the future is highly predictable as a hundredth visit to your childhood home town would be. When a future activity is highly predictable, planning may consist of nothing more than a few milliseconds of rejecting the need to plan further.

Of course on a software project it is rarely this simple.

What about estimating? Do we really need to estimate? Yes, because estimating is a pre-requisite to planning. You cannot plan without estimates in mind. Those estimates may be very informal and very implicit. As I write this I am on a flight to California. Before boarding the plane I got cash from an ATM. I estimated my upcoming need for cash to do that. $200 should do it. That estimate took less than a second and I was perhaps not even conscious of it, but it was made.

When a product owner says, “I’d prefer to add this feature rather than that feature,” the product owner is acting with at least some implicit estimate (perhaps guess) of how long each will take. When a programmer chooses late in the day to fix a bug rather than start a new user story before going home, that programmer has made an implicit estimate that fixing the bug fits better with the hours left in the day.

Teams that say, “We won’t estimate. We’ll just make every user story the same size,” are estimating. They are estimating that this user story is the same effort as all other user stories. I’d even argue that it’s harder to make each story the same size than it is to use a small range of effort sizes on various stories.

These estimates must be made. Yes, they can be subconscious but they are made. Those who blog and post to newsgroups saying “estimating is waste, don’t do it” are ignoring these types of estimates.

But are these casual, perhaps subconscious, estimates OK? Wouldn’t teams be better with formal estimates?

Perhaps but not in all cases. A team should estimate and plan only to the extent that further investment in estimating and planning will lead to different actions. If you will do the same thing even if you estimate or plan more, stop. But if further planning is likely to lead to better decisions (more confidence in a delivery date, better prioritization of functionality, or so on), then estimate and plan further.

As an example, we recently added quite a bit of functionality to this website to support our new eLearning course on Agile Estimating and Planning. I did not ask the programmer who did that work to give me more than cursory estimates. I’m still enough of a programmer to have an idea how long the new features would take. I’ve worked with him long enough to know how fast he is. Asking him for detailed estimates would not have changed anything about that project.

So estimating and planning are necessary. They can (and should be) lightweight. You should stop when further planning is not likely to lead to improved decisions worth the extra effort.

Re: Agile contracts

Alistair Cockburn -

Nice round up.

Payment per story points seems the best to me.

I like the idea of paying 5% if delivered on time. That could be a bonus split for the team.

Thanks for sharing!

-by MarcoBarbosa on 4/29/2010 at 5:33 PM


I am still partial to #1. I do not believe in charging for time, only results. Billing by the hour is inherently unethical.

-by Mark Richman on 4/30/2010 at 9:43 AM


@Mark — charging for time is not unethical, it’s just a kind of agreement. It’s appropriate when the customer can’t or won’t define precisely what they want in advance.

-by xpmatteo on 6/24/2010 at 10:53 AM


I read somewhere that we should have a higher price per story point in early sprints and a lower one in late sprints (since the idea of Agile is to deliver the most value early). Does anyone have some experience with this ? Do you know about any formula to put this in place ?

Regards,
Chris

-by Chris on 7/7/2010 at 6:27 AM


Good question, Chris … I have an idea, just for fun – how about reversing that logic and charge less for early sprints and more for later sprints, to entice customers to get their value quicker, up front, and to quit the product development sooner, as the value/feature starts to drop off? Encourage the behavior we want to see?

Any thought? :)

-by Alistair on 7/7/2010 at 11:10 AM


I am battling with one central problem in agile: how do you remain “agile” and open to change when you’re working against a fixed budget and defined scope, and a customer who is not a “software person”.

We use an adapted version of SCRUM for web development, which is part-software and part-design. Our customers have only a limited interest in being involved in the project. They want x by x date. But they also want to make changes along the way.

So do you baseline the project against the original scope document? And then measure each change impact on the budget?

It’s driving me kind of nuts — how can you merge an agile process with a non-agile budget?

-by Jarred Cinman on 11/25/2009 at 1:38 PM


I think Earned-value and burn charts (discussion: Re: Earned-value and burn charts) and http://en.wikipedia.org/wiki/Project_triangle might help you.

Also: don’t be afraid to say “no” to the customer. Every time you say “yes” to the customer you lose a bit of control over the project. If you say “yes” too much the project will spin out of control.

-by Floyd on 11/26/2009 at 7:18 AM


Thanks, could be a nice data for my benchmarking in the subject of CM.
LSS Expert – IECOACHdotCOM

-by Johan Wennermark on 9/21/2011 at 2:55 AM


bonuses and penalties can be a useful way to motivate the service provider but in the final analysis they really just change the arithmetic, not the approach; supplier cost and customer benefit progress/regress in a linear fashion. shift to marginal thinking, e.g., deliver early/at better quality/etc. and I will increase your marginal rate of return; deliver late/worse/etc. and I will decrease your marginal rate of return. With this model, the supplier is motivated to be more efficient, not just faster. Customer gets lower overall cost; supplier has strong motivation to deliver at or above expectation and strong motivation to avoid delivering below expectation.

-by Ken on 11/28/2011 at 3:21 PM


bonuses and penalties can be a useful way to motivate the service provider but in the final analysis they really just change the arithmetic, not the approach; supplier cost and customer benefit progress/regress in a linear fashion. shift to marginal thinking, e.g., deliver early/at better quality/etc. and I will increase your marginal rate of return; deliver late/worse/etc. and I will decrease your marginal rate of return. With this model, the supplier is motivated to be more efficient, not just faster. Customer gets lower overall cost; supplier has strong motivation to deliver at or above expectation and strong motivation to avoid delivering below expectation.

-by Ken on 11/28/2011 at 3:51 PM


I have participated in a Swedish market initiative to establish general terms for agile projects. I have in this work introduced a new term called “Spare timeboxes” (or spare Sprints). The purpose of these are to allow limiited scope creep. Number of spare timeboxes needed in a project depends on the uncertainty of requirements.

It’s also possible to agree incentives models based on use of spare timboxes.

A preplanning would require a definied timebox sequence, also including thes spare timeboxes. Based on this sequennce and assumed resource utilization it’s poosible the agree a goal price.

-by Lars Wendestam on 2/6/2012 at 8:52 AM

Release Duration and Enterprise Agility

Scrum Log Jeff Sutherland -

You ever wonder why your cellphone Apps seem like they have a new version every day or two? Dan Greening doesn't have to wonder, he knows why, they make better products, faster. - jj


Short release duration—the time from starting development on a feature set until it is tested for value, for example when customers pay for an upgrade—is an implied goal of agile methods and lean product management. Short release durations help companies test market theories to maximize profit, identify and mitigate deployment and usability problems, exercise the entire value chain of internal processes, and diagnose accumulating technical debt.


Attempting to reduce release duration may help drive agile behavior through a company. Shorter release durations motivate automated testing, high-availability architectures and streamlined configuration and deployment.


As an added bonus, release duration can be easy to compute: Finance departments often collect relevant data to satisfy capitalization and depreciation rules.
Citrix Online release duration history


After Citrix Online adopted Scrum [suth2011] and Enterprise Scrum [gree2010], release duration dropped from an average of over 35 months to less than 4 months, better than what it had as a small startup. Its market share rose during the same period. Data from another company, PatientKeeper, also seems to indicate that short release durations correlate with more profitable outcomes.


On February 7, 2012 at 11:00am EST, Scrum.org will host a webcast where I will explain how to measure release duration, how different forms of technical debt cause release duration to increase, and how limiting release duration can motivate paying down technical debt. Click here to register for the webcast.


On February 27 and 28th, 2012 in Los Angeles, Jeff Sutherland, Scott Downey and I will be teaching techniques to help you achieve similar outcomes, at our Certified ScrumMaster course in Los Angeles, . Click here to register for the Certified ScrumMaster course.


Dan Greening is an agile management consultant, specializing in enterprise-level agility, lean product management and finance. Dan joined Citrix Online in 2007, and became its Director of Engineering Productivity and User Experience from 2008 to 2011. He developed an agile portfolio management process. Dan co-founded several startups. He has been Principal Investigator on three National Science Foundation SBIR grants. He holds a Ph.D. in computer science from UCLA. Dan can be reached at dan@greening.org.


References
[gree2010]
Daniel Greening, “Enterprise Scrum: Scaling Scrum to the Enterprise Level,” 2010 43rd Hawaii International Conference on System Sciences (HICSS), Koloa, Kauai, Hawaii January 5-8, ISBN: 978-0-7695-3869-3 (10 pages)
[suth2011]
Jeffrey V Sutherland, D. M. van Solingen and Eelco Rustenberg, The Power of Scrum, CreateSpace (2011), ISBN 978-1463578060.


The Importance of the Product Owner

Scrum Log Jeff Sutherland -


Scrum Inc.'s Christine Hegarty wrote this today, just before she went on vacation, of course, so I'm posting it for her - jj
Here at Scrum Inc. we've been thinking a lot about the role of Product Owner recently. It's something that we see a lot of companies struggle with. It’s common knowledge in the Scrum world that a good Product Owner will increase revenue by keeping the backlog ordered so that we are producing the higher value sooner.  But just how they accomplish that isn't always clear. So we decided to offer the definitive Product Owner classes to help educate Product Owners on how they can increase business value and revenue. I've been working with Catherine Louis, CST, to launch our first Boston-area CSPO this month. At the beginning of March, Jeff will be teaching the Product Owner course he has developed in Los Angeles. 
In building the class, Catherine and I have spent a lot of time discussing the importance of the role to a great Scrum implementation. The following passages reflect some of our conversations about the role of the Product Owner and I thought they would be interesting for the community to talk about.    Q:  What is it that makes the Product Owner (PO) role particularly challenging? A:  The PO is the person who can answer this question: "Is this the right thing to do for the customer?"  That's a tough job!  The PO is someone who is market facing: he's able to craft and relay a vision. The PO is someone very close to the customer; the PO is the owner of a Product Backlog and focused on bringing value (and "delight!") back to the customer. He is also responsible for keeping a Product Backlog ordered such that the items at the top of the backlog are sized appropriately for the team to begin working on, and are ready to be taken in for the first Sprint. This is a role that can't be done alone: the PO is considered part of the team, and may need to have many stakeholders assisting in ordering the backlog, making sure we're taking into consideration the Pareto factor: i.e., the top 20% of the backlog should contain the highest value.

Q:  What are some of the key pitfalls? A:  Typically we meet new POs moving from a culture of traditional batch/phased development, dealing with larger and specialized teams, with a goal of upfront perfection and "requirements sign-off".
In traditional/waterfall development, the churn of requirements is discouraged, and there is a perfect plan and associated goal to deliver value at the end of a Release.  We cannot discount the massive cultural change needed to manage a Product Backlog that is emergent. We want to see a flow of value, customer collaboration, self-organized smaller and integrated teams, with value driven incrementally.   The cultural shift is one that moves us from crafting a fail-safe plan we want to execute and deliver at the end of a release, to a "safe to fail" framework where we learn and improve each iteration. Making this cultural shift allows us to turn this expected requirements churn into our competitive advantage. Q: So this cultural shift involves a lot more people than just the Scrum Team, including the Product Owner...
A:  The PO is key to the transition to Agile, but because it is a change of mindset for the whole organization, and a lot of players need to be involved from the beginning, roles not normally thought of as Scrum roles. Supporting roles in particular, should not be forgotten.
Take HR for example. We're now formed in self-organizing, self-motivated and self-managed teams, and the reward structure needs to be updated to acknowledge and reward team performance. Imagine what might happen if that doesn't change. Take Project Management:  We're now formed in these same teams, yet there is a Project Manager who is acting accountable for results asking for daily status reports in weekly meetings.
In making a decision to move from traditional/waterfall product development to Lean/Agile/Scrum, I recommend looking at everyone who is involved from initial decision, to delivery of value to the customer. Do not forget the cadre of supporting roles who need to be there as Servant Leaders to remove impediments, clear the path, and support the flow of value (the deliverables) to the customer.  Everyone needs to be on this page: For every decision you make, every day, ask yourselves "Is this the right thing to do for the customer?"  If the answer is "no", then don't do it. If the answer is "yes", say "hell yes!" and do it right away.  If the answer is "I don't know", take the decision to the Product Owner.
Catherine's Boston Product Owner Course will be held on Feb. 14-15 in Boston. Jeff Sutherland's Product Owner Course, for those of you on the West Coast, will be in Los Angeles Mar. 1-2.


Basic use case template

Alistair Cockburn -

Humans and Technology Document TR.96.03a, April 26, 1996, October 26, 1998

Version 1: April 26, 1996
Version 2: October 26, 1998

Note 2001: In my book Writing Effective Use Cases I made a couple of small changes to these templates, most notably renaming “Failed End Condition” to the more correct ”Minimal Guarantee” and “Subvariation” to the more correct ”Technology and Data Variations List.” The book discusses the meaning of these more correct terms. Since most of the action is in the scenario writing, the template as placed in this file will still do you good.

Note Oct 2008: template formatting screwed up by Media-Wiki. see if http://www.cs.colorado.edu/~kena/classes/6448/s01/examples/edmonb3.pdf still has the old versions in the pdf file.

Per popular request, I am putting forward a basic template for use cases matching the document “Structuring use cases with goals (discussion: Re: Structuring use cases with goals)”, HaT.TR.95.1 (available at the same address and web site), and the course / tutorial of a similar name. This document is copyrighted by Humans and Technology as HaT technical report TR 96.03a, also found at http://alistair.cockburn.us. You have permission to copy and distribute the documents as long as you reference the source of the originals. You may use the templates in courses and presentations with proper reference. You may use and vary the template on your projects without reference. Do note that the template may evolve over time according to your feedback. Additions to the text may appear in italics, like this (added, v.2).

The template has the sections: name (which is the goal), goal in context, scope, level, trigger, pre- and postconditions, main course, extensions, sub-variations, and other characteristic data for the use case. You may__easily graft more information on to the end, or omit information. To help you decide when to omit information, I include a section on [#TAILORING Using, Staging, Tailoring the Template]. The base template is given twice, once in simple word-processing format and then again in table format so you can choose the one that best suits your tool set. _Personally, I find that people work best with the simple text format._You will find that the collection of use cases is easier to work with in something like Lotus Notes than in a word processor.

In this version of the template, I write Sub-Variation as an attempt to make it more distinct from Extensions. Refer to the original paper.

Using, Staging, Tailoring the Template

My (and others’) experience is that at early stages of the project the template is too long and too complete to fill out all at one time – at the beginning of the project, it is appropriate to work with less information (see the chapter, “Managing Precision, Accuracy and Scale” in my book, Surviving Object-Oriented Projects). Therefore…

1.

Learn to fill in all the fields of the template in several passes, at several moments in the project’s requirements gathering and project setup work. Here is a sample sequence. First, fill in just these fields, for all the use cases you need to consider at this time:

Use Case: <number> <the name should be the goal as a short active verb phrase>

Goal in Context: <a longer statement of the goal, if needed>

Scope: <what system is being considered black-box under design>

Level: <one of: Summary, Primary task, Subfunction>

Primary Actor: <a role name for the primary actor, or description>

Priority: <how critical to your system / organization>

Frequency: <how often it is expected to happen>

2.

Stare at what you have so far. Think. Examine. Can you merge or remove some of them? Can you partition them into ones that should be developed together, or written later? For the ones you determine to pursue now, fill in the following fields:

Trigger: <the action upon the system that starts the use case, may be time event>

MAIN SUCCESS SCENARIO

3.

Now you have enough information to check your project’s scope and look for surprises. Before you are done describing the system’s functioning, you have to fill out:

EXTENSIONS

SUB-VARIATIONS

Superordinate Use Case: <optional, name of use case that includes this one>

Subordinate Use Cases: <optional, depending on tools, links to sub.use cases>

4.

You now have the system’s functionality captured. *When you are ready to work on your estimations, *fill in:

Performance Target: <the amount of time this use case should take>

OPEN ISSUES

SCHEDULE

5.

Finally, *when you are in the final stages of project estimating, you need to *identify all the systems to which you will have to build interfaces. *Fill in:

Channel to primary actor: <e.g. interactive, static files, database>

Secondary Actors: <list of other systems needed to accomplish use case>

Channel to Secondary Actors: <e.g. interactive, static, file, database, timeout>

Sample Use Case Template

Use Case: <number> <the name should be the goal as a short active verb phrase>

CHARACTERISTIC INFORMATION

Goal in Context: <a longer statement of the goal, if needed>

Scope: <what system is being considered black-box under design>

Level: <one of: Summary, Primary task, Subfunction>

Preconditions: <what we expect is already the state of the world>

Success End Condition: <the state of the world upon successful completion>

Failed End Condition: <the state of the world if goal abandoned>

Primary Actor: <a role name for the primary actor, or description>

Trigger: <the action upon the system that starts the use case, may be time event>

MAIN SUCCESS SCENARIO

<put here the steps of the scenario from trigger to goal delivery, and any cleanup after>

<step #> <action description>

EXTENSIONS

<put here there extensions, one at a time, each refering to the step of the main scenario>

<step altered> <condition> : <action or sub.use case>

<step altered> <condition> : <action or sub.use case>

SUB-VARIATIONS

<put here the sub-variations that will cause eventual bifurcation in the scenario>

<step or variation # > <list of sub-variations>

<step or variation # > <list of sub-variations>

RELATED INFORMATION (optional)

Priority: <how critical to your system / organization>

Performance Target: <the amount of time this use case should take>

Frequency: <how often it is expected to happen>

Superordinate Use Case: <optional, name of use case that includes this one>

Subordinate Use Cases: <optional, depending on tools, links to sub.use cases>

Channel to primary actor: <e.g. interactive, static files, database>

Secondary Actors: <list of other systems needed to accomplish use case>

Channel to Secondary Actors: <e.g. interactive, static, file, database, timeout>

OPEN ISSUES (optional)

<list of issues about this use cases awaiting decisions>

SCHEDULE

Due Date: <date or release of deployment>

...any other schedule / staffing information you need…

Sample Use Case

Use Case: 5 Buy Goods

CHARACTERISTIC INFORMATION

Goal in Context: Buyer issues request directly to our company, expects goods shipped and to be billed.

Scope: Company

Level: Summary

Preconditions: We know Buyer, their address, etc.

Success End Condition: Buyer has goods, we have money for the goods.

Failed End Condition: We have not sent the goods, Buyer has not spent the money.

Primary Actor: Buyer, any agent (or computer) acting for the customer

Trigger: purchase request comes in.

MAIN SUCCESS SCENARIO

1. Buyer calls in with a purchase request.
2. Company captures buyer’s name, address, requested goods, etc.
3. Company gives buyer information on goods, prices, delivery dates, etc.
4. Buyer signs for order.
5. Company creates order, ships order to buyer.
6. Company ships invoice to buyer.
7. Buyers pays invoice.

EXTENSIONS

3a. Company is out of one of the ordered items:
3a1. Renegotiate order.

4a. Buyer pays directly with credit card:
4a1. Take payment by credit card (use case 44)

7a. Buyer returns goods:

7b. Handle returned goods (use case 105)

SUB-VARIATIONS

1. Buyer may use
phone in,
fax in,
use web order form,
electronic interchange

7. Buyer may pay by
cash or money order
check
credit card

RELATED INFORMATION

Priority: top

Performance Target: 5 minutes for order, 45 days until paid

Frequency: 200/day

Superordinate Use Case: Manage customer relationship (use case 2)

Subordinate Use Cases:

Create order (use case 15)

Take payment by credit card (use case 44)

Handle returned goods (use case 105)

Channel to primary actor: may be phone, file or interactice

Secondary Actors: credit card company, bank, shipping service

Channels to Secondary Actors:

OPEN ISSUES

What happens if we have part of the order?

What happens if credit card is stolen?

SCHEDULE

Due Date: release 1.0

Pages

Subscribe to Torak - Agile Coach and Trainer in Phoenix Arizona (Scrum, Kanban, XP) aggregator - Agile Blogs