Hi,
One of my current projects is a development I'm doing at home, almost by
myself. I do have a customer (which is why this is 'almost' by myself), but
he's a thousand KMs away, in Auckland. I do know the problem domain quite
well though (Internet Payment Systems).
I have sat down with my customer, and created stories. This has helped with
a few things, but primarily with scheduling. Our expectations of
functionality were very similar to start with (as I say, I know the domain),
so the stories exist just for planning. I don't need the conversations about
requirements, because of my prior experience, so I don't need the customer
onsite for that. I do need feedback though, so I regularly (at least once a
day), send up the stuff I'm working on, and let him have a good look at it.
I'm still writing tests up front, but sometimes I forget, and let it slip.
For example, because of a refactoring to remove duplication I created a
utility class and created a class method (java):
boolean between(int subject, int lowerBounds, int upperBounds)
It's so simple that I didn't bother writing the test first. I didn't run the
tests either, because it's such a simple change. I then performed another
refactoring, and boom, a large portion of tests failed. I, naturally,
assumed that it was my latest refactoring that had caused the problems, and
wasted half-an-hour looking for it. Of course, I'd written the simple
between method, and created a bug. A test would have found it immediately
(I'd transposed the comparisons with the upper and lower bounds).
If I'd been pairing I never would have written the utility class without the
tests first, and I wouldn't have made the coding mistake (or if I had it
wouldn't have even got as far as compilation).
So, working alone lowers my productivity, and raises the potential for
defects.
I'm still testing, and refactoring. I'm still using stories, iterations (1
story per iteration, as it happens), constant integration (this is
automatic, as there is 'only' my code). I even have a metaphor, it's quite
poor, for the bit I'm working on now, it's a WWII carrier pigeon with a
ciphered message (I'm currently working on the financial comms bit).
Simplicity has carried me far, and I'm paying special attention to YAGNI, as
I know that I have a tendency to assume the opposite when working by myself.
My work is top down, thus allowing me to drive from a needs context.
Working alone affects my ability to refactor. I have now got a fairly large
code-base that I've put together in a relatively short time. It's beginning
to confuse me.
I'm about half way through an infrastructure spike. I'm doing enough only to
a. prove the viability of the comms (upon which the system is based), and b.
perform a single simple transaction, with no exceptions. I currently have 40
classes (10 GUI, used as a driver, and will form the basis of Customer
Tests, with no unit test). With these classes I have 30 unit test classes,
running nearly 150 tests and around 200 assertions.
In a week this should have doubled. Refactoring this lot by myself is
difficult. Tool support is very poor for java. I did have a trial version of
jFactor, but I wasn't impressed. It only offers a handful of refactorings. I
use JBuilder 5, and if I had time I'd write something myself, but I haven't
and so I can't.
Of course, I'm working through it. I can do it. It's just frustrating, when
I know how much faster, and how much easier this would all be with just one
other person. I feel like I've been cut in half, like my brain is numb
(maybe it is:).
So, working by myself I find it literally impossible to do XP, because I
can't pair, and therefore, by definition, this isn't XP. Pairing adds so
much to a project. I didn't realise how much it adds, until I had to do
without it, on this real, complex, project.
I don't thing that there can be an adequate substitute for a good developer
to pair with, offering reminders about your current goals whenever you get
sidetracked, taking over when you pass the 1-hour concentration point,
remembering the things you've forgotten (even the short term memory stuff).
I'm doing the rest of the XP stuff, but this isn't XP, not by a long shot.
So, can XP be done on your own? No, it can't, but you can create an agile
process of your own, utilising many of the practices of XP. I personally
have never experienced a better way of developing software on my own
(despite my frustrations), but it isn't as good as developing in pairs.
See ya,
Bryan
The difference between me and the other surrealists is that I'm a
surrealist.
- Dali
b r y a n d o l l e r y | c e o
c h a o s e n g i n e e r s
+64 (0)21 330607
http://www.ChaosEngineers.co.nz
[Non-text portions of this message have been removed]