Software Engineer Skills
December 18, 1998 - Jack Harich - Go Back
By identifying the skills needed, we can dramatically improve results by improving skills where necessary. The skills list is organized to make this easy. Extra columns are for general use.
Mini Process Steps (the key process) |
||
1. Nutshell Vision | ||
2. Use Case List | ||
3. Major Use Cases stepped out | ||
4. Trait List | ||
5. Risk Management | ||
6. Risk Reduction | ||
7. Modeling | ||
8. Implementation Plan | ||
9. Implementation Iterations | ||
10. Unit testing | ||
11. Integration testing | ||
Seven Super Smart Traits |
||
1. Capability of grasping new knowledge quickly (learning in real time) | ||
2. Generating acute (focusing, revealing) questions on the spot | ||
3. Perceiving connections between disparate domains of knowledge | ||
4. Understanding code (or models, documents) at a glance | ||
5. Thinking obsessively about the code (or mini process steps) | ||
6. Concentrating with special intensity | ||
7. Photographic recall of code (or models, documents) you have written | ||
General |
||
Well organized, i.e. time mgt, work area, note taking, knowledgebase | ||
Calm under fire. Doesn't get flustered when difficulties arise. | ||
Personal knowledgebase of books, articles, URLs, files, facts, contacts, etc. | ||
Ability to grasp and create optimum abstractions | ||
Good written communication skills | ||
Ability to spot opportunities and problems before they are obvious | ||
Good interpersonal skills, especially team and meeting skills | ||
Proactive, not reactive | ||
Knows how to pick the "best" thing to do next, when best time to do it | ||
Works at the appropriate level of abstraction all the time | ||
Self managed given objectives. Can also set own objectives. | ||
Knowledge and appropriate selection of available technology | ||
Emphasizes strategy over tactics, quality over speed, gets correctness | ||
Appropriate use of creativity | ||
Knows when and how to form and use a solution team | ||
Knows how to play the appropriate role all the time |
Mini Process Steps |
|
|
1. Nutshell Vision |
|
|
....Ability to pick the correct general goal of system | ||
....Ability to define a highly focused, crystal clear, concise objective | ||
....Ability to define the scope to not include too much or too little | ||
2. Use Case List |
|
|
....Ability to identify appropriate cases to optimize product value | ||
3. Major Use Cases stepped out |
|
|
....Ability to design steps that optimize product value | ||
....Ability to design steps that make subsequent process steps easy | ||
4. Trait List |
|
|
....Perceives the big picture and traits that go with it | ||
....Picks and emphasizes traits that optimize product value | ||
5. Risk Management |
|
|
....Spots risks that are not obvious, gets identification completeness | ||
....Can manage many or difficult risks | ||
....Keeps risk management current as project progresses | ||
6. Risk Reduction |
|
|
....Ability to see to the bottom of a complex new risk area | ||
....Ability to do minimal prototyping and exploration to resolve unknowns | ||
....Ability to use previous knowledge to resolve risks | ||
7. Modeling |
|
|
....Basic class identification, relationships, methods modeling skills | ||
....Reuse of design and architectural patterns | ||
....System size skills, i.e. partitioning, subsystems, collaboration | ||
....Ultra high reuse skills, i.e. loose coupling, parameters, parts technology | ||
....Ability to create highly understandable models | ||
....Ability to design models that are easy to implement | ||
....Ability to design for extensibility | ||
....Constantly improves and updates the model as iterations occur | ||
8. Implementation Plan |
|
|
....Ability to choose appropriate series of implementation steps, iterations | ||
....Ability to creatively improve the plan as it goes along | ||
9. Implementation Iterations (note 80% is prep for this step) |
|
|
....Ability to implement the intentions of the model and analysis well | ||
....Defensive programming habits, ability to write bulletproof code | ||
....Creates clean, highly understandable code, with documentation | ||
....Knowledge of languages and tools used | ||
10. Unit testing |
|
|
....Ability to design and write unit tests before implementation | ||
....Correctly and completely tests class or subsystem before integration | ||
11. Integration testing |
|
|
....Ability to correctly and completely test an entire system |
.
(The above two tables are designed to break on two separate pages. This paragraph should begin the third page.)
The "Seven Super Smart Traits" are from "The Microsoft Way." The author examined literature on Bill Gates. These are what he looks for when hiring super smart developers. The traits are in Bill's own words, with my additions for clarity in parenthesis. I really like these 7 traits. If someone's got them, they either have or can acquire the rest in a year or two.
Note - In trait 5, "obsessively" can imply problematic as well as productive behavior. Perhaps better is "highly focused". This is enhanced if you're fascinated with your work or idea.
The General skills are what I've encountered as what truly makes the difference. The last three are a result of working with Britt Kinsler and Michael Ivey on improving this list.
The Mini Process skills really tell the story. It's a fascinating collection of skills. They allow engineers to see where they need to learn so they can do a step well. For those that can learn on their own, this is really opening the door to quick productivity improvements.
Notice the many skills for Modeling, which helps to explain why it is easily the most important step. I have found that study of patterns, other systems and practice modeling with small systems that are not for production are the quickest way to acquire this skill. Model cycle time on real projects is too long to concentrate on learning modeling. I did about 200 practice models and about 50 practice systems. The goal is to think at the modeling level of abstraction, not at the code level. It took me three years to move from procedural to Object Oriented to an Architecture and key principles driven mindset where objectives are achieved by mechanisms which follow principles, and the mechanisms are expressed first in models and then in parameters or code.
What makes a good modeler? The ability to pick the best abstractions.
Michael Ivey quickly pointed out that, of the Mini Process skills, 80% are before implementation. This is an eye opener to many. It clearly reveals the importance of plan your work, then work your plan. Statistics for those with a mature process show 1/3 work is requirements, 1/3 is design, 1/6 is implementation and 1/6 is testing. Think about it. What are your current percentages here? Where would you like to be?
The extra columns are for general use, such as ratings and comments. Try getting people to rate themselves and others, then get together and talk about it. Good things will happen. :-)
Use these skill lists to assess yourself. For example you can rate yourself in column one. In column two you can enter where you'd like to be. Then by examining the gaps and which skills are the more important, you can determine where to beef up your skills.
It's interesting that none of the skills emphasize speed or productivity directly. Why not? It seems that high productivity is a natural byproduct of doing it right the first time, just as high reuse is a byproduct of good architecture. This "first time correctness" means less or no rework later. It applies not just to analysis, design and implementation, but at the highest strategic level means picking the right objectives in the first place. Is this our ultimate challange?
I find it interesting that educational institutions teach the above skills only indirectly. What would happen if they got right down to what really matters and tried to improve these skills directly? Would this take courses like Problem Solving, Asking Acute Questions, Learning in Real Time, Memory Enhancement, Developing Optimum Abstractions, Interpersonal Skills 3202 - Playing the Correct Role all the Time, Advanced Personal Organization and Creating Fantastic Nutshell Visions? What department would they be in - General Excellence? Could it be that teachers, like developers, are usually not working at the highest appropriate level of abstraction?
The most common response I'm getting to this document is "How can I develop these skills?" I don't yet have a documented, good answer. But I do describe how I acquired my skills, notably by studying OOAD literature like a bandit for years, developing small throwaway practice models and systems, and attempting to grow my own reusables. I also point out that, of all the above skills, modeling seems the most important but toughest to get if you have a procedural background. I read two hours a day, buy about two books a month, and I read them. Books seem to be much better quality than web pages. All this self study pays off bigtime....