Monday, 11 December 2006

Midget Project Failure

Some time ago I owned an MG Midget that I'd decided to restore.

I started with high hopes - expecting to complete the restoration project in a few months so that I'd be back on the road again by the following Summer. Events, as is often the case, took a somewhat different course.

Everything felt like it was starting off fine, though the breaking up of the old body shell would have benefitted from the use of better tools to speed things along, such as using a generator and power tools to cut up the pieces, rather than hand tools and brute force.

Fitting of the rear springs went well, but I'd not bought the right size of thread taps, so had to move a smaller-sized tap around inside the captive nuts to tap them, clearing away the paint. Using the right size of thread tap from the start would have made the task easier, and I would have been more confident that the threads were tapped cleanly and correctly.

Each of the parts to be refitted to the new body shell was cleaned down, de-rusted and re-painted. Unfortunately, not all of the de-rusting was 100% successful, and there were areas of rust that reappeared through the new paint. Also, the new paint was not always as tough a finish as I'd have liked. Meanwhile, these restored components were gradually refitted to the new body shell throughout the Winter and Spring.

So, I should really have improved on my de-rusting techniques, ensuring that they were completely successful in order to prevent me from having to do the same work to them again, but after having to remove them from the car. Similarly, I should really have improved on my re-painting techniques to ensure that the items were painted well, and that they had a tough, durable finish.

Also, did all refitted items have to be de-rusted at that point? Could they have been fitted in order to facilitate getting the car back onto the road and then restored later on?

Similarly, did all the items have to be fitted during the Winter and Spring? There was less natural light during those months, and the air was damp. If I'd prepared the parts to be fitted, and saved them up to fit them in late Spring and Summer the air would have been dry and the light better, giving me better visibility for the job, and less chance of trapping moisture that would cause rust later.

Whilst I was cleaning down and de-rusting the old parts, I saw how some components could be modified to improve the overall result - upgrading to newer parts, installing additional gauges, upgrading the suspension, modifying parts. Again, did these all have to be done at that time? Admittedly these were the exciting things, rather than the regular restoration, but they were a distraction from the goal.

Though, what was my goal? Was it to get the car running again by summer? Was it to perform a concourse-level restoration? Was it to perform an good restoration and to improve the car to my own specification? Admittedly, the goal was unclear, and the lack of clear objectives distracted me.

As the months went by, they turned into years. I changed jobs, and had less time to devote to the restoration project. Then the enthusiasm went - there was no real result for all those years of effort. The car may have been 90% complete, but the last 10% was feeling far from achievable. Doubts also began to creep in, with me worrying about whether I had done a good job on the car in the early stages, particularly on the vital structural pieces. These doubts were also fuelled by the fact that various adjustments had to be made to get pieces to (almost) fit into place.

Eventually I realised that I just did not have the time to complete the project, and I did not have the inclination either. So, away the car went, sold as an incomplete restoration project.

I learned a great deal from the experience, and not just about bolting parts together.

I learned that this project had failed because of a failure of project management.
  • The goals were unclear - car on the road by the Summer, or car restored to concourse style?

  • The un-clear goals meant that there was no clear plan. With no clear plan there was scope creep - in came all the little "nice to haves"; those shiny parts and new instruments. Without a clear plan there was no clear schedule for preparing parts in Winter and fitting them in the dry and light of the Summer.

  • Quality control was not clear from the outset. There was no clearly defined quality standard for the use of the right tools, and the quality of the restored parts being refitted. If quality control is not established from the beginning, then it means that extra work is required to be undertaken later on to verify and/or correct earlier quality issues.

  • The unclear goals meant that there were no clear deliverables. There were no iterations identified for getting the car on the road (almost as a working prototype) then building up from there with the additional features. An iterative approach would also have boosted my confidence with my project-sponsor's hat on and boosted my confidence with my project worker's hat on

So, there I left a failed project, but I came out of the experience wiser.

Wednesday, 26 July 2006

Magyar Muddle

I'm in a dilemma over Hungarian notation.

Should I use it or not?

My intuition says, “No.” But various coding styles where I work suggest using it.

However, I’m drawn towards it for web form controls, but only ever so slightly, and it was a long time ago that I formed that opinion. Since then my feelings on variable-naming have annealed.

Using an IDE such as Visual Studio and programming in C# which is strongly-typed, there is no need to signify the type of a variable in its name. The IDE ensures that only the correct operations are performed on the variable for its type.

There is also the inherent contradiction in coding styles that use Hungarian notation for types in the .Net framework System namespace, but not for other classes in other namespaces.

In a weakly-typed language, using Hungarian notation is a great help in reducing errors because there is no IDE to stop you adding a variable representing a Boolean value in one scenario to a variable representing a series of digits in another scenario.

Though I’m also drawn to using Hungarian notation for the same fundamental data but represented in different data types, such as when a number is represented as a String and an Int32 in two different variables. I can live with this as a contradiction because it is a rule designed to seek clarity with the basic non-Hungarian standard.

So, my feelings on Hungarian notation are:

In weakly-typed languages, use Hungarian notation.

In strongly-typed languages, do not use Hungarian notation, except when the same fundamental entity is being represented by variables of different types.

Now I just have to convince others...