Software tools can be expensive. You have to factor in the cost of the tool, the hardware to run the tool on, and the training of your employees to use the tool. But consider the higher costs of not buying the tools. Lower productivity, higher probability of customer dissatisfaction, delayed product release, increased rework, poorer produce quality, etc.
Reference:
Huff, C., "Elements of a Realistic CASE Tool Adoption Budget," CACM, April 1992.
Jerry Yoakum's thoughts on software engineering and architecture from experience working with code, computer science, python, java, APIs, NASA, data mining, math, etc.
Sunday, July 01, 2018
Wednesday, June 20, 2018
Give Software Tools To Good Engineers
Users of software tools become more productive. However, a tool cannot convert a poor software engineer (one that produces code that is unreliable, incomplete, and so on) into a good one. Thus, you want to give tools only to good engineers. The last thing you want to do is to provide tools to the poor engineers: You want them to produce less, not more, poor-quality software.
Tuesday, June 19, 2018
Use Tools, But Be Realistic
Software tools can make their users more efficient and should be used. Remember that the hard work (the thinking) is not done by the tool. Use tools but be realistic concerning the effect on productivity.
Reference:
Kemerer, C., "How the Learning Curve Affects Tool Adoption," IEEE Software, May 1992.
Monday, June 18, 2018
Technique Before Tools
A software engineer must first understand and be able to follow an appropriate software technique. Next, must know how to use the tool before using a new tool.
Software engineers should first attempt any new software techniques by hand to convince their self and their management that the technique before investing time and money in tools to automate the technique. If the technique doesn't work without automation, it won't work with automation.
Reference:
Kemerer, C., "How the Learning Curve Affects Tool Adoption," IEEE Software, May 1992.
Sunday, June 17, 2018
Different Languages For Different Phases
"Notations provide us with models that can be manipulated in our minds. The more notations and the richer and more diverse the representations used, the better we can visualize the product under construction."
For requirements engineering, select a set of optimal techniques and languages:
For design, select a set of optimal techniques and languages:
For coding, select an optimal language:
"Transitions between phases are difficult. Using the same language doesn't help. On the other hand, if a language is optimal for certain aspects of two phases, by all means use it."
Reference:
Matsubara, T., "Bringing up Software Designers," American Programmer, July-August 1990.
Thursday, June 14, 2018
Record Your Assumptions
"We make approximately one assumption every 10 lines of code, or even if I'm off by a factor of 2 or 3, one assumption every 20 to 30 lines of code." - Manny LehmanThese assumptions about very complex software systems and environments result in unexpected behavior.
Keep track of all your assumptions throughout requirements planning, design, coding, and testing. Also, record the implications of each assumption - where in the product does the assumption manifest itself? Isolate such implications by encapsulating each assumption.
Reference:
Lehman, M., "Software Engineering, the Software Process and Their Support," Software Engineering Journal, September 1991.
Wednesday, June 13, 2018
Every Complex Problem Has a Solution
"To every complex problem, there is a simple solution... and it is wrong!" - Wlad Turski
Be highly suspicious of anyone who offers you something like, "Just follow these 10 simple steps and your software quality problems will disappear." Or, "Subscribe to our software services and all your monitoring, logging, debugging, etc problems will be solved."
For your interest, Turski's quote is a simplification of the following quote by H. L. Mencken.
Explanations exist; they have existed for all time; there is always a well-known solution to every human problem — neat, plausible, and wrong.
- "The Divine Afflatus" in New York Evening Mail (16 November 1917)
Monday, June 11, 2018
Build Software So That It Needs a Short Users' Manual
One way to measure the quality of a software system is to look at the size of its users' manual. The shorter the manual, the better the software. The use of well-designed software should be mostly self-evident. Unfortunately, too many software designers fashion themselves as experts in human interface design as well. The voluminous manuals that result are sufficient evidence that most interface designers are not as great as they proclaim.
Use standard interfaces. Use industry experts to design self-evident icons, commands, protocols, and user scenarios. And remember: Just because software developers "like" an interface, it doesn't mean that your customers will have any idea of how to use it. Many software developers like interfaces with built-in short-cuts. Usually, customers want simple, clean, clear interfaces - they don't want to learn tricks to enable short-cuts.
Reference:
Hoare, C.A.R., "Programming: Sorcery or Science?", IEEE Software, April 1984.
Wednesday, May 30, 2018
If Possible, Buy Instead of Build
Off-the-shelf software may address only some of your feature needs. But consider that building your own software may result in going over budget, being late, and still only addressing only some of your feature needs.
"As a developer, you should reuse as much software as possible. Reuse is 'buying instead of building' on a less grand scale."
Reference:
Brooks, F., "No Silver Bullet: Essence and Accidents of Software Engineering," IEEE Computer, April 1987.
"As a developer, you should reuse as much software as possible. Reuse is 'buying instead of building' on a less grand scale."
Reference:
Brooks, F., "No Silver Bullet: Essence and Accidents of Software Engineering," IEEE Computer, April 1987.
Friday, May 25, 2018
Change During Development Is Inevitable
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.
Labels:
Chicago,
product-management,
software-engineering
Location:
Chicago, IL, USA
Subscribe to:
Posts (Atom)