- Prioritize requirements.
- Reward the developer based on the relative priorities.
- Define reasonable penalties for late delivery.
Jerry Yoakum's thoughts on software engineering and architecture from experience working with code, computer science, python, java, APIs, NASA, data mining, math, etc.
Friday, May 11, 2018
Align Incentives for Developer and Customer
Align developer and customer goals for project success. To align everyone's goals:
Friday, May 04, 2018
Give Products to Customers Early
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 |
Poor Efficiency |
Reference:
I. Sommerville. 1992. Software Engineering, Section 20.0. Addison-Wesley., Reading, MA, USA.
Tuesday, May 01, 2018
Don't Try to Retrofit Quality
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
Developers, to achieve high quality, follow proven techniques to increase quality. These include:
- Involving the customer.
- Prototyping to verify requirements prior to full-scale development.
- Build the Right Kind of Prototype
- Build the Right Features into a Prototype
- Build Throwaway Prototypes Quickly
- Keeping the design simple.
- Code reviews and static code analysis.
- Hiring the best people.
Customers (Product Managers), demand excellence but be aware of the high costs involved.
Great Designs Come From Great Designers
The Design of Everyday Things
Labels:
Chicago,
design,
software-engineering
Location:
Chicago, IL, USA
Understand the Customer's Priorities
If you are communicating with your customers, you should be sure you know their priorities. These can easily be recorded in the requirements specification (see Prioritize Requirements), but the real challenge is to understand the customers' interpretation of "essential," "desirable," and "optional." Will they really be happy with a system that satisfies none of the desirable and optional requirements?
Labels:
customer,
software-engineering
Location:
Springfield, MO, USA
Prioritize Requirements
Not all requirements are equal.
One way to prioritize requirements is to suffix every requirement in the specification with an M, D, or O to connote mandatory, desirable, and optional requirements. You may find it helpful to further rate the importance of the requirements by using a scale from 0 to 9. For example, while a M1 task is mandatory, it is not as high a priority as a M9 task.
Labels:
requirements,
software-engineering
Location:
Springfield, MO, USA
Inspect Code
Your original project schedule should account for the time to inspect and correct every component. You might think that your project cannot tolerate such "luxuries." However, you should not consider inspection a luxury. Data has shown that you can even reduce the time to test by 50 to 90%. If that's not incentive, I don't know what could be. By the way, there is a wealth of support data and tips on how to do inspections well in Key Lessons in Achieving Widespread Inspection Use.
Keep It Simple
A simple architecture or a simple algorithm goes a long way toward achieving high maintainability. Remember KISS. Also, as you decompose software into subcomponents, remember that people have difficulty comprehending more than seven (plus or minus two) things at once. C.A.R. Hoare has said:
There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies and the other is to make it so complicated that there are no obvious deficiencies.
Labels:
architecture,
design,
software-engineering
Location:
Springfield, MO, USA
Subscribe to:
Posts (Atom)