Tuesday, November 2, 2010

I am DONE

Last month we were debating hard about Honoring the commitment in one of our Team Talk session. Since we felt that many of us struggle with the same when it comes to action. Honoring the commitment, ha? while it is easy to commit anything to anyone, it is hard to honor the same, since it requires a disciplined and determined effort to achieve it. One of the major part in honoring the commitment is, to know when we are actually DONE with our commitment. Without that we will never know if we have honored our commitment or not.

We have been suffering a lot recently with an off-shore development company to whom we have sub-contracted our Flash development work. The struggle was when they say the tasks are DONE, and reviewing their "so called DONE" tasks always surprises us with the half-done and half-tested code. We have shed our blood to mentor them on what to do. As a result, they added an extra care and effort, only to defend that the 60% completed is equal to 100% completed. Cool ha? Realistically, they did not know the meaning of DONE.



Many used to say, This issue is RESOLVED, but need to check the impacted areas; This code is 100% DONE, but it has to be tested; FINISHED the user story, but UI is pending; I have COMPLETED the task, but...; and much more to convey that they have finished the assigned task. Verifying this would only let you taste the surprise since you will witness the half-baked solutions or deliveries which are extremely useless (ie, 'done' followed by 'but' = incomplete). This has become a common habit now in the industry and dilutes the real meaning of DONE. In other words, DONE has simply lost it's identity.

It is quite interesting to know, why we do this. The reasons maybe,

Lack of experience (Thinking that the task has been completed, without knowing what is left).
Lack of planning (Skipping the checklist to finish the tasks due to the time pressure).
Showing off (To prove that they can finish faster).
Lack of confidence (Taking short cuts to keep the job).
Over confidence (as time flies, the steps are skipped in the process).
Ill attitude (No passion, doing work for a sake, does not care about what is being delivered).
or Simply they have no clue on what they are doing.

Whatever maybe the reason, as a result, we end up delivering a half-understood, half-coded, half-tested and half-documented solution which will only question the reason for our existence as a professional. Hence, before saying "I am DONE" it is important to know whether you are really eligible to say it or not. So, what DONE really means?

There were times, we used to release software to production in the middle of the week and wait to fire fight the issues over the weekend. If no issues are reported for a week, we call it as a successful release. Is this known as DONE? or feeling confident about the release even before it was released. Is this called DONE? or does it mean when...

All code has been reviewed and checked in? All ATs have been validated, bugs found and reported? The client has approved the features? The product is LIVE? All features are documented?

Actually, DONE simply means that at the end of any task it has been completed with no leftovers, no dependencies and simply the task will never come back to us or we do not have to work on that again. The task could be anything like requirement gathering, development, testing, R & D, communication, prototyping, deployment, documentation or even writing an email. There are different roles and responsibilities in an organization. DONE at every level will mean differently.

When a Developer says that a feature is DONE, he mostly means, that all the features are implemented and the feature is ready for further enhancement, refactoring and thorough testing.

When a QA tells that it is DONE, he means, that the features have been tested, bugs reported in bugtracker, tested the resolved bugs, handed over to UAT.

When a Customer/Manager hears DONE, he mostly expects that the product is ready to be released to production.

So, it is obvious that the meaning of DONE varies on a case by case basis and at a different level. Not only at a role level, also varies at an organisation level. Every professional is unique, they have different experiences and see the software development from different angles. This diversity can lead to have a half-tested, half-documented, half-optimized and eventually half-ready components for the release. Which results in a poor quality in the end product. Hence, there is a real necessary to define what DONE really means to the whole organisation with a checklist to follow. Say for example,

Developers should consider things DONE only when...
requirements are understood; analysed; suggested options to implement the best and improved usability; doubts clarified; tasks split in detail; estimated; unit tests written; coded; integrated; migration done; required languages supported; code reviewed; cross browser supported; unit tested; reviewed all the acceptance criteria for all scenarios; installation/uninstallation scripts written; checked everything into repository;

QA should consider things DONE only when...
requirements are understood; analysed; suggested options to implement the best and improved usability; doubts clarified; written acceptance criteria; smoke tested the features in QA; acceptance criteria checked; boundary values checked; impacted areas checked; usability checked; translation checked; security checked; performance checked; cross browser compatibility checked; reported bugs in bugtracker; verified the resolved issues; demo is done; handed over to UAT;

Managers should consider things DONE only when...
objectives set for sprints; priorities set; analysed; designed; coded; integrated; built; installation tested; code/data migrated; features tested; change requests logged, communicated and recorded; communicated delays; risks analysed; contingency planned; issues fixed; ensured quality and value addition; reviewed by stakeholders; accepted by the customer; harvested the sprints/project; features and future enhancements documented;

Like the above example, every professional must have a checklist to tick it off before they say it is DONE. It should be a built in quality in every professional. Even if any one of the items in that checklist is not ticked, the task is considered incomplete. You might come across few missing items in the checklist during the project execution, it is recommended to add that to the relevant checklist as you go by, so the next time it will be taken care.

Partially finished features results in hidden costs to the company with an enormous and unpredictable amount of work. This screws up the release planning efforts and prevents from honoring our commitments. Partially done work often becomes outdated before it's finished, it always gets in the way of other work.

How many times you have hacked (temporary fix) the code and never visited again to fix it for good? How much time you had spent in reviewing and cleaning up your code before submitting to the client? How many times you have worked all the night and in the weekends to complete something and still not satisfied with the delivery? How many times you felt ashamed when the client finds out an obvious issue in your delivery? How many times you had to lie and be dishonest to yourself and the client about your awful planning and delivery? These are the questions that tells us how wasteful partially done work can be.

So to qualify ourselves as a professional, we must always ensure that when we say or consider that something is DONE, mean it and ensure that the checklist defined by us or an organisation has been taken care of, nothing is left over and ensure that the completed task will never come back to us again. After all, we want to deliver quality software to add value to the customer.

7 comments:

Elakiya Natarajan said...

I am DONE with reading this blog anna ;-)

Karikalan said...

Really? have you gone through the following checklist?

- Grasp what is said.
- Ask questions if any.
- Suggest ideas if any.
- Agree or disagree if any.
- Plan to action it.
- Action it.

Until the above is done, the DONE is not DONE :-).

If you have done the above, then you are a professional.

Bharathi said...

I know you are a responsible person , your article second it !

You had all these complaints for the past 6 - 7 years , but nothing has improved till now

When we do the RCA ,

* When an Individual joins an organization , he/she is ready to prove their skills and impress others with their deliverable's . As a time goes , they develop a carefree attitude .This may be because of
a. They observe how their seniors work , inherit some qualities from them
b. Sort of Over confidence developed over the years on the coding skill or the domain knowledge gained ,which make them to miss some scenarios or skip some steps during testing and violating the process


* Leaving behind the reasons you mentioned in your article . The Fore most is reason i think is MONEY.

Organizations always wants to keep their Balance Sheets Profitable !
Ultimately steps taken by organization will be ..

* Quote a low cost to acquire the project
* Less Time Frame to deliver the Project with HIGH QUALITY Deliverable !!!!!

Unfortunately ,they Fail to understand Nothing Comes for Free..
Insufficient Time cannot help team/Individual to Follow the complete process .Instead , Team/Individual is driven to take the short routes ..

For Instnace,
Before UAT , QA tracking sheet will show Acceptance Criteria as 75% , Push hard to achieve 80% ,make it to UAT . Then comes the real problem .
* Breaking of important functionalities !
* Patch it .. Funniest here is even Patch will show its teeth as this have been not validated in DEV environment .

Problem Originates with the
* Organization
* Followed by Managers
* then, by Individuals

But , we should take time to respect and recognize the Individuals who COMPLETE their work,without compromising .

We need to bring a change in Attitude of the Team . Leader Should lead the Team .

Simple , Be honest in our work and Deliverable ..

Who is leader ? A man who follows and make others Follow .

You are one such Leader !!

Vijay Nikam said...

is it just related to checklist? I think there is much more..
there are lot of factors involved in this for which individual and organization both has to contribute

For an individual:
-to keep himself motivated for excellence
-to find ways not to be bored for repeated tasks
-try to repeat successful actions happened in past

For organization:
-to keep employee motivated for doing best
-to assign different areas/activities each time to avoid monotonous activities
-to pull out employee from regular tasks and do different things
And many more…

Karikalan said...

@Vijay, you are right, it is not just about the checklist. As you have rightly mentioned it is much more than just a checklist. However, in SDLC there are many things and factors we need to consider to deliver quality.

However, more than the process, an individual must be self disciplined, a discipline of honoring the commitment, a discipline of meaning what you say.

These days, many of us do work for sake and just want to finish the work somehow, where the quality is let down along with our professionalism. Hence it is important for everyone to understand when they say DONE, what it actually means. One of the way is to know what needs to be done to say it is DONE ;-).

Keep posting your views, it is interesting and informative.

Unknown said...

Pressurizing the developers with last minute changes or enhancement makes the developer to say "I am done with my work" without even a proper testing and impact analysis.


Team lead should own the responsibilty to not change the FS at the time of delievery.

Your post is very informative. I would like to share this with my team mets.

Hereafter I will make sure before I say "I am done" :-)

Thanks kari... keep posting

Karikalan said...

@Bharathi
Thanks for your comments. It was thoughtful and you speak from your experience indeed. Yes, we as professionals need to behave as one to bring in the quality in the deliveries. However, being honest and transparent is a basic quality every professional must have. Also, caring for what is being delivered also is very important.

I (with the help of my colleagues and mentors) am working hard to get to the level to deliver something where I do not have to work on it again, and I am not DONE yet ;-).