Thinks you might not know:

Software Management  12/29/12

Current studies by the Standish Group indicate that 32 percent of software
projects are successful, 44 percent are somewhat challenged, and 24 percent
fail completely; it looks like there's still room for improvement.

Do your software projects seem to be working out as you had planned?
Do you have a plan? Could it be that there might just be a better way?
A better approach, a different method, something that's been proven to be
useful, proven to be successful, and proven to be repeatable? 
The question is what will help us to improve our software endeavors?

Three major factors contribute:
1) To err is Human, specification has errors and is incomplete.
2) Not enough rapid prototyping.
3) Too aggressive to get too many features.

We will take an engineering approach, yes, "Software Engineering":
1) Understand the problem or need. (Too early to say there is a
   "requirement".)

2) Analyze the problem and reduce the problem to a hierarchy of 
   smaller problems.
   (Remember Edsger Dijkstra said "Top Down Design is best every time except
    the first time". Have you solved a similar problem before?)


General types of software:
Real time embedded software. e.g. engine timing, emission control, 
robotics, etc.
User interface software. e.g. PC, Tablet, Phone, Automotive, 
Aircraft, etc.
Number crunching. e.g. simulation, numerical computation, forecasting, etc.
Combinations of the above.

Operating system choices: Windows, Unix/Linux, MacOSX, Android, 
real time, etc.
May be only one, yet may need to be multi platform.

Computer software development environment choices: 
Eclipse, VisualStudio, command line, etc.

Software programming language choices: Ada, C, C++, C#, Cobol, 
Fortran, Java, Jovial, Haskell, Matlab, Mathematica, Python, etc. etc. etc.
"Tower of Babble"

Tool kit choices: OpenGL, LAPACK, TK, QT, WX, Motif, Swing, PHP, MySQL, etc.

Are you going to be measured by metrics? Choices include:
Halstead complexity measures, McCabe, errors per thousand lines
of source code, errors/KSLOC, cost per NBNC line of delivered code, etc.
NBNC counts non-blank non-comment lines of source code.
(Gamesmanship: Put "{" on separate line. :) )

Does your boss or organization enforce a style guide?
Indent two spaces, three spaces, a tab?
(The style may be enforced by software development tools.)
 
Are you just going to throw darts to make your choices?
You really need to understand the entire problem.
Extreme greed for large and fast profit may have a large influence.

Example: Having been promoted through three levels of corporate
management, I commented to my bosses boss, "Corporate headquarters
seems to be thinking short term, worrying about our stock price
next month." He answered "No Jon, the corporate executives worry
about what our stock price will be tomorrow morning!"

A corporate general manager once commented: "I no longer work for
a living. Now I just worry for a living."

Beware the "Peter principle": You may be promoted to your
level of incompetence.

Corporate Management Says:
If you can not measure it, you can not manage it.