I am a c-programmer with five years of experience in a commercial environment,
and have become increasingly aware of what I would consider to be a few
failings in the technical processes of our company... but of course I am
just the "junior" developer (don't seem to be able to shake that word from
my official title) and my word is not considered to be more important to
that of the senior developer that I work with (there are only two of us here
- and the java guy who wisely keeps to himself).
I am, of course, under the standard NDA... so of course I can't publically
rant about the problems we're having...
So I've written this *entirely fictional* story about two *entirely
fictional* mud-hut builders for your general enjoyment (and my specific
catharthic requirements).
This story consists of a conversation between a junior mud-hut builder(2)
(of five years building experience) and a senior mud-hut builder(1) (of a
guesstimated 20-30 years building experience) and takes place in the setting
of the sprawling mud-cty in which the junior builder has been working
for the past year and a half.
enjoy,
Taryn East
PS - I'm actually writing up a formal review of the processes in question...
I figure it'll either get me promoted, fired or ignored. In case of the
latter two... does anyone know of any C-programming jobs going in a good
company atm?
*** The parable of the mudpile ***
Copyright Taryn East 2005, All rights reserved.
1- "Well, you grab a handful of mud and slap it onto the ground, then grab
another handful and slap it on top, and keep doing that and eventually you
have a huge, towering pile of mud, which our users can live in!"
2- "...but the structure looks butt-ugly!"
1- "Who cares what that looks like! The user is the only person that matters
and they never see those bits."
2- "Don't the builders have to work here? Don't you think it's a little
stressful for them?"
1- "Pshaw... Real Builders don't care about that - are you soft or
something? Besides, we don't have time to build neatly and it works just
fine, so quit your whining."
2- "but what happens if we want to extend a mudhut? are these designs
extensible?"
1- "Sure it is! We just blow a hole through here and slap on a few more
piles of mud, then clean up the bits from the hole-blowing. Oh and don't
worry about those big cracks over there, we can just put a bit of mud-slip
over them, you'll never notice the difference! Hmmm, maybe we'd better shore
up this wall, it seems to be collapsing under the new weight (oops, didn't
realise that was a weight-bearing wall)."
2- "aren't these things documented anywhere? Even the walls don't have
labels! is there no blueprint?"
1- "No, why would we need that? It's obvious what it does if you just look
at how it goes together! Aren't you a good enough builder that you can just
see how it works without being told?"
2- "Well, yes... but it takes me more time to do that than to read a
blueprint... and if we had a blueprint we could have planned to strengthen
that wall before we blew a hole through it!"
1- "Look, we don't have time for all that, and we don't need it anyway, it
works now, doesn't it? We don't need a planning document - I just figure out
approximately what we're going to do, then flesh it out as I go along."
2- "But what if we come across something that affects everything that you
hadn't thought about? what if suddenly you notice that it's blocking
an emergency accessway?"
1- "Oh we just blow a hole through it and start that bit again... go back to
the drawing-board, if you will"
2- "But if we planned this stuff from the beginning, you wouldn't have had to
do that - I'm sure we'd save more time if we didn't have to do all that
stuffing around and rechanging everything to fit the new stuff... and it
wouldn't be so unstable as it'd be planned from the beginning!
"Oh hey, look at this, isn't this new renovation blocking access to the
mudhut behind it?"
1- "The tenants can climb over that wall... oh, all right, that's an easy
fix we can just build ourselves a bridge over this bit."
2- "Now the bridge is blocking access to the mudhut on the other side, and
it's even higher so they definitely can't climb over."
1- "Well, I'll just give them a rocket-pack. See? We can solve any problem
we need to..."
2- "If we'd planned from the start we could have planned a common accessway
for all of them to use... and that rocket-pack looks a little dangerous, I
think it might have the potential to explode under certain circumstances."
1- "What are you worried about? Most of the time it'll work just fine, you
just need to handle it right."
2- "Are you sure our users are going to always handle it just right? what if
they're not trained in rocket-pack use? Maybe we should just provide a few
safety switches, some checks for overheating or excessive gas-flow and a
flash-back valve or something just in case..."
1- <exasperated sigh> "Oh you're just needlessly complicating things. It is
so unlikely we'd need it, that sort of thing happens so rarely, and it's just
not worth the time to spend to do that - besides, it'd just make it
needlessly complex. Sure, in a *perfect* world we'd have the luxury of
installing thermostats or flow-regulators and flash-back valves, but this is
not a perfect world and we just need to get the job done[1]. I think it's
just fine to light the gas as it comes straight out of the bottle, it's
never exploded the times that I've tested it! You're beginning to sound a
bit green and naive, you know, like you're straight out of university![2]"
2- "Fine, whatever. Anyway, can you tell me where the town hall is?"
1- "Well, the town hall for these huts is that structure over there, but the
huts on the south side needed a differently-shaped doorway to get the desk
in, so I copied the architecture except for the door and built them another
one for their use. Oh, and when that other builder was working on one of his
developments he didn't realise we already had a town hall..."
2- <sotto voce> "...I wonder if the lack of doco has anything to do with
that..."
1- "...so he built one on his own, which is in a completely different style."
2- <sigh> "So we have three different town halls all performing roughly the
same functions but with minor differences. Why don't we knock them all down
and replace them with one *common* town hall and a couple of minor notaries
that just look after the regional differences?"
1- <look of horror> "But they're working as they are! And that'll cost us
time and money!"
2- "...but it's costing us more time and money to maintain three different
ones, if a new common function is needed, we have to add it to all three!"
1- "You *obviously* don't have the end-user in mind do you? it's not
important for us to focus on fixing the architectural situation here, it's
only important what the end-user sees!"
2- "but if we fixed the way the architecture is laid out it'd be much
quicker to get around between the important bits of town and fix stuff that
the user does need... or to add new mudhuts for the users to use... and that
sort of thing is something that the user notices because it'd take so much
more time for new buildings to be built."
1- "Our users are happy enough with how long it takes. We just need to throw
a few more mud-hut builders at the problem... but that's all we need. I'm
sure if we had more builders we'd have no problem getting everything we need
done quickly."
2- "But aren't there a bunch of other property developers down the road? If
we can build our mudhuts faster thqn they can, then we'd certainly atract
more users than them. Besides, you're not going to attract that many
builders if the city is such a mess... it's just going to demoralise anyone
working here."
1- "Again with the wrong attitude! I've already told you - that stuff the
user never sees anyway! The builders don't matter either, any Real Builder
should be able to cope with this... you just must not be able to cope with
stress or something."
2- "But there *are* things that the user sees. The mudhuts don't have a
common look and feel so the user gets different things depending on where
they are in the city, and some of the buildings are begining to crumble to
pieces they're so old! and they're covered in ugly patch-jobs from years of
quick fix-up jobs, and that's even ignoring the old shag-pile and art-deco
on some of the older mudhuts..."
1- "We're getting rid of that - aren't you working on that next-generation
paint project?"
2- "Well yes but... the paint in some places is part of the structure of the
walls... it's kind of hard to separate one from the other in places..."
1- "oh stop whining already... so, we have old huts. As I said, it works, if
we need to fix a crumbly bit, we just slop a bit *more* mud-slip over it...
we don't have time for radical renovations right now..."
2- "Yeah, but what happens when we *do* need to renovate for our users?
Remember the big ASIC development that was so bad we had to bulldoze the
lot? Only after it was razed to the ground could we start over from scratch.
Some of those huts had the paint as an integral part of the load-bearing
walls! But the problem is that we're still using that construction technique
in some of our new mud-huts! Surely if we designed our new projects better
it'd be easier to adjust to new requirements..."
1- "Look, it's just quicker to paint the walls if you just dump it into the
mud as you go along! Besides, the ASIC cleanup was a one-off... we won't
ever need to go to *that* extreme again, surely!"
2- "I don't know, some of those other old devlopments look a little
bricked-in... if we ever needed to upgrade them like we wanted to upgrade
the ASIC development..."
1- "Look, you're getting out of scope again. The city is fine. Sure it has
its "legacy buildings" but we'll deal with them when we find time. Our
processes are much better these days!"
2- "really? Last project I was on I was told to go extend the PCI building.
I was told it was mostly done and that I should "just finish up the bits
that hadn't been done yet".
"Of course it took me a while to figure out where everything *was* and
how it all hooked up because there wasn't a clear blueprint so I had to go
over the building inch-by-inch and figure out what each bit did. oh and the
dumb-waiter to the FT building didn't have clear instructions either - it
looked like it was written from the perspective of a servant working at the
FT building, we had to figure out how to work it from our end.
"Once I figured out how it was all supposed to go together I started
working on the bathroom out the back, and connected up the pipes where they
were supposed to go, but when I turned the taps on, I found they only worked
half the time - and only when you went through each room in the building in
the right order, turning the taps on as you went... took me quite a while to
fix all the plumbing to make the water accessible from any tap in the house
independantly. It took me a *long* while, and needed a few walls moved as
they were blocking the pipes, and I started to get vague hints that the
site-manager thought I was taking too long. I got comments like "Boy I will
be glad when the PCI building is done, our users are really eager to move
in!"... which just added to the stress, of course.
"Eventually I came to realise that the half-a-building I'd inheritied
didn't do half the stuff it needed to do, and even the bits it supposedly
could do, didn't work as they should. For one thing, there certainly weren't
any locks on any of the windows to stop burglars from getting in.
"Yet I sure get the feeling that how long it took must be reflecting
poorly on how my building abilities are percieved by others - especially the
site-managers as they couldn't tell how bad the building was to begin
with... after all, they only had a brief look at the exterior and it looked
about right..."
1- "Well, why *did* you spend so much time refactoring the original hut?
Sure it was a bit of a mess, but surely you could have just put some
extensions on what was already there. I mean rebuilding the plumbing may
make it look much prettier, but we just don't have that luxury! A few more
pipes round the outside of the building would have worked too and would have
been done much quicker for our users!
"Let me tell you a parable: there was a man who needed to build a new
room on his house. He could have just knocked a hole in the wall and added a
door and added the room as an extension, but instead he bulldozed the whole
house to the ground and rebuilt the house from scratch, which cost him so
much time and money!"[3]
2- "That's not a fair comparison! To start with, it wasn't like the house
was already working - I couldn't just build a new room onto it. Secondly, in
the end it wasn't just another room, it turned out to be another 3 stories
to add on top! Let me tell you that if you try to build a multi-storey
building on top of a flimsy foundation meant for only a one-storey mud-hut,
your multi-storey building is going to topple over sooner or later! Thirdly,
it's not like I trashed the *whole* house, I reused some of the mud-bricks
and the kitchen stayed the same... I just noticed we didn't need five
different external stairwells when we only needed one common one and rebuilt
that section around just one of the more sturdy stairwells so all the floors
had access to it.
"Besides, this building is meant to be the centrepiece in the new Grand
Vision for our devlopment company isn't it? The future rests on it working
well and being extendible as time goes on - surely we should take the time
to make it right!
"As a project, it was a dreadful schermozzle and I still think I should
have just started from scratch and salvaged the useful bits instead of
having to do multiple refactor-renovations of the original ad-hoc version.
Of course now you've handed me another dodgy mudhut with the planned Bureau
flats..."
1- "Yeah, but that hut was just a quick-and-dirty mudpiling... to get it
working"
2- "Yeah, but the site-manager doesn't seem to realise that, he just looks
at the outside and sees that water and power go in and the sewer is being
used... he doesn't realise what a nightmare it is inside, and now he tells
me to build another five storeys on top of that!"
1- "Well, all you need to do is add another pipe around the outside to
attach to the plumbing, and another for the sewer, and just extend it a bit
more - you don't even need to add them as storeys on top, you can just add
the rooms on the side..."
2- "but I've already worked out a neater blueprint - one that will allow the
building to be extensible to any height, and it'd be much easier to just do
it this way... surely when we're basically right at the start of a new
development we should do it right the first time."
1- "Yes, but this building already works and your plans are untested... they
might have a bug in them and you'd waste all that time testing and redoing
bits that are already done."
2- "Yeah, but won't be much extra time, and it'd be much easier to fix the
place in the future, if you use my plans - for a start there's actually a
blueprint which explains where everything is, so we can go straight to where
the problem needs to be fixed.
"Secondly, there's a common modularity to the way the floors are
constructed. The bathroom and kitchen are always over on the left - even if
they have different fittings inside it means we only need one set of pipes
and power conduits going up the middle of the building. I've also built it
so that each floor can have their pipes sealed off form the other floors.
This means that instead of the fifth floor taps only working if the fourth
floor taps are also working (and so on down the building). We can completely
seal off one level if the tenants move out, or even add a new level on top
of the building if we need another one. We don't even need to worry about
jerry-rigging up new sewer pipes around the outside of the building - you
just do a few minor connections for water, sewerage and power, do the
fittings on the inside and away you go!
"Anyway, what's this you said before about testing for bugs? our testing
process is pretty haphazard when you think about it..."
1- "What do you mean haphazard, we have clear processes! You test that it
works, then the site-manager tests it, then the user-help manager tests it,
then our "preferred users" get to move in and check if anything is broken,
before letting in all the other users."
2- "So where's the bit of paper that explains what we're all testing *for*?"
1- "Oh, come-on, *you* know what you wrote so you should know what to test
for... and the site-manager knows what the project is about, so he knows
what it should do - what do you need a bit of paper for?"
2- "Well actually I *don't* necessarily know what to test for. There's that
bit of a mud-map that the site-manager drew for me when he handed me the
project, but it only shows the basic overall outline of the building and a
few things like "there should be a sewer pipe"... and nothing at all about
what it should be like. I have to make up all the details as I go along...
1- "...but, but... the site-manager isn't supposed to write a proper
technical spec... he doesn't know how..."
2- "Why that's right... that should have been your job...
<pregnant pause>
"As I was saying, there is no formally-accepted functional or technical
specifications for each project. I've started writing these - those are the
plans I mentioned for this bureau development... but if I just adapt
something that's already partly-completed, my plans won't be meaningful and
I never got plans for the building that was already there..."
1- "I'm a senior architect - I don't need those plans, and you can just tell
from my code what it's supposed to do. Anyway, most of our projects are too
small to bother with going through all that trouble."
2- "Even a small project could benefit by having some sort of guidelines on
what is expected of it - and thus what to test for. Then we can later check
that the project actually achieved all the goals... but only if we have them
written down somewhere."
1- "but the overall goals *are* written down, the details don't matter.
Besides, if we miss anything, it'll get noticed at *some* stage of the
testing process - that sort of thing is generally pretty obvious."
2- "Well, not necessarily. Not if we haven't noted it down to make sure we
remember to look for it. Do we really want to run the risk of something
falling through our process until our *users* find the error?"
1- "What's wrong with that? Our users should enjoy being part of the
process... it makes them feel like they have "ownership" of the development
process."
2- "Hmmm, a user unexpectedly falling through the floor is not going to help
our company image any - especially if we find out that it's because we're
missing a necessary structural brace we just forgot to check for before we
let them into the building."
1- "Oh, so what you're saying is that you don't test thoroughly, is that it?"
2- "No, I think I do the best I can, given the situation. But I'm only human
- I make mistakes and I should have a bit of backup. Besides, I've gotten so
used to the building that I don't even notice anymore that I tiptoe along
the support-beam and don't ever walk over the unbraced-bits. I need a second
pair of eyes to go over the stuff I've grown too used to seeing."
1- "So what, you're expecting me or the site-manager to do your testing for
you? But we're paid much more than you are, we shouldn't have to do that
sort of grunt-work!"
2- <frown> "Apart from the decidedly negative connotations inherant in what
you just said... no, I don't expect *you* to do it. I merely mean that we
should consider hiring a professional tester to sit in between me and the
site-manager in the testing process..."
1- "What, hire more people? we're having a hard enough time trying to find
builders as it is for the jobs we already know need filling, and you want us
to start thinking about *new* positions?"
2- "Well... maybe if we cleaned up this city a little, we'd make it more
attractive to good builders..."
[1] alteration of a phrase our senior developer used when I tried to
convince him of the benefits of modular programming and error-checking on
magic-length char buffers...
[2] the actual epithets he gave me in the same conversation... At that point
I had 3.5 yrs of commercial experience...
[3] actual parable the senior developer told me when I suggested refactoring
part of the code... clearly demonstrating that he didn't understand what
"refactoring" meant - or that he'd asked me to do more than just add a
single room. It also didn't take into account the sprawling horrors that had
eventuated from five years of these kinds of extensions...
--
This .sig temporarily out-of-order.
We apologise for any inconvenience
- The Management
--
SLUG - Sydney Linux User's Group Mailing List - http://slug.org.au/
Subscription info and FAQs: http://slug.org.au/faq/mailinglists.html