More wise cracks
Extracts from Steve magurie’s Writing Solid Code.

- You don not save time by fixing bugs late in the product cycle. In fact you lose time because it is often harder to fix bugs in the code you wrote a year ago than in the code you wrote days ago.
- Fixing bugs “as you go” provide damage control because the earlier you learn of your mistakes, the less likely you are to repeat the mistakes
- Bugs are form of negative feedback that keeps tast but sloppy programmers in check.If you do not allow programmers to work on new feature untill they have fixed all their bugs, you prevent sloppy programmers from spreading half implemented features throughout the product. They are busy fixing bugs, if you allow programmers to ignore their bugs, you loose that regulation
- By keeping the bug count near zero, you have a much easier time predicting when you will finish the product. Instead of trying to guess how long it will take to finish how long it will take to finish the features. Even better you are often in a position to drop the unfinished feature and ship what you have.
Leadership

Leadership roles by Dr.Meredith Belbin
- Driver : Controls team direction at detailed, tactical level. Defines things, steers and shapes group discussion and activities.
- Coordinator : Controls team direction at the highest strategic level. Moves the problem solving forward by recognizing strengths and weakness by making the best use of human and other resources
- Originator : Provides leadership in ideas, innovating and inventing ideas and strategies, especially on major issues
- Monitor : Analyze problems from a practical point of view and evaluates ideas and suggestions so that the team can make balanced decision
- Implementer : Converts concepts and plans into work procedure and carries out group plans efficiently as agreed.
- Supporter : Builds on team member strengths and underpins their shortcomings. Provides emotional leadership and fosters team spirit. Improves communications among team members
- Investigator : Explores and reports on ideas, developments and resources outside the group. Creats external contacts that may be useful to the group
- Finisher : Ensures that all necessary work is completed in all details. Seeks work that needs greater than average attention to detail and maintains the groups focus and sense of urgency
Classic mistakes in product development
Classic mistakes that one should avoid while developing a product.
- Requirements gold plating.
One should not have more requirements than needed. Right from the beginning of the project emphasis is laid on performance and it is stated as a requirement this leads to unnecessary delay in software schedule. Users tend to be less interested in complex feature than marketing and developers are, and complex feature add disproportionately to development schedule. - Feature creep
In general projects experience 25% change in requirements over its life time. Such changes produce at least 25% addition to the schedule. This is assuming that you are not following the gold plating at requirements phase. - Developer gold plating
Generally developers are fascinated by new technology and are sometimes anxious to try out new features of their language or environment or create their own implementation of a slick feature that they stumbled upon. The efforts required to design, implement, test, document and support features that are not required lengthens the schedule. - Push me – pull me negotiation
The bizarre negotiation ploy occurs when a manager approves a schedule slip on project that is progressing slower than expected and then adds completely new tasks after the schedule change. Then this happens in cyclic fashion - Research oriented development
Seymour Cray, the designer of Cray super computer, says that the does not attempt to exceed engineering limits in more than two areas at a time because the risks of failure are too high. The lesson is having no more than new variable in development of a product.
Team Structure

What can poor team structure do?
The poor team can increase the development time, reduce quality, damage morale, increase turnover, and ultimately lead to project cancellation.
There are three objectives according to Larson and LaFasto (1989) for having a good team structure.
- Problem resolution
- Creativity
- Tactical execution
Problem resolution team focuses on solving a complex, poorly defined problem. The team members need to be trustworthy, intelligent and pragmatic.
Creative team explores possibilities and alternatives. The creative team member need to be self motivated, independent, creative and persistent.
Tactical execution team focuses on carrying out a well defined plan. The team is characterized by having highly focused tasks and clearly defined roles. Success criteria tend to be black and white, so it is easy to tell whether the team succeeds or fails. They also need to have a sense of urgency about the mission, be more interested in action than esoteric intellectualizing and be loyal to the team.
From Steve McConnel’s Rapid Development
How to staff a team?
Staff selection for team projects (Bohem 1981, Software Engineering Economics)
- Top talent : Use better and fewer people
- Job matching : Fit the tasks to the skills and motivation of the people available
- Carrier progression :
Help people to self actualize rather than forcing them to work where they have the most experiences or where they are most needed - Team balance : Select people who will complement and harmonize with each other
- Misfit elimination : Eliminate and replace problem team members as quickly as possible
In addition to these Steve McConnel adds people’s design ability, programming ability, programming language experience, machine and environment experience and application area experience.
Classic Mistakes
Some of the classic mistakes in software development
- Lack of risk management
- Friction between developer and customer
- Planning to catch up later
- Insufficient planning
- Silver bullet syndrome
- Short changed design
- Uncontrolled problem employees
- Project heroics
- Adding people to a late project
- Ineffective project sponsorship
- Undermined motivation
- Overly optimistic schedule
- Short changed quality
- Weak personnel
- Unrealistic expectation
- Code-like-hell programming
- Overestimated savings
- Noisy, crowded offices
- Omitting necessary tasks from estimates
- Feature creep
- Inadequate design
- Lack of user input
- I was here syndrome
- Contractor failure
- Research oriented development
- Switching tools in middle of the project
- Wasted time during the fuzzy front end
- Shot changed upstream activities
From :
Steve McConnell’s Rapid Development
Software evils
These are some of the software evils, better be aware of them as they can come and bite at the last moment.
- Shifting requirements
- Poor schedule estimation
- Unreliable contractors
- Management inexperience
- Personal problem
- Bleeding edge technology failure
- Performance shortfalls
