Wednesday 14 March 2012
How well do you handle truth?
Saturday 17 September 2011
The Agile Pyramid
(The story is not mine, but this is the best analogy I've known for Agile.)
There were two pyramid contractors in Egypt (guys who built pyramids for a living that is) and they are both hired by a really old pharaoh for building one for him. His requirements were.
1) It should be the biggest possible pyramid that can be built
2)It should be ready when he is dead.
Contractor A: Decides to build the largest pyramid ever. Bigger than the biggest. He estimates that this would take him a year with the laborers that are available to him.
Contractor B: Has a good long look at the pharaoh, and realizes that the pharaoh may not last that long, maybe a month or two. He decides on an interesting approach. He decides to build that largest possible pyramid that he can build in one month. The next month, he’ll build an even bigger one on top of that, the month after, an even bigger one.
The pharaoh died in 3 months.
Thursday 1 September 2011
The obvious and not so obvious benefits of Test Driven Development
The benefits are obvious and also not so obvious.
1. Big picture thinking. As you write your test case, you start thinking more about how your application is supposed to behave. You start catching gaps in the specification well ahead of implementation and integration.
2. Test coverage happens automatically, since unit testing is no more an afterthought - test code is the fist thing you write. By the time you are done with your application, you are left with a test suite that covers every line of code that your wrote.
3. Effective multi-tasking. Most important but not so obvious, TDD helps the developer focus on one thing at a time and there-by multitask effectively. Good multi-taskers possess a knack for dividing their time among multiple tasks throughout the day, while giving their undivided attention to each single task when they are at it. The challenge, where most people fail is in dividing tasks into small enough and un-ambiguos units, with un-ambigous results. TDD, I've found helps a great deal in this. Each test case defines an unambiguous unit of work, with an unambiguous result - the test either passes or fails.
4. Context switching. Another not so obvious benefit - even if you are distracted during your work by something urgent and you pick it back up hours or even days later, you know exactly where you left it by simply running your test suite and checking which test case is failing.
For a detailed reading on the subject>> http://jamesshore.com/Agile-Book/test_driven_development.html
Thursday 25 August 2011
The good mentor
1. Putting the interest of your junior ahead of yours. If your mentee fails, then you take it as your own failure. You stand up and take the blame.
2. Don't mentor someone just to meet your own "mentoring targets", but because you genuinely want to bring someone up to your level. Your meeting your target or not is simply a by-product.
3. Be patient. Spend time, teach, guide, show the way sternly as you would do to your own son or younger brother. But if you see your efforts are not bearing quick results, don't lose your patience and give up on him or her. Try again. Maybe you are not doing it the right way.
Sunday 31 January 2010
Work and life
This is what he said, "If ever there is a choice in front of you between life and work, consider this - imagine, God forbid, you get run over by a truck on your way out of work today, your company can probably find a replacement for you within days. Not your family."
Saturday 23 January 2010
The fundamentals
A programmer who knows how each line of his code really works, can crack a bug by simply reading over the code he wrote.
A doctor who knows how a wound is formed, can heal it in weeks.
A bowler who knows how reverse swing really works, can produce it at will. (okay he may need some luck too:))
I'm guessing, life, works pretty much the same way; if you are strong on the fundamentals, there probably is no unsolvable problem.
Sunday 25 October 2009
The partial solution
One question though that I often get from people, even very close friends and family, is how do you think this so and so group or activity will produce any positive change - I'm sure anyone involving in voluntary activities would have faced these questions from people around them. We for example get questions like, what effect do you think cleaning up the museum campus on one Sunday will have? What use is it talking to a handful of people about the ill effects of burning plastic?
Tough (not impossible) questions to answer, but I always felt there ought to be a very generic answer. What follows is the generic answer:
***
Given a problem, social or otherwise, there are some fundamental questions you have to ask yourself.
1. Does this problem bother you enough so that you want to do something about it?
A)Yes
B)No
If your answer is (B), then you can live with the problem, you can ignore it. If you have answered (A), then it follows that you have to do something about it, there are two questions here -
2. Do I have a complete solution to offer?
A)Yes
B)No
3. Is there a partial solution which I can offer my support to
A)Yes
B)No
(The partial solution here is partial because it doesn't solve the problem completely. A solution that introduces another set of problems doesn't qualify as a partial solution for the purpose of this discussion)
If you look are most social problems, you may end up answering (B) for #2 and (A) for #3.
i.e. There may not always be a perfect solution, but there are almost always a few partial solutions.
Now, coming to the point. If you answered (A) to question #1, and (B) to question #2, and (A) for question #3, i.e. if there is a problem that really bothers you, and all you have are partial solutions, then the best option is to strive to find the perfect solution, while at the same time, committing yourself to the partial solutions that are available.
If you do not agree, then probably you have not been totally honest in answering question #1:).