Making Software Better
Everyone wants better software. And for decades, everyone has put forth ideas on how to make it happen.
Sometimes a good way to sharpen thinking on a subject is to take a brief time-out and consider a parallel field.
I can’t help but choose a field where the state of the art, and the state of the practice, are also sufficient to have changed our lives, but still fall far short on safety and security.
Process vs. Practice
The road is the process. Roads are important. I wouldn’t drive without them. But nobody would claim that driving is happening without cars.
Driving cars is the practice.
Further, cars still don’t drive themselves. People drive cars.
Process training is studying the traffic laws and signs booklet and taking the written test.
Practice training is going out with a driving instructor and driving with his/her guidance.
Examinations: Ok for the process. Insufficient and misleading for the practice.
Passing the driving test neither makes people better drivers nor proves that they are sufficiently good drivers.
Insufficient: All it manages to show is that under certain heroic conditions, the driver can perform — one time — passably well.
Misleading: Gives everyone the idea that passing the driving test is the “clean bill of health” for all future driving by that driver.
Driving on the same roads with other drivers does not improve any given driver’s skills, nor the average skill. Generally it reduces the average towards the lowest value.
Sharing the driving with a friend on a trip does not improve either driver’s skills either. At best, prevents accidents, by sharing the driving hours or buying the friend coffee.
Trends in Driving Performance Improvement
(Try to categorize as process or practice improvement. Or as exit-testing, exams, or coaching. Or proactive, preventive, or corrective.)
– Restricting youth driving to daylight hours
– Raising the driving age
– Raising the drinking age
– Requiring youth to take 28 or more driving lessons
– Lowering the maximum speed limit
– Speed cameras
– Higher fines
– Improving the roads
– Improving the cars (ABS, airbags, rearview mirrors on both sides, upper rear stop light)
– Requiring all new immigrants to take a refresher course
– Requiring all new immigrants to take 1 or 2 lessons and a driving test
– Requiring youth to drive with parents (or is that requiring the parent to drive with youth?) for the first N months (where trend is increasing N)
– Advertising campaigns promoting that it’s desirable to give the car keys to someone else and take a taxi home if s/he drank too much
– Other trends I didn’t think of …
Which are best? Why?
Back to software development. Seeking better software, better ways to develop software. And ever-improving developers too.
What are the analogous improvement ideas? Which would be most effective? Why?