Never use a shared database server for development work.

Like many conveniences in software development, a shared database is a tar pit waiting to fossilize a project. Developers overwrite each other’s changes. The changes I make on the server break the code on your development machine. Remote development is slow and difficult. Avoid using a shared database at all costs, as they ultimately waste time and help produce bugs.

Requirements Gathering

Just as there is no one right programming language for every application, there is no one right way to develop the more detailed specifications. Different environments call for different techniques, and the requirements managers and requirements writers will probably need to develop a mix of skills suited to various circumstances.

Software Development Process

The team’s development process defines who is doing what, when, and how.
In the waterfall model, software activities proceed through a sequence of steps, with each step based on the activities of the previous step.
The spiral model begins with a series of risk-driven prototypes, followed by a structured waterfall-like process.
The iterative approach, a hybrid of the waterfall and spiral models, decouples the lifecycle phases from the software activities that take place in each phase.
No matter what model you use, you must develop at least one early prototype to get customer feedback.

Why can we not allow for a process that creates detailed requirements and design information for each feature so that we can create more meaningful estimates?

Some people may think that the best way to estimate a project is to have detailed requirements and design information for each feature. They may argue that this is the most professional and accurate way to approach the problem. However, I disagree with this view. I think that it is more important to be able to make quick decisions about the scope of the project without spending too much time and resources on detailed estimates. Why? Because detailed estimates often turn out to be wrong or irrelevant later on, and they create “wasted inventory” that could have been used for more valuable activities. I’d suggest you only do detailed estimates when the schedule allows for it, and when you have a clear understanding of the value and priority of each feature.

The "Yes, But" Syndrome

One of the most frustrating, pervasive, and seemingly downright sinister problems in all of application development is the “Yes, But” syndrome, being the observation of the users’ reaction to every piece of software I have ever developed.

For whatever reason, I always observe two immediate, distinct, and separate reactions when the users see the system implementation for the first time:

• “Wow, this is so cool; we can really use this, what a neat job, atta boy,” and so on. • “Yes, but, hmmmmm, now that I see it, what about this … ? Wouldn’t it be nice if … ? Whatever happened to … ?”

Productivity of all Individuals vs. Team Productivity


Software development is a complex and collaborative process that requires effective teamwork and communication. However, many software teams struggle with productivity issues and fail to deliver high-quality products on time and within budget. In this post, I will discuss why team productivity is more important than individual productivity, and how you can improve your software team’s performance by applying some proven strategies and best practices.

The Importance of Team Productivity#

According to Boehm, the COCOMO cost estimation model shows that the capability of the team has the greatest impact on software production. This means that the quality and efficiency of the software product depend largely on how well the team works together. Davis agrees with this conclusion and states that “optimising the productivity of all individuals does not necessarily result in optimising the productivity of the team”. In other words, having a team of highly skilled and productive individuals does not guarantee a successful software project. There are other factors that affect team productivity, such as communication, coordination, collaboration, motivation, and trust.