Software development - A trekker's way
Sunday, April 3rd, 2005I have been trekking for almost the same time as developing software. I have, always been surprised with the similarity I find in these two diverse activities. I have successfully used examples from trekking to explain some process or approach in software development.
The objective of this article is to bring out a few things I have learnt from trekking, which helped me in software development. Right now, I just plan to mention the points here. I would be providing supporting evidence a bit later.
1. Travel light
2. Full upfront planning/design does not work. Take it as it comes
3. Waterfall model does not suit rapid application development. You do more than one thing at a time
4. Highly motivated, self disciplined and self organized team works. Let team members take up roles and rotate them amongst themselves.
5. Communication is the key to success. Keep talking
6. Team composition – mix of experience levels and skill sets works best
7. No silver bullet – Every team has customized the process to their requirements rather than customizing the team to the process requirements
8. Most of the time you have shortage of good resources. Make the best of what you have
9. Early glimpse of desired results helps keeping things on track. Short releases and demos help
10. Feedback is critical to improve. Listen to the code, client, peers, etc
11. As the team size grows the project gets exponentially complex and difficult to co-ordinate
12. Change is inevitable. Being prepared for change by keeping things flexible helps. Early change can save a lot of money and efforts
13. Be ready to throw away and start all over again
14. You cannot freeze on the requirements early, only once the client sees something working, that‘s when they can actually give you the complete requirements
15. The whole team takes decisions and not just the leader. In cases of discrepancies, the leader helps the team to resolve it, rather than taking his or her own decision
16. Clean up the path from harmful things as you trek. This helps to keep the nature clean, beautiful and maintainable for many years. Refactoring the plans, design, code and test-cases helps keeping things intact.
17. Trust the team. Encourage open and frank communication
18. Sustainable pace – Don‘t burn out. Take frequent breaks
19. Optimistic attitude helps
20. Keep the whole team on the same page
21. People on the team should be ready to do different things. Ego has no place. We like specialists who can do other things and also help others learn what they know by pairing and sharing
22. Use quality stuff. Never compromised on quality. Both what you deliver and what you receive. Good chairs, desks, computers, food, etc
23. Start small – Big bang theory does not suit us
24. Practice simplicity. Do the simplest thing first. Also known as KISS - Keep It Simple and Stupid
25. It‘s not just the destination, it‘s the journey too.
26. Live and let live attitude helps. Healthy competition and wiliness to take others along by sharing and seeking helps
27. Retrospectives helps improve constantly
28. Constantly try and improve and optimize things. Try to automate as much as possible
29. Never loose sight of your objectives. Don‘t slip deliverables. Maintain client focus
30. Precaution is better than cure. Have proper safety nets. Be sure before you put your foot down and be extra sure before you lift the other foot.
31. There is always a first time. Don‘t be afraid of failures. It‘s a great learning opportunity
32. Fear and negative energy spread very fast in the team. Do everything possible to keep a check on it
33. We hate wastage. Try to optimize usage of resources
34. It‘s 99% common sense and 1% fluke.
35. If someone things very differently and cannot adjust to the team, it‘s better to ask the person to leave. Helps both the sides
36. United we stand and divided we fall. It‘s all or none. It‘s team and not individuals
37. Its people and not the process that makes things happen. Process can only act like the lubricating oil in the engine. Your chances of hitting the bull‘s eye is much higher with smart people than trying to get the best out of average people
38. Abstraction helps to keep it simple. Details can be added when needed.
39. Coach philosophy does not really work. If the coach cannot play and demonstrate, you are rolling down the wrong path
40. Change is inevitable, be ready to adapt rather than fighting against change.
41. Work with people‘s instincts. When a team member feels that something isn‘t going to work or is inconsistent or it doesn‘t smell right, then there is a good chance that, that is the case. As you gain experience, your instincts become sharper
42. Software development is a craft and software cannot be engineered. Every disciple involves elements of art and science. The science element is missing from software development.
43. Try and be as explicit as possible. Implicit rules trend to be misinterpreted and sometimes misused. Collaboratively develop a list of DO‘s and DON‘T DO‘s. Constantly refactor it and make it part of the company‘s culture.

