You are previewing I. M. Wright’s “Hard Code”: A Decade of Hard-Won Lessons from Microsoft®.
O'Reilly logo
I. M. Wright’s “Hard Code”: A Decade of Hard-Won Lessons from Microsoft®

Book Description

Get the brutal truth about coding, testing, and project management—from a Microsoft insider who tells it like it is. I. M. Wright's deliberately provocative column "Hard Code" has been sparking debate amongst thousands of engineers at Microsoft for years. And now (despite our better instincts), we're making his opinions available to everyone.

In this collection of over 80 columns, Eric Brechner's alter ego pulls no punches with his candid commentary and best practice solutions to the issues that irk him the most. He dissects the development process, examines tough team issues, and critiques how the software business is run, with the added touch of clever humor and sardonic wit. His ideas aren't always popular (not that he cares), but they do stimulate discussion and imagination needed to drive software excellence.

Get the unvarnished truth on how to:

  • Improve software quality and value—from design to security

  • Realistically manage project schedules, risks, and specs

  • Trim the fat from common development inefficiencies

  • Apply process improvement methods—without being an inflexible fanatic

  • Drive your own successful, satisfying career

  • Don't be a dictator—develop and manage a thriving team!

  • Companion Web site includes:

  • Agile process documents

  • Checklists, templates, and other resources

  • Table of Contents

    1. I. M. Wright’s “Hard Code”: A Decade of Hard-Won Lessons from Microsoft®
    2. A Note Regarding Supplemental Files
    3. Reader Acclaim for I. M. Wright’s “Hard Code” Column
    4. Foreword
    5. Foreword to the First Edition
    6. Introduction
      1. How This Book Happened
      2. Who Should Read This Book
      3. Organization of This Book
      4. How Microsoft Is Organized
      5. Sample Tools and Documents
      6. System Requirements
      7. Errata & Book Support
      8. We Want to Hear from You
      9. Stay in Touch
    7. 1. Project Mismanagement
      1. June 1, 2001: “Dev schedules, flying pigs, and other fantasies”
        1. Richter-scale estimating
        2. Risk management
        3. The customer wins
      2. October 1, 2001: “Pushing the envelopes: Continued contention over dev schedules”
        1. Software engineering is clearly ambiguous
        2. Believe half of what you see and none of what you hear
        3. Motivation: It’s not just pizza and beer
        4. Sinking on a date
      3. May 1, 2002: “Are we having fun yet? The joy of triage.”
        1. War is hell
        2. It’s nothing personal
        3. Five golden rules of triage
        4. The devil is in the details
        5. It’s hard to let go, isn’t it?
        6. Take care of the little things
      4. December 1, 2004: “Marching to death”
        1. Stabs in the dark
        2. A litany of failure
        3. The turning point
        4. The road less traveled
      5. October 1, 2005: “To tell the truth”
        1. Suffer from delusions
        2. Put a fork in me
        3. Give me a straight answer
        4. Lipstick on a pig
        5. Look at all these rumors
        6. I want the truth
      6. September 1, 2008: “I would estimate”
        1. No one would accept the program
        2. It’s a different kind of flying altogether
        3. I’m getting better
        4. Oh no, not again
        5. Same old wine
        6. Your results may vary
        7. I want to believe
      7. May 1, 2009: “It starts with shipping”
        1. I offer you my service
        2. What is that smell?
        3. There are too many of them
        4. They’re multiplying too rapidly!
        5. Life is so uncertain
        6. Back to basics
      8. September 1, 2009: “Right on schedule”
        1. Those who understand binary and those who don’t
        2. That’s the only thing you’re committed to
        3. Don’t you think it’s a little risky?
        4. You pick the one right tool
      9. May 1, 2010: “Coordinated agility”
        1. I respect your right to disagree with me
        2. Plans are nothing; planning is everything
        3. I can take care of myself
        4. So happy together
    8. 2. Process Improvement, Sans Magic
      1. September 2, 2002: “Six Sigma? Oh please!”
        1. Egads! What sorcery is this?!
        2. Calling in the cavalry
        3. Creating order out of chaos
      2. October 1, 2004: “Lean: More than good pastrami”
        1. All things in moderation
        2. Waste not, want not
        3. Overproduction
        4. Go deep
        5. Transportation
        6. Motion
        7. Waiting
        8. Overprocessing
        9. Inventory
        10. Defects
        11. Symbiosis
      3. April 1, 2005: “Customer dissatisfaction”
        1. Ignorance is bliss
        2. Too much, too late
        3. Agile delusions
        4. Retracing your steps
        5. There’s more where that came from
        6. The right tool for the job
        7. Duct tape and baling wire
        8. Customer satisfaction
      4. March 1, 2006: “The Agile bullet”
        1. Enemy of the truth
        2. Get the rules straightened out
        3. Ready for something different?
        4. Let the man speak
        5. You complete me
        6. A bit extreme
        7. Are you ready for some rugby!
        8. The more you know
      5. October 1, 2007: “How do you measure yourself?”
        1. There is no try
        2. Is there a problem here?
        3. What’s going on?
        4. In the end you’ll thank me
        5. I want to know right now
        6. Then make your choice
        7. We are in charge
        8. A girl’s gotta have her standards
        9. A unique perspective on the world
      6. October 1, 2010: “You can depend on me”
        1. Amongst our weaponry are
        2. I think your brain is going soft
        3. Failure to communicate
        4. We two are one
        5. It’s totally automatic
        6. No whining!
      7. November 1, 2010: “Am I bugging you? Bug Reports”
        1. Bug dissection
        2. Title and assignment
        3. Repro steps
        4. Priority
        5. Severity
        6. Resolution
        7. Keep it simple
      8. December 1, 2010: “There’s no place like production”
        1. How did I get here?
        2. Surely, you can’t be serious?
        3. Then it’s hopeless
        4. How do I work this?
        5. We’re not in Kansas anymore
      9. February 1, 2011: “Cycle time—The soothsayer of productivity”
        1. What’s done is done
        2. If you build it
        3. Roaches check in, but they don’t check out!
        4. How am I doing?
        5. Sign me up
        6. How about a few more details
        7. Life is good
    9. 3. Inefficiency Eradicated
      1. July 1, 2001: “Late specs: Fact of life or genetic defect?”
        1. For every change, churn, churn, churn
        2. Hallway meetings
        3. Committee meetings
        4. Spec change requests
        5. Prevention is the best cure
      2. June 1, 2002: “Idle hands”
        1. Baby did a bad bad thing
        2. Tell me what I must do
        3. Waste not, want not
      3. June 1, 2004: “The day we met”
        1. Why are we here?
        2. What are we trying to do?
        3. Why are they here?
        4. Why am I hearing this now?
        5. What are the next steps?
      4. July 1, 2006: “Stop writing specs, co-located feature crews”
        1. Have you lost your mind?
        2. Therein lies a dilemma
        3. Special needs
        4. I don’t recall
        5. Stick to one thing
        6. You ready?
      5. February 1, 2007: “Bad specs: Who is to blame?”
        1. It’s a setup
        2. Communication breakdown
        3. Keep it simple and easy
        4. Make it robust
        5. Get feedback
        6. Check that quality is built in
        7. What’s the difference?
      6. February 1, 2008: “So far away—Distributed development”
        1. Doesn’t anybody stay in one place anymore?
        2. I get so tired when I have to explain
        3. Doesn’t help to know that you’re just time away
        4. It would be so fine to see your face at my door
        5. Where are you when the sun goes down?
      7. December 1, 2008: “De-optimization”
        1. You want answers?
        2. I think I can handle this
        3. Déjà vu
        4. The beat of a different drummer
        5. Don’t panic
      8. April 1, 2009: “Your World. Easier”
        1. All too easy
        2. Déjà vu—all over again
        3. Slip sliding away
        4. Our two weapons are
      9. April 1, 2011: “You have to make a decision”
        1. I’m the decider
        2. To hire or not to hire
        3. Now consider the alternative
        4. Tell me why
        5. Wait, there’s more
    10. 4. Cross Disciplines
      1. April 1, 2002: “The modern odd couple? Dev and Test”
        1. How do I love thee? Let me count the ways
        2. Necessary evil or priceless partner?
        3. A man’s got to know his limitations
        4. You complete me
      2. July 1, 2004: “Feeling testy—The role of testers”
        1. Advanced protection
        2. A change will do you good
        3. The twilight zone
        4. Commander Data
        5. It’s quite cool—I assure you
      3. May 1, 2005: “Fuzzy logic—The liberal arts”
        1. It takes all kinds
        2. They’re not like us
        3. Getting past security
        4. Making things happen
        5. Better together
      4. November 1, 2005: “Undisciplined—What’s so special about specialization?”
        1. Days of future past
        2. Take it to the limit
        3. Football is a science
        4. The space between
        5. Stuck in the middle with you
      5. January 1, 2009: “Sustained engineering idiocy”
        1. You make the call
        2. Someone’s got to take responsibility
        3. What do I do now?
        4. This won’t hurt a bit
      6. May 1, 2011: “Test don’t get no respect”
        1. It’s a different kind of flying altogether
        2. That’s easy!
        3. I just can’t get enough
        4. The world just wants us to fit in
        5. Tell me what it means to me
    11. 5. Software Quality—More Than a Dream
      1. March 1, 2002: “Are you secure about your security?”
        1. Beware the swinging pendulum
        2. Do the right thing
        3. You’re only as secure as your weakest link
        4. Lead, follow, or get out of the way
      2. November 1, 2002: “Where’s the beef? Why we need quality”
        1. Things have changed
        2. Good enough isn’t
        3. Hard choices
        4. Time enough at last
        5. Checking it twice
        6. Physician, heal thyself
        7. Step by step
        8. Too much to ask?
      3. April 1, 2004: “A software odyssey—From craft to engineering”
        1. Craft a desk, engineer a car
        2. It’s what you know
        3. To thine own self be true
        4. What’s in a number
        5. It’s their habits that separate them
        6. Think big to get small
        7. Good to great
      4. July 1, 2005: “Review this—Inspections”
        1. A bad combination
        2. The perfect storm
        3. Who’s in charge?
        4. So, what do you think?
        5. It’s just a formality
        6. Are you ready, kids?
        7. Checking it twice
        8. Magical merge meeting
        9. Tricks of the trade
        10. Getting it right
      5. October 1, 2006: “Bold predictions of quality”
        1. Enigma? I don’t think so
        2. Twins of evil
        3. The usual suspects
        4. You’re gonna love it
        5. Quit fooling around
        6. Quality is no accident
      6. May 1, 2008: “Crash dummies: Resilience”
        1. Struggle against reality
        2. Perhaps be less assertive
        3. If at first you don’t succeed
        4. Welcome to the jungle
        5. Just like starting over
        6. Let’s not be hasty
        7. It’s always the same
      7. October 1, 2008: “Nailing the nominals”
        1. Back to basics
        2. I want to be a cowboy
        3. But it’s so simple
        4. Is it done?
        5. It’s not that complicated
    12. 6. Software Design If We Have Time
      1. September 1, 2001: “A tragedy of error handling”
        1. The horror, the horror
        2. Taking exception
        3. Don’t lose it, use it!
      2. February 1, 2002: “Too many cooks spoil the broth—Sole authority”
        1. A picture is worth a thousand words
        2. Does anyone really know what time it is?
        3. There can be only one
        4. Everything is connected to everything else
      3. May 1, 2004: “Resolved by design”
        1. What is good enough?
        2. Design complete
        3. Details, details
        4. Show me what you’re made of
        5. Mind the gap
        6. Your recipe for success
      4. February 1, 2006: “The other side of quality—Designers and architects”
        1. You’ll have to do better than that
        2. A change would do you good
        3. The man just got it wrong
        4. Doing it well
        5. Next time, try sculpturing
        6. Just the right tool
        7. Beyond these walls
      5. August 1, 2006: “Blessed isolation—Better design”
        1. Breaking up is hard to do
        2. Doing it well
        3. There is no “I” in team
        4. Step by step
        5. Dogs and cats living together
      6. November 1, 2007: “Software performance: What are you waiting for?”
        1. Just one moment, please
        2. You’re faster than this
        3. Should I keep a copy?
        4. You’re not being the ball
        5. Have you ever been experienced?
        6. You’ll be ready
        7. What about me?
      7. April 1, 2008: “At your service”
        1. I’m fuzzy on the whole good/bad thing
        2. On good terms
        3. Preserve your memories
        4. Self-fulfilling prophesy
        5. We can get together
      8. August 1, 2008: “My experiment worked! (Prototyping)”
        1. Explore the space
        2. That’s so rad!
        3. Harness in the good energy
        4. You still have a choice
        5. Throwing it all away
        6. Temptations always come along
        7. Do yourself a favor
      9. February 1, 2009: “Green fields are full of maggots”
        1. The horror
        2. You saved me from this fanatic
        3. Who will save your soul?
        4. It’s not gonna get any easier
        5. Can I tell you a story?
        6. Temptations always come along
    13. 7. Adventures in Career Development
      1. December 1, 2001: “When the journey is the destination”
        1. A man’s got to know his limitations
        2. Vesting but not resting
        3. I wish they would only take me as I am
        4. We’re in this together
      2. October 1, 2002: “Life isn’t fair—The review curve”
        1. I’m not going to take this anymore
        2. Knowledge is power
        3. Taking care of business
        4. Go ahead, make my day
        5. Reach out and touch someone
        6. Got lemons? Make lemonade
        7. Change your tune
        8. The one behind the wheel
      3. November 1, 2006: “Roles on the career stage”
        1. One, in time, plays many parts
        2. Stage right
        3. I aspire, sir
        4. Overqualified
        5. I’m special
        6. There can be only one
        7. What do you want to be?
      4. May 1, 2007: “Get yourself connected”
        1. It’s who you know
        2. I use habit and routine
        3. Aren’t you curious?
        4. You have our gratitude
        5. I’ll get back to you
        6. Welcome to the world
      5. September 1, 2007: “Get a job—Finding new roles”
        1. Now which way do we go?
        2. We’ve got a situation here
        3. There is nothing here for me now
        4. It’s been a long time
        5. If I go there will be trouble
        6. I must be travelling on now
      6. December 1, 2007: “Lead, follow, or get out of the way”
        1. Blind Faith or Cowboy Junkies?
        2. Yippee-ki-yay, project buster!
        3. Resistance is futile
        4. Is that right?
        5. I suggest a new strategy
        6. I am not a leader of men
      7. July 1, 2008: “Opportunity in a gorilla suit”
        1. I’m blind, man
        2. It is all around us
        3. Poor pitiful me
        4. I took the one less traveled by
      8. March 1, 2010: “I’m deeply committed”
        1. I get bloated with a foamy latte
        2. Living in the past
        3. The reason is a little vague
        4. I don’t believe that’s a proper characterization
        5. Always thinkin’ about yourself
        6. Bogus. Heinous. Most nontriumphant.
      9. April 1, 2010: “The new guy”
        1. Establishing order
        2. Get a grip on yourself
        3. Build your support group
        4. Extend the honeymoon
        5. Learn the ropes
        6. Start your quest
        7. Way to go
      10. June 1, 2010: “Level up”
        1. The basics
        2. Entry level (e.g., SDE I)
        3. Independence (e.g., SDE II)
        4. Team leadership (Senior)
        5. Group leadership (Principal)
        6. Organization and industry leadership (Partner or higher)
        7. Set your course
      11. September 1, 2010: “Making the big time”
        1. It’s a question of time
        2. The future’s so bright
        3. Blame Canada!
        4. Insects don’t have politics
        5. Make it so
        6. It’s alright for you
      12. January 1, 2011: “Individual leadership”
        1. There are many ways of going forward
        2. Ask the expert
        3. I know I’ve got a bad reputation
        4. Quality is job one
        5. That’s a stretch
        6. What?
        7. You can do it
    14. 8. Personal Bug Fixing
      1. December 1, 2002: “My way or the highway—Negotiation”
        1. An offer you can’t refuse
        2. Grow up
        3. A shadow and a threat have been growing in my mind
        4. Don’t shoot the messenger
        5. So happy together
      2. February 1, 2005: “Better learn life balance”
        1. Balance is key
        2. Words without action
        3. I can’t even balance my checkbook
        4. Balance good...everything good
      3. June 1, 2005: “Time enough”
        1. Give it to me straight
        2. Pardon the interruption
        3. Find your happy place
        4. None of us is as dumb as all of us
        5. A burden we must share
        6. Tell me what I must do
        7. He’s just a kid
        8. You deserve a break
        9. Everything’s in order here
        10. Keeping it real
        11. Large and in charge
      4. August 1, 2005: “Controlling your boss for fun and profit”
        1. I have no hand
        2. Know the enemy and know yourself
        3. They succeed in adapting themselves
        4. Selling water to fish
        5. Eyes on the prize
        6. Engage
        7. Dare to dream
      5. April 1, 2006: “You talking to me? Basic communication”
        1. Think about me
        2. Tell me what you want
        3. You want it when?
        4. Got a short little span of attention
        5. Are we done?
      6. March 1, 2007: “More than open and honest”
        1. That’s no excuse
        2. I’ll be honest with you
        3. It’s not easy
        4. They seem to have an open door policy
        5. No place to hide
        6. Not what I had in mind
        7. Getting it right
      7. March 1, 2009: “I’m listening”
        1. Thanks for the advice
        2. Tell me more about me
        3. Back off, man. I’m a scientist
        4. Now it’s my turn!
        5. We have come full circle
        6. We don’t have much time
      8. July 1, 2009: “The VP-geebees”
        1. Wisdom to know the difference
        2. The secret of my success
        3. A riddle, wrapped in a mystery, inside an enigma
        4. Easy as 1, 2, 3
        5. I read the instructions
        6. Oh behave!
        7. How’d I do?
      9. December 1, 2009: “Don’t panic”
        1. You should say yes
        2. All other priorities are rescinded
        3. Trust but verify
        4. Know when to say when
        5. I live to serve
      10. August 1, 2010: “I messed up”
        1. Make it right
        2. Take responsibility
        3. Deeply understand the fallout
        4. Invite help to repair the damage
        5. Ensure it doesn’t happen again
        6. All better
      11. March 1, 2011: “You’re no bargain either”
        1. The good, the bad, and the ugly
        2. Take all of me
        3. I’ll accommodate you
        4. We’ve gotta play to your strengths
        5. Warts and all
    15. 9. Being a Manager, and Yet Not Evil Incarnate
      1. February 1, 2003: “More than a number—Productivity”
        1. Careful what you wish for
        2. Playing a role
        3. The makings of a great dev
        4. You be the judge
      2. September 1, 2004: “Out of the interview loop”
        1. Blaming the help
        2. Ninety percent preparation
        3. That is the question
        4. The whiteboard compiler
        5. Prepping the recruiter
        6. Prepping the interviewers (again)
        7. A gentle reminder
        8. The last puzzle piece
      3. November 1, 2004: “The toughest job—Poor performers”
        1. What did you expect?
        2. Bite the bullet
        3. Seeking professional help
        4. Failure is not an option
        5. The goal is success
        6. Ask and you shall receive
        7. You can’t always get what you want
      4. September 1, 2005: “Go with the flow—Retention and turnover”
        1. I’ll just walk the earth
        2. Nice dam, huh?
        3. Flowing like a river
        4. Fresh meat
        5. Sharing is caring
        6. Room to grow
        7. I must be traveling
        8. Surrender to the flow
      5. December 1, 2005: “I can manage”
        1. The gift that keeps on giving
        2. Good enough for me
        3. Easy does it
        4. I want to work
        5. I’m not an object
        6. Good to great
        7. I serve
      6. May 1, 2006: “Beyond comparison—Dysfunctional teams”
        1. Trying to pick a fight
        2. This is not a competition
        3. I’ll give you a hint
        4. One for all
      7. March 1, 2008: “Things have got to change: Change management”
        1. A change would do you good
        2. Make your opening statement
        3. You are ready then?
        4. I’m in my prime
        5. They could use a good pilot like you
        6. Ready to make the leap?
        7. Gone but not forgotten
        8. There is nothing permanent except change
      8. June 1, 2009: “I hardly recognize you”
        1. Everybody wants results
        2. The end may justify the means
        3. The time has come to act and act quickly
        4. Let us celebrate
        5. I’d like to thank the Academy
        6. All right, let’s review
      9. October 1, 2009: “Hire’s remorse”
        1. Hiring people instead of pipe dreams
        2. I found myself much more reasonable
        3. Well, what do you need?
        4. You could even say that he has principles
        5. I’m trying to tell you something about my life
      10. November 1, 2009: “Spontaneous combustion of rancid management”
        1. It’s not that bad
        2. Do I look all rancid and clotted?
        3. It’s a path made of principle
        4. Oh, the noise! Noise! Noise! Noise!
        5. All progress has resulted from people who took unpopular positions
      11. January 1, 2010: “One to one and many to many”
        1. A deeper purpose
        2. Between you and me
        3. Float like a butterfly
        4. How am I doing?
        5. Are we having fun yet?
        6. You gotta trust me
      12. July 1, 2010: “Culture clash”
        1. You see the whole culture
        2. Back off, man. I’m a scientist.
        3. Environment
        4. Individual
        5. Is it deliberate?
        6. I’m going to ask you a few questions
        7. All together now
    16. 10. Microsoft, You Gotta Love It
      1. November 1, 2001: “How I learned to stop worrying and love reorgs”
        1. Down the Tower of Babel it goes
        2. Life in hell
        3. The road less traveled
        4. Part of the problem or part of the solution?
      2. March 1, 2005: “Is your PUM a bum?”
        1. The man with a plan
        2. I can’t wait to operate
        3. The devil is in the details
        4. The rules of the road
        5. Back on course
      3. September 1, 2006: “It’s good to be the King of Windows”
        1. Have you any last request?
        2. Prepare the ship
        3. Set a course
        4. Engage
        5. Navigation
        6. Accountability
        7. Windows, the next generation
      4. December 1, 2006: “Google: Serious threat or poor spelling?”
        1. They falter, we flourish
        2. Failure by design
        3. Smart people, smart clients
        4. Staying vigilant
        5. Staying out in front
      5. April 1, 2007: “Mid-life crisis”
        1. You’ve changed
        2. Just another tricky day
        3. Leave little to chance
        4. I don’t think the boy can handle it
        5. Not getting any younger
        6. Don’t panic
        7. Nobody’s perfect
      6. November 1, 2008: “NIHilism and other innovation poison”
        1. Why the long face?
        2. Compelling, and rich
        3. I’ll do it myself!
        4. Maybe I could turn this thing into my advantage
        5. I’m good enough, I’m smart enough
        6. Those who do not learn from history
        7. If not me, who? And if not now, when?
      7. February 1, 2010: “Are we functional?”
        1. I’m PUMed
        2. What’s your function?
        3. Make the switch
        4. You can go your own way
        5. Finding the right mix
    17. Glossary
    18. A. About the Author
    19. Index
    20. About the Author
    21. Copyright