raganwald
Sunday, December 19, 2004
  Are you a perfectionist?
Before you shout a resounding "YES!", stop for a moment and reflect. Be careful with the words "perfectionist" and "perfectionism." These words have very specific meanings in industrial psychology that may not reflect your intentions.

Are you:
These qualities do not make you a perfectionist.

Perfectionists make unreasonable demands of themselves and their environment. The 'super high standards' of the perfectionist give them an excuse not to fail: since they cannot reach succeess by their own standards, they never really try and can never fail.

Perfectionists obsess over trivial details as a way of avoiding new challenges. A classic perfectionist behaviour is to spend time meticulously optimizing every last line of working code instead of moving on to implement something new.

The key here is not whether optimization is worthwhile, but rather why the perfectionist is spending so much time on it: the perfectionist is afraid of moving forward and uses perfection as justification for holding back. "I'd like to get started on that, but I need to finish this work first."

Another perfectionist behaviour is called "blame and shame": they can't reach their own high standards because of the shoddy work and bad attitudes of their colleagues.

Again, the root motivation is avoiding failure: the perfectionist could write great code, if only her teammates would get their act together. But since her teammates are such shmucks, she spends all her time fixing their code or agitating for new methodologies instead of firing up Emacs and writing code.

Is it wrong to agitate for improvement in your organization? Of course not. But to the perfectionist, it isn't really about improvement, it isn't even about excuses for failure. The perfectionist didn't even try to succeed because she knew that the project could never reach her standards, so she didn't "waste her time" even trying.

This link discusses perfectionism amongst students. You might find it illuminating:

http://www.kidsource.com/kidsource/content2/perfectionist.k12.4.html

(From the old Joel on Software Forum, with some edits for clarity)

Labels:

 

Friday, December 17, 2004
  Software which is flexible, simple, sloppy, tolerant, and altogether forgiving of human foibles
Adam Bosworth on KISS:

It is an ironic truth that those who seek to create systems which most assume the perfectibility of humans end up building the systems which are most soul destroying and most rigid, systems that rot from within until like great creaking rotten oak trees they collapse on top of themselves leaving a sour smell and decay. We saw it happen in 1989 with the astonishing fall of the USSR. Conversely, those systems which best take into account the complex, frail, brilliance of human nature and build in flexibility, checks and balances, and tolerance tend to survive beyond all hopes.

So it goes with software. That software which is flexible, simple, sloppy, tolerant, and altogether forgiving of human foibles and weaknesses turns out to be actually the most steel cored, able to survive and grow while that software which is demanding, abstract, rich but systematized, turns out to collapse in on itself in a slow and grim implosion.

Consider the spreadsheet. It is a protean, sloppy, plastic, flexible medium that is, ironically, the despair of all accountants and auditors because it is virtually impossible to reliably understand a truly complex and rich spreadsheet. Lotus corporation (now IBM), filled with Harvard MBA’s and PhD’s in CS from MIT, built Improv. Improv set out "to fix all this". It was an auditors dream. It provided rarified heights of abstraction, formalisms for rows and columns, and in short was truly comprehensible. It failed utterly, not because it failed in its ambitions but because it succeeded.

Consider search. I remember the first clunky demos that Microsoft presented when Bill Gates first started to talk about Information at your fingertips with their complex screens for entering search criteria and their ability to handle Boolean logic. One of my own products, Access had the seemingly easier Query by Example. Yet, today half a billion people search every day and what do they use? Not Query by Example. Not Boolean logic. They use a solution of staggering simplicity and ambiguity, namely free text search. The engineering is hard, but the user model is simple and sloppy.


[link].


 

Saturday, December 04, 2004
  Delicious Monster
There's a plant that grows in the rain forests of tropical america known colloquially as “The Swiss Cheese Plant”; its Latin name is Monstera deliciosa — Delicious Monster.

A young plant starts as just a handful of simple verdant leaves, but as it grows to its full thirty feet its leaves become more and more lacy and ornate. If treated properly, the plant will then flower with huge blooms, which create a very rare fruit that taste like mixed pineapples and bananas. We believe that delicious software, like the delicious monster, starts as something simple and beautiful: an idea to simplify your life, to help you more easily accomplish something you need to do. The idea is embellished as it matures, without losing sight of the core beauty that inspired it. Delicious software should be deep and focused, so every feature you want to use is understandable and anticipates what you actually want to do; you should find yourself smiling at its added and unexpected beauty, like you would at the monster's flowers. And the fruits of your efforts should make your life just a touch sweeter. We grow delicious software. Simple and beautiful with surprises and detail that you would never expect from software. It's delicious and it makes you smile. It brings your computer to life and into your life.

"I believe the best software is written by small groups of people who have both passion and vision. Passion is easy to define; you care so deeply about something that it wounds you if it's done poorly."
--Will Shipley, co-founder

"I realized that if I was going to create good software, the way I thought it should be done, I was going to have to do it at a company that I was in charge of."
--Mike Matas, co-founder
 

Reg Braithwaite


Recent Writing
Homoiconic

Share
rewrite_rails / andand / unfold.rb / string_to_proc.rb / dsl_and_let.rb / comprehension.rb / lazy_lists.rb

Beauty
IS-STRICTLY-EQUIVALENT-TO-A / Spaghetti-Western Coding / Golf is a good program spoiled / Programming conventions as signals / Not all functions should be object methods

The Not So Big Software Design / Writing programs for people to read / Why Why Functional Programming Matters Matters / But Y would I want to do a thing like this?

Work
The single most important thing you must do to improve your programming career / The Naïve Approach to Hiring People / No Disrespect / Take control of your interview / Three tips for getting a job through a recruiter / My favourite interview question

Buy Raganwald a Coffee
If you enjoy reading my weblog, please consider buying me a Darkhorse Double Espresso, for just $3.15 Thank you!

Management
Exception Handling in Software Development / What if powerful languages and idioms only work for small teams? / Bricks / Which theory fits the evidence? / Still failing, still learning / What I’ve learned from failure

Notation
The unary ampersand in Ruby / (1..100).inject(&:+) / The challenge of teaching yourself a programming language / The significance of the meta-circular interpreter / Block-Structured Javascript / Haskell, Ruby and Infinity / Closures and Higher-Order Functions

Opinion
Why Apple is more expensive than Amazon / Why we are the biggest obstacles to our own growth / Is software the documentation of business process mistakes? / We have lost control of the apparatus / What I’ve Learned From Sales I, II, III

Whimsey
The Narcissism of Small Code Differences / Billy Martin’s Technique for Managing his Manager / Three stories about The Tao / Programming Language Stories / Why You Need a Degree to Work For BigCo

History
06/04 / 07/04 / 08/04 / 09/04 / 10/04 / 11/04 / 12/04 / 01/05 / 02/05 / 03/05 / 04/05 / 06/05 / 07/05 / 08/05 / 09/05 / 10/05 / 11/05 / 01/06 / 02/06 / 03/06 / 04/06 / 05/06 / 06/06 / 07/06 / 08/06 / 09/06 / 10/06 / 11/06 / 12/06 / 01/07 / 02/07 / 03/07 / 04/07 / 05/07 / 06/07 / 07/07 / 08/07 / 09/07 / 10/07 / 11/07 / 12/07 / 01/08 / 02/08 / 03/08 / 04/08 / 05/08 / 06/08 / 07/08 /