Built a corporate payroll, which makes invoicing look like a toy. The project was called C3 and was the first Extreme Programming project.
Our first story, which took less than one iteration to do, was “Calculate Joe’s Paycheck”. Joe got paid some fixed amount of money and we charged him 25% income tax, and printed an actual check.
An invoice, when you get down to it, is a very simple thing. It is an itemized list of goods or services, summed, sent to some entity. The first one might look like this:
BIG COMPANY Invoice
TO: Little Company, 123 Main Street, City, State, ZIP
Dt: 8 Mar 2015
Items
——
$123.45 Thing One
$234.56 Thing Two
———
$358.01
Due Upon Receipt
Working in Ruby, I could create that invoice in an hour. Working in C#, it might take all day. (Sorry about that.)
At the very beginning, I’d be inclined to a one-week or shorter iteration with a handful of decent programmers, and I’d think they could do a bunch of stories like this:
- Produce Sample Invoice shown above for Big Company
- Rudimentary Customer Object (in memory)
- Customer Name, address, …
- List of Items
- List of Customers (in memory)
- Support Quantity larger than 1
- Support Standard Quantity Discount (list in memory)
- Support by-Customer Quantity Discount (list in memory)
By way of comparison, when Chet and I teach a Certified Scrum Developer course, the teams of four to six people produce a payroll system that supports multiple employees, accepts separate hourly rates for each, separate hours in each pay period, deducts rudimentary social security, federal, and state tax, deducts occasional company deductions such as lost badge or purchase of safety shoes, and which produces annual and quarterly running totals of the various numeric fields, by employee and company total.
How much time do they get? We run iterations of about ninety minutes. They complete, typically, a couple of stories per iteration. We generally get two iterations per day, with the rest of the time taken up reviewing test results, doing retrospectives, reviewing the code, and so on.
Teams manage to finish around a half-dozen stories of this nature, doing TDD and ATDD on everything, in about five or six 90 minute iterations.
Every single story they do makes sense to a payroll person and shows visibly correct payroll calculations for multiple employees, starting from the first story.
It turns out that stories can be sliced very thinly, such that every single one can be understood by the domain expert.
Your original question was about infrastructure. Hints were given above: early stories run on lists created in memory. What’s the difference between a list in memory and a database? Well, with even a half-hearted bit of abstraction, there is no difference. Get the next Customer, Fetch his items, Fetch each item details, print. List, database, no difference other than down below.
So a story an iteration or two later becomes:
- Get Customer List from file, or
- Get Customer List from database
- Get invoices …
Once we write the simplest possible loop for invoicing ...
For customer in CustomerList
total = 0
For item in ItemList
Print Item (customer, item)
total += item.price*item.quantity
Print total
… we can elaborate that loop’s details by refactoring and adding new functionality, which will mostly fall in the right place because the overall structure is close to right from the get-go. In other words, we just plug in a different way of getting the customer list and iterating it, a different way of fetching the items and iterating them, and so on.
Teams learn to do this quite readily in a Certified Scrum Developer course, which takes five days. So I’m sure you can do it. It takes practice to get good at it and training generally helps, mostly by getting people past the stage of not believing it can be done.
So my advice is, don’t try to work your way from waterfall to Scrum. Just do Scrum. Finish real business-oriented stories in two weeks. At first, you’ll suck. That’s the point, because soon you won’t suck any more.
Ron Jeffries
I try to Zen through it and keep my voice very mellow and low.
Inside I am screaming and have a machine gun.
Yin and Yang I figure.
-- Tom Jeffries