Saturday, May 27, 2006

Dark secrets of software development in Dilbertian World

Dilbertian is the word I coined after "Dilbert" a cartoon character from Scott Adams's popular series. Dilbert can be any one of us, innocent engineers surviving in harsh software industry that is overwhelming us with ever increasing cutting edge and obsoleting technologies.

Software Reuse
Yesterday phase 4 of my project was completed. Today I am hearing loud voices from all quarters and all stake holders of the project - senior management, quality group, middle level managers, every body screaming "reuse". I always wondered what happens to millions and zillions of code that gets churned out year after year. I hear a loud voice, "let us put all the reusable code in a reusable portal". I was asked to package whatever I had developed and upload it to the reusable portal. It was beyond my own comprehension, how could my software artifact that was created in such a short time with adequate short sightedness, ever be reused across other unrelated projects in the organization. Me being a little more owlish and curious from the rest of the lot decided to investigate on the new "reuse" bug that has bitten everbody alike. Here is the best ever and precise definition on reuse that I discovered while skimming through those high brow IEEE, ACM journals - "Reusable software is a piece of software that was designed for reuse in the first place". Now it made a lot of sense. I realized that reusable software is a time consuming task requiring lot of foresight to create one and hence no silver bullet. Nobody has time in software. Based on my intuition and gut feeling (note: if you are a budding manager you could replace words like 'intuition and gut feeling' with 'recent survey and statistics' or '80:20 rule'), I can say that 80% of software developed is all garbage, never gets to market. In real world if you can produce recyclable garbage it is still worth something. Eureka!! Have I just invented a new methodology "Recyclable design" that would create revolution after "Extreme programming" and "Agile development process"? You should be hearing soon about my book on "Recycling the recyclable software".

Bugs & Bugs
What is a bug? Bread and butter for many of us.
A short sighted design is the biggest BUG! These bugs are like time bombs, when they explode the industry breathes a new life. Ask an Y2K engineer if you dont believe me! Sometimes diffusing such a bomb is also an expensive affair, especially when it takes herds of programmers to search and replace 2 digits with 4 digits!

My worst ever nightmare is developing zero defect software - Anonymous (I am sure it is not Mr. Bill Gates)

Exercising restraint during non-productive hours of your work schedule is an effective bug prevention technique.

My earnest plea to the developer folks worldwide "At least, please don't let the same bug bite you twice"

Extreme Programming
Extreme programming is all about developing bugs in pairs while the bugs are simultaneously being ignored by the testing folks. Bugs in requirements, design and implementation all occuring in parallel streams! This methodology is suitable for hyper-enthused customers who derive a false sense of security by seeing bugs from day ONE and thinking that they have detected those very early in the software cycle. It does not mean i dont give a shit about these so called software life cycles and methodologies. I do believe good software evolves over a period of time. I have great respect for maintainence though I have not had the oppurtunity to work on a maintainence project. I see maintenance as myself evolving as an intellectual or otherwise. Why does a maintenance engineer curse me instead of being grateful to me as my presence bestows him with purpose, meaning and the means of living?

Software Metrics
The metric to measure your quality = bugs created during bug fixing / bugs fixed ;

Software Design
Two Motivations
Design a new problem - IPv6
Design a new work around for an old problem - Network Address Translation

Universal Survival Tactic
FAQ Monkey: Designer, programmers, testers, managers, Which one of them is GOD?
Crazy Naren: It depends! I mean my answer would depend on who you are!

Very early in my career I was considered a Wiz Kid blessed with all the brilliance. Soon I realized my brilliance had a direct relation with my over usage of "It Depends". There aint such a thing called free lunch. There is no perfect answer! So you can always get away answering something like : "It depends on what processor you have, the disk capacity and what power management technique. blah.. blah..". Well You have answered with out answering!

Career Advise
In order to be successful in retail Market, the mantra is 'Customer is GOD' (ask WalMart)
In software, customer is guinea Pig' - (Ask Microsoft)
In hardware, OEM is guinea pig reseller.
OEM is the one to whom you sell guinea pigs in bulk (Ask Broadcom or Atmel).
OEM also gives his name (brand) to your guinea pigs!! Hope I helped you in making a career choice;-)

What is the difference between MNC and a startup? Its always 80-20!
80 engineers vs 20 managers in a startup as to 20 engineers vs 80 managers!
It is not surprising result because "3rd Party", "out source" are key words in an MNC where as "Indigenous", "Open Source" are key words in a start up .

Project Management
The best way to way to counter mis-management is not through transparency but by abstraction!
Project planning/resource scheduling is analogous to elasticity - after a break point it will break or more scientifically it is non-linear. I believe that Good software takes time as Brooks in his classic 'mythical man month' points out - you cannot put nine people to produce a baby in a month. The point is, it is pointless to add extra resources beyond a point in order to speed up execution! However with a sophisticated automation (cloning) in place you can provide thousands of babes oops I mean babies!

SDLC (Software Development Life Cycle)
Customer asked for a human baby. Engineering team proposes two approaches
1. Darwin lifecycle model - We will provide monkey's baby which can be used for phase 1 and later migrate to a chimp in phase 2 and then probably human baby in phase 3
2. Customer fleece Model- We can provide pre-pre-beta baby clone engine that can clone existing baby but require funding to support cloning technology.

No comments: