Estimation pitfalls

We live in a society using Gregorian Calendar - what that means is we are used to months having “around 30 days”, and weeks having “always 7 days”.

This knowledge is very useful for estimating the amount of time until someone’s birthday, it just “feels” like a short/long time when you hear the number - your gut insticts tells you “it’s soon, it’s time to buy a present”, or “you have plenty of time to sort this out, don’t worry”.

While we live for some time we get used to this “abundance” of time to sort things out - two weeks is more than enough for almost everything (except buing a house ;) , but the problem begins when you try to apply this “common sense knowledge” to software estimation.

The working week - has only 5 days, and month - usually 21 days.

That is much much less than you “feel” it has!

If you’d estimate something will take “a full week”, which is 7 days, your client/boss will hear “5 days”, which already is 40% longer (7/5 = 140%)!

The same goes for the month, you think “a month, about 30 days” and he hears “21 days”, which is 42% underestimated for the same amount of “time”.

Add to that the slack caused by “getting into the zone” on Monday morning and picking up the stuff you left somewhere on Friday - and you’ll start to feel even more time slips through your fingers.

That might explain why the plumbers charge 40 pounds per hour - it seems like they can earn more than bank directors, but not so when you take into account all the inefficiencies in getting to you (physically) and getting to you (advertising efforts).

That also explains why every project takes a horribly long time - because we have a life outside work :-)

The point is - when doing estimates, use HOURS instead of DAYS as the “Unit of work”.

And don’t assume you’ll work effectively on Friday evenings ;)

Comments

…But why software?

You might think that buying a computer might guarantee you “the experience”, after all - you have all the nuts and bolts under the bonnet, the IT-horsepower that everyone claims to be so powerful.

But a computer itself is indeed just like a car - you have to buy a World for him to drive in. The world itself determines what you can do in your car, where you can get, how fast, its parameters define your speed, range and comfort of your ride.

And sometimes, these worlds simply don’t have everything you dream about - like a Loop of Death or 5-lane motorway with no speed limit.

What’s the point of having a modern car if you can’t use it in the ways you like?

That’s exactly the role of software in Today’s world - to enable us to do things quicker, smarter and provide us with a level of automation of mundane everyday’s tasks.

But do you really need a custom built software?

Not always.

Sometimes it’s enough to have your typical Windows XP machine with Office XP installed and you don’t need much more to do what you have to do - all of these machines have the web browser included which allows them to use the biggest network in the world.

But that biggest network is also a separate world in a sense - and web software gives him a shape. This world seems to gradually take over other worlds, abstracting physical operations and giving them abstract, digital form.

Do you remember your last visit to your bank? I bet you know your last 3 operations on your account though.

Developing software then - is a good opportunity to unleash the creativity in order to make people’s lifes easier and more enjoyable.

It is an art.

Without which we wouldn’t be able to live anymore, being used to our standard of living.

I’m currently in the phase of looking for interesting problems to solve, or new products to develop, so if you have any problems that need tackling - just give me a shout ;)

Comments

When excessive complexity is not excessive

I had an interesting assignment recently, having received a multi-dimensional PHP array (about 4 levels deep) and was supposed to enable editing it - so what might seem obvious is starting like:

I decided to come up with an Object model for it looking like:

And I also created some other classes, representing the sub-nodes of the original data.

But what is most important in that kind of approach:

  • When the original structure changes - I only need to modify the getters/setters in my Object Model!
  • The code is clean and readable, as $element->getName() is much easier to comprehend than $array[”elements”][0][”element”],
  • The rest of your code doesn’t care about the data structure,
  • The OO flexibility allows you to abstract the “data” handling to be compatible with other data sources, e.g. XML files or relational databases,
  • You avoid “offset errors”, when you try to do calculations on a node which comes from different level of the array than you expect it to,
  • No repetition - you define only once “what comes from where”, later on you just user your definitions,

Of course the above sample also needs proper “usage” abstraction, which basically means objects are used according to the business rules, not the “byte manipulation”, e.g.

setFrom($data);
$MainNode->getName();
$Addresses = $MainNode->getAllAddresses();
foreach ($Addresses as $address) {
$address->sendNotification();
}
// and we continue in this matter
?>

The key point of that is to make your code readable - when your method names are obvious you don’t really need many comments in the code - it all seems self-explanatory.

Of corse you should still document any unexpected behaviour and quick hacks - but it’s better not to introduce them in the first place.

Comments

Great debate about using objects/DataSets/Object-Relational Mapping

One of the most interesting articles I’ve read on the subject, on Ted Neward’s Blog.

Reading highly recommended for every developer - but beware the long historical introduction which might not be to your taste (It definitively wasn’t to mine!).

Comments

Hardest part of the SEO

After launching my new websites the first thing to do is to get the search engines actually know and respect them - I’ve done everything I can, set up the meta tags, used appropriate keywords in header tags and inbound links, linked from all the relevant sites, added the sites to the online directories of all sorts - but the biggest problem of the whole operation is - it takes enormously long time to actually see the results.

This is very discouraging, what can be more frustrating than a finished website which noone uses?

I think it was a great idea to actually register the domain names few months before starting work on these websites, so their names could propagate throughout the Internet and accustom search engines with these URLs.

Comments

Zend Studio debugger advice

Whenver you’ll find yourself in a situation where you click the ‘debug’ button in your browser (on the Zend Toolbar) and nothing happens - here’s where you should look:
In zend.ini there’s a line:
zend_debugger.allow_hosts=127.0.0.1/32

Just change this to your IP address and everything should work fine.

I found out about this by reviewing the Apache error log for that domain.

Comments

I think I really am a geek!

How else can you describe the constant nodding while reading an article like this?

Comments

Official start

It’s now official - ReliableSystems.co.uk Limited is now registered since 23/06/06!

Now the top of the TODO list seems to be finding clients interested in making their businesses smarter :)

Comments

Sharing the knowledge

Just a short rant - I find it that quite an amazing number of specialists (developers/designers) isn’t curious about their job and tools they use.

I know lots of people which are too busy working, that they don’t have the time/interest in reading e.g. webdesign magazines (thinkvitamin.com!).

I think it might be the Long Tail I’m talking about, but I always thought that our profession requires constant learning and studying, and promotes curiosity.

If that’s the case - it’s very safe to publish your “tricks of trade” online, because your competition won’t find them anyway - not because they’re well hidden - but because they’re too preoccupied with their “Today” instead of “thinking about Tomorrow”.

That’s the secret of popularity of people like Seth Godin or Guy - they aren’t afraid to share their insight, and people tend to appreciate them for it - even if they don’t agree with everything they have to say.

I have to admit, I find it much easier to follow blogs than reading books, I think the sign of times is - I can actually find Good Content! And learn through the process - I agree, the knowledge IS only partial, but let’s face it - who has time to systemise our whole life? Learning incrementally bit by bit from different areas is so painless that you just can’t dismiss it.

And when you have some newly adapted knowledge - then it’s time to Soak

Comments

Another thought on recruitment

Following up the agencies rant - in the knowledge professions, as software design/development/architecture undoubtedly is - I find attitude more important than the hard technical knowledge.

If you hire a guy which really want’s to learn and allow you to mould him in what you want him to be for the organisation - he’s much more valuable than even the best specialist, but sticking to His Own Ways.

I’m not saying that the experts’ Own Ways are in any way bad or anything - this is the lack of flexibility that I’m talking about - and the willingness to adapt.

My point is - having a guy keen to do “cool stuff”, who doesn’t know (for example) the thinking behind OO paradigm might pay off. After all, it should be sufficient to actually demonstrate to him what’s that about and go through some real life examples together - any smart guy should grasp that knowledge in a short time, and imagine what - that investment not only increases his knowledge, but also motivation to work!

You can’t just “get people to do stuff”, you have to give them opportunities to say: “I can do better!” - and then to actually achieve that.

That achievement takes time and space - but you end up in a win-win situation, having people who want to push forward - and have the know-how.

Comments

« Previous entries · Next entries »