After few years of experiencing development in various projects and technologies, I started to think of reflecting my past on what went right and what went wrong in terms of development for self appraisal.
While analyzing I found couple of common things that happens in a life time of a product and people working on it.
Kick off a project – Happy birthday to our new project (Year 0):
Product is getting born, very much in versatile state. Lets name it Mr Perfect. Management bless Mr Perfect to be built with world class code and can sustain any changes in the requirement and will live long and long with good health and bring a very good name to the company.
Best competent people are selected for the team. Everyone in the team are excited about the new deliverable that are planned, we can see the excitement and energy in the team. All are busy in learning a new technology or new version of technology, people come up with different approaches for any given problem. Working with such team seems wonderful.
First release of Mr Perfect (Year 1):
Product has survived the first release and any changes or bug fixes have not effected it. People start working on new requirements and changes that comes from the filed users very positively.
Second release of Mr Perfect (Year 2):
Lots of changes and bug fixes were done, new and new features are getting pushed into the product. Deadlines are short, managers ask for quicker deliveries, customer asks for quicker fixes. People start to doing hard work and ignore smart work to achieve the goals.
Third release of Mr Perfect (Year 3):
The product has grown big with more than half million lines of code. People have created a mindset on which feature is good and which feature is bad ( few techies call it legacy code :) ). The feature that are labelled legacy, is creating panic in the people who are associated with it. If there is any bug raised in it, they start to panic and get frustrated sometimes.
Fourth release of Mr Perfect (Year 4):
Our marketing and requirement guys go to customer to check how do they feel about the product and what else they need. They come up with a big list of new features, scrap some features and list of customer complaints on improper support.
Development team is unable to digest the changes, they start looking for workarounds, hiding some features, implementing new features.
What are the probable outcomes?? any guesses??
Check which all of the below listed would be true.
- A bug fix in one module, starts creating impact on some other module.
- The code is hard to understand, very fragile and not versatile.
- Duplicate code is introduced everywhere, any fixes at one place should be fixed everywhere.
- Performance of the product is very low.
- Loads of memory leaks results in slow performance and crashes the tool often.
- Removing a feature is not easy since some of its classes is used by many of them.
- Development team asks for much higher estimations to achieve even a small change.
- Bugs reported in critical features (Legacy code) are ignored and delayed as much as possible.
- Quality team raises non compliance on some features with more bugs.
- Managers are worried about their competent team.
- Development team suggests lets refactor the features or build a new product.
Blah Blah Blah..
Guess what would happen to such Mr Perfect product or the customers who rely on them?
Has anyone seen these problems in the product?? What went wrong suddenly just last year everything was fine?? Is there any solution for this??
Let me know your comments if you have seen such issues or are living with it or overcame it.
hmm I bet there has to be some solution for such :)
Happy Learning :)