Friday, May 25, 2018

Change During Development Is Inevitable

Change will happen so prepare for it. (Posted by Jerry Yoakum)

Software will change during development! The changes might be refactoring code, adding new tests, changing requirements, or adding new requirements. The changes could be as simple as fixing bugs, or general improvements.

Prepare yourself for changes by making sure:
  • that all software development is appropriately cross-referenced,
  • that change management procedures are in place, and
    • Establish SCM Procedures Early*
    • Give Every Intermediate Product a Name and Version*
    • Rank and Schedule Change Requests*
  • that budgets and schedules have enough leeway so that you are not tempted to ignore necessary changes just to meet budgets and schedules.
    • Don't Set Unrealistic Deadlines*
    • Avoid the Impossible*
    • Avoid Standing Waves*

Reference:
Bersoff, E., V. Henderson, and S. Siegel, Software Configuration Management, Englewood Cliffs, N.J.: Prentice Hall, 1980, Section 2.2.

Thursday, May 24, 2018

The More Seen, the More Needed

Give 'em an inch and they'll take a yard. (Posted by Jerry Yoakum)

"The more functionality (or performance) that is provided to a user, the more functionality (or performance) that the user will want."
Which supports:
More importantly, you must be prepared for the inevitable requests for more.
  • Documentation should be organized in such a way that it is easy to update and add to.
  • Establish SCM (Software Configuration Management) Procedures Early.
  • Systems and processes in place to handle the users' requests.
  • Design so that configuration is quick and easy.


Reference:
Curtis, B., H. Krasner, and N. Iscoe, "A Field Study of the Software Design Process for Large Systems," Communications of the ACM, 31, 11 (November 1988), pp. 1268--1287.

Monday, May 14, 2018

Grow Systems Incrementally

Add functionality a bit at a time. (Posted by Jerry Yoakum)

Reduce risk when building a software application by growing it incrementally. Start with a small working system with only a few features. Then incrementally add new features working toward the final functionality. This helps lower risk with each build and provide the customer information about the product over time. The downside is that if an inappropriate architecture is used early on, it might be incompatible with later features and require a redesign. This risk can be reduced by building throwaway prototypes of all the major features early on.
To everyone familiar with the Agile Methodology you'll no doubt see the similarities.


Reference:
Ruskin, R., Debugging Techniques in Large Systems. Prentice Hall. Englewood Cliffs, NJ, USA, 1971.

Sunday, May 13, 2018

Plan to Throw One Away

You'll end up throwing away the first system so just go ahead and plan for it. (Posted by Jerry Yoakum)

A highly critical factor in the success of a project is whether the project is entirely new. New software treads in new territory and rarely works on the first try.

In 1970, Winston Royce said one should plan for the first fully deployed system to be the second one created. The first is a prototype that flushes out the critical design issues and proves the concept. You should expect to spend 25% of your time and effort in making the prototype. Fred Brooks reiterates Royce's advice in the Mythical Man Month saying, "Plan to throw one away; you will anyway."

When developing a new software application:
  • Plan to build a series of throwaway prototypes before starting the final product.
  • Expect a software application to be modifiable for a certain period of years, after which it will need to be fully replaced.
    • Software Will Continue to Change*
    • Software's Entropy Increases*
    • Fix Problems, Not Symptoms*
    • The System's Existence Promotes Evolution*
  • You can only fiddle with an application just so much before it becomes unstable and must be replaced.
    • Software's Entropy Increases*
    • The Older a Program, the More Difficult It Is to Maintain*
    • Maintenance Causes More Errors Than Development*
    • Belief That a Change Is Easy Makes It Likely It Will Be Made Incorrectly*

Friday, May 11, 2018

Align Incentives for Developer and Customer

Align developer and customer goals for project success. To align everyone's goals:
  1. Prioritize requirements.
  2. Reward the developer based on the relative priorities.
  3. Define reasonable penalties for late delivery.

Friday, May 04, 2018

Give Products to Customers Early

Give customers usable products early so you can get real feedback early. (Posted by Jerry Yoakum)

The most effective way to learn users' needs is to give them a prototype and gather feedback from the experience. This goes perfectly with the Agile Methodology to always deliver after each sprint. Which allows for faster feedback and the product continuously moving toward the customer's desired product.


Reference:
H. Gomaa and D. Scott. 1981. "Prototyping as a Tool in the Specification of User Requirements". Fifth International Conference on Software Engineering. IEEE Computer Society Press., Washington, DC, USA.

Thursday, May 03, 2018

Poor Reliability Is Worse Than Poor Efficiency


Poor reliability may not be readily apparent and it may be inconsistent. (Posted by Jerry Yoakum)
Poor Reliability
Poor efficiency is usually consistent and easier to isolate. (Posted by Jerry Yoakum)
Poor Efficiency
Poor reliability may not be readily apparent and it may be inconsistent. The difficulty in detecting poor reliability contributes to the difficulty in finding a fix for the problem. Efficiency, on the other hand, is usually consistent and easier to isolate. Making a redesign or refactor of the code for better efficiency easier than fixing poor reliability. Which "needle" do you think is harder to find?


Reference:
I. Sommerville. 1992. Software Engineering, Section 20.0. Addison-Wesley., Reading, MA, USA.

Tuesday, May 01, 2018

Don't Try to Retrofit Quality

Some work should just be redone instead of forcing it. (Posted by Jerry Yoakum)

It is difficult enough to build quality software from the start of a project. It is much harder to take an existing application and improve it's quality (reliability, testability, adaptability, etc).

This additional difficulty to add quality after the fact is why you must not try to convert a throwaway prototype into a product. Make sure you Build the Right Kind of Prototype.

Thursday, April 26, 2018

High-Quality Software is Possible

It is possible to build high-quality software. (Posted by Jerry Yoakum)

"Large-scale software systems can be built with very high quality, but for a steep price tag".

Developers, to achieve high quality, follow proven techniques to increase quality. These include:
Customers (Product Managers), demand excellence but be aware of the high costs involved.

Great Designs Come From Great Designers

Invest in your best designers to get the best future designs. (Posted by Jerry Yoakum)

The difference between a poor design and a good design may be the result of a sound design method, superior training, better education, or other factors. However, a really great design is the brainchild of a really great designer. Great designs are clean, simple, elegant, fast, maintainable, and easy to implement. They are the result of inspiration and insight, not just hard work or following a step-by-step design method. Invest heavily in your best designers. They are your future.


The Design of Everyday Things