Sunday, March 21, 2010
Take your time to pay for this technical debt, but let me know how you would prevent it in the future!
The idea is that: Part of fixing a problem is preventing it from re-occurring.
This does not mean that technical debt will not re-occur; it means that the specific issue that caused this type of technical debt should be resolved from the roots and hopefully not re-occur.
This way of thinking is a characteristic of high mature organizations.
Technical debt is not bad!
Actually, this is not true. Refactoring is a constant effort done by the development team even with the most intelligent designs. Developers (and their designs) matures "while" working on the project. This maturity emerges from that following facts:
- The level of understanding of the business domain gets clearer.
- Seeing the design at work develops more brighter design ideas.
- Development work is the most effective learning experience for developers. So, the more you develop, the more you learn about design concepts, and the more you see opportunities for improving the existing design.
Thursday, March 11, 2010
Software Development does not follow any predictable manufacturing process rules
Reflecting on these differences, it is so clear that Software Development does not following the rules of Predictable Manufacturing defined processes. This is because Software Development is an innovative, intellectual, and usually creative effort that cannot be govered or managed by any strictly defined process. True!
Something came to my mind while reading this, which is how to improve both types of processes.
For any defined process (predictable manufacturing), it is improved by getting it more and more defined to account for new special cases, or new causes for variation.
For any empirical process (new product development), it is improved by enhancing the feedback control system, which steers the development effort, and upon which everyone in the development team should depend.
Imagine what would happen if software is developed without such feedback control system?
In a next blog, I will give examples of famous mechanisms which implements these feedback control systems in software development.
Wednesday, August 19, 2009
Why collect measurements?
- To track your project. A basic task of any software project manager is to track the project progress. Examples are the defect rate, the size of finished functionality versus not finished. A very good technique which reads this measurement and displays it in a graphical format is the burn-up/burn-down charts which are heavily used in Agile development.
- To improve the process of producing software. Very similar to six-sigma projects, CMMI level 4 and 5 have techniques which starts with an evidence of a mal-functioning process (most commonly supported by measurements).Then, it digs into the root causes, and suggests corrective actions. Finally, it designs measurements to quantify the impact of corrective actions, and start over again. This ‘Continuous Improvement’ cycle is one of the techniques used in any engineering discipline.
Wednesday, August 12, 2009
What to keep in mind while designing your measurements
- Motivate the team to work towards achieving better measurements.
- Motivate the team to record measurements more accurately.
- Get the team to the point that they trust the value of the measurements as a means for project management, and as a means for process improvement.
- More process Patterns, by Scott Ambler.
- Rapid Software Development: Taming Wild Software Schedules, by Steve McConnell.
Sunday, February 8, 2009
Why process is important from day 1?
Sometimes we here some devastating (yes literally devastating) ideas like:
- Process is pure overhead.
- Process is discovered while working on the project (after we start the project).
- Let’s start coding, we will refactor anyways.
- Just jump in the code, things will get crystallized as you go.
The problems of such sayings is that it tempts poor developers to start a project with the unhandled risks inherent in the software development endeavor.
Famous processes like RUP markets for itself as “a risk removal process”. Agile methods assume to mitigate many risks of software development, even if not having a list of risks which we keep an eye on, which is true in my humble opinion.
The fact of starting a project without a clear view of how to do configuration management, how to do estimation, how to document requirements, how to involve stakeholders and get feedback on requirements, when and how to test, what are the bugs types, and which of them are to be fixed first, how, when and by whom architecture and design is going to be done, how to do tracking and what measures will indicate progress, how you will handle change, and many others. The fact of starting the project without a clear answer of such questions is pure act of failing the project, causing some persons to suffer sometime of their lives and get disappointed and demotivated at the end of the way (the developers), and causing others to lose some money, lose business opportunities, and lose trust in software development teams (the customers).
I hope this is a clear answer to the question. Please take some time and think of how you will develop software before you take the responsibility of any projects.
The next question is: Does process limit develop creativity? This needs a separate post.
Wednesday, January 28, 2009
All of them are victims, the customer, and the development team!
Wednesday, October 22, 2008
Customer and Project Team Bill of Rights
Steve McConnell, in his excellent book Software Project Survival Guide, mentions a set of rights that should be respected for both the project team, and the customer who owns the product. Please spend some time reading them carefully; this is a prescription for project success.
Customer's Bill of Rights
I have the right:
- To set objectives for the project and have them followed
- To know how long the software project will take and how much it will cost
- To decide which features are in and which are out of the software
- To make reasonable changes to requirements throughout the course of the project and to know the costs of making those changes
- To know the project’s status clearly and confidently
- To be apprised regularly of risks that could affect cost, schedule, or quality, and to be provided with options for addressing potential problems
- To have ready access to project deliverables throughout the project
Project Team's Bill of Rights
I have the right:
- To know the project objectives and to clarify priorities.
- To know in detail what product I’m supposed to build and to clarify the product definition if it is unclear.
- To have ready access to the customer, manager, marketer, or other person responsible for making decisions about the software’s functionality.
- To work each phase of the project in a technically responsible way, especially to not be forced to start coding too early in the project.
- To approve effort and schedule estimates for any work that I will be asked to perform. This includes the right to provide only the kinds of cost and schedule estimates that are theoretically possible at each stage of the project; to take the time needed to create meaningful estimates; and to revise estimates whenever the project’s requirements change.
- To have my project’s status reported accurately to customers and upper management.
- To work in a productive environment free from frequent interruptions and distractions, especially during critical parts of the project.
It is top priority for managers to spread this atmosphere of mutual recognition of rights. Customer, as well as project team, sometimes denies other’s rights. The customer should ensure that he is available to answer the team’s questions. Many a time, I keep waiting many days to book a meeting with the customer or even get an email feedback from him. On the other hand, customers sometimes suffer from project teams not reporting to them the true status of the project. Many things like that take place, resulting at the end of an unsuccessful project end.
Monday, August 18, 2008
Why Requirements Change?
Two reasons govern this change:
Rule #1: No Customer fully understands the requirements. At best, the customer understands the business problem; and in most cases, he cannot articulate it. What should be done is to implement part of the requirement (potentially the user interface), and let him work on it for a while to get a feeling of the solution, then start a second round of analysis.
Rule #2: the Customer is not a single person. This is always overlooked. This is why RUP says that the customer community should be dissected into groups, and each group should have at least one representative in the customer group.
The project leader/manager/master (call it whatever you like) is the responsible person to enforce these two rules. For the first rule, he should break down the vague requirements into small ones and plan for several iterations, after each of them, he goes back to the customer and get more feedback. For the second rule, he should make sure that all groups of users are represented in the customer group.
Monday, August 11, 2008
Pulling Requirements Analysis out of the project lifecycle !
The answer is yes and no. It is very important to distinguish two types of analysis, Business analysis and software analysis.
Business analysis should be a fast, lightweight, and continuous activity. The outcome of this activity is semi-analyzed requirements which are ready to be developed. Also, these requirements should be fully characterized in terms of customer priority, marketing impact, and technical risk, and any other requirement property that the organization sees important for planning. These requirements are backlogged till the team (customer and development) is ready to work on them.
Next, once a new project is to start, several requirements are pulled out of this backlog and they start getting developed. The strategy of selection depends largely on the business priority, and the technical risk. In other situations, it may depend on other requirement attributes, like the size, stability, et cetera.
What I have described so far is all analysis work that should not be considered part of a software project, and in the meanwhile, it constitutes about 60% of the analysis work.
On the other hand, there is still some analysis work that should be done on the project. This work is done by the developers who are going to work on design and development of the requirement. They should work face-to-face with the customer or may be a subject matter expert to dig into the details of the business, They should also make some prototyping and simulation to verify that the non-functional requirements will be met.
In all cases, they need to develop an iteration, deliver to the customer, and recieve feedback. This is all part of the analysis effort. See this post for more details.