Review: The Book of Hard Choices

I just finished reading The Book of Hard Choices, by James A. Autry and Peter Roy, and I find myself slightly dissatisfied by it.

It was a compelling read, certainly: I picked it up at my local library on a whim, but when I started reading, I couldn’t put it down.  Subtitled “How to Make the Right Decisions at Work and Keep Your Self-Respect,” it deals mostly in case studies, approaching ethical situations from specifics instead of generalities.  I found myself carried easily from one brief example to another, wondering how each person’s situation would play out: what would they decide?  How would it affect them?  From top CEOs of businesses everyone has heard of, to smaller niche players with names and brands obscured to protect privacy, the subjects of these studies faced tough choices and went with what felt right to them, risking profit, reputation, and legacy for their moral and ethical beliefs.

What bothered me was that as a whole, these case studies seemed to suggest that everything would work out fine.  As people chose to stand up to the bullying of their big customers, to hold to quality over cost in a competitive market, or to go against public opinion or industry standards, they were risking big things, but none of the case studies actually lost big on their big gambles.  Some people weren’t as successful as they might have been; some people missed promotions or passed up opportunities because of their choices, but the decisions were never the career-killers or company-killers that some ethical decisions end up being.

If you are a venture capitalist who made $250 million on a deal instead of $300 million because you stood by what you thought was right, you can look back and say, “I’d do it again.”  But there are people who made that choice and lost out much bigger.  If you are an employee who said, “We are doing something wrong, and if we don’t address it, I will have to tender my resignation,” your view of your decision will probably be different if your company says, “We’ll fix it,” than if they said, “Bye, then.”  Maybe the people in the stories told here would feel the same way if the outcomes had been different, but we don’t know that, because we weren’t shown those stories.

I think there is a case to be made that holding to your ethical beliefs is the right choice even if it means you lose your job, even if your company collapses, even if you are ridiculed in the public eye.  I just don’t think that Autry and Roy made that case.


“At the end of the day, I’m being paid to write code.”

“At the end of the day, I’m being paid to write code.”

I have heard that hundreds of times in my career, from people of all ages, genders, and nationalities.  It comes up when there’s a meeting that no one wants to attend.  “I don’t have time to waste on this; I’m being paid to write code.”  It comes up when there’s mandatory training for client audit purposes.  “They can’t expect me to find time for this; I’m being paid to write code.”  It happens when it’s time to write goals for the next fiscal year. “Goal: write more code.  Find way to avoid stupid goal-setting exercises.”  It happens when people are asked to do  routine paperwork, like timesheets, expense reports, or task board updates.

“At the end of the day, I’m being paid to write code.”  Everything else is useless garbage being imposed on you.  The code is the core of your purpose.

Have you ever said this?  If so, you’re wrong.

No matter what you may think you are being paid for, you are really being paid to support business operations in your area of specialization.

If your assignment is to develop an application, and you find one on the market that would meet all of your needs, and would cost less to buy and support than it would take to build and support it internally, you’re doing your job by bringing it to your boss’s attention, even if it means you don’t need to write any code.

When timesheets and expense reports don’t get filed on time, cost forecasting is happening off of flawed information.  Not only does it make extra work for people who need to remind their employees to file routine paperwork, but business decisions way over your head are being made based on bad data.  This happens when software engineers don’t do their job.

When task boards aren’t updated and daily records of work aren’t maintained, it takes more time and energy for everyone on the team to figure out what is going on.  Reports made to upper management take trickier calculations.  Calculations that should be simple and pulled straight from the task board are now fuzzier and harder to compute.

When training isn’t done, companies fail audits.  Sales people and CEOs have to scramble to hold onto customers.  Sometimes, revenue takes a hit.  Other times, relationships are left strained.  Other people have to cover for the people who didn’t do their training.

When people don’t attend meetings, or attend meetings and write code on their laptops, communication breaks down.  Messages have to be repeated over and over again.  People give up their chance to have input, and then don’t like the decisions that were made.  This leads to more work for management, more stress for your coworkers, and a worse working environment for you.

At the end of the day, a software engineer is being paid to do her entire job, not just the part of the job that she considers most intellectually challenging.

What’s your job?

Paying a Premium for Morality

I was listening to this week’s podcast of The Boss Show yesterday, where Steve and Jim discussed, among other things, the way that American consumers will go to great lengths to save small amounts of money, and so retailers keep cutting costs by slicing into the “human factor”: worker salary, worker safety, worker sanity.

Steve and Jim were talking in particular about the last of those three, using an example of a company which is tracking worker movements using electronic armbands and docking them efficiency scores on individual tasks for time spent in the bathroom.  Later in the day, I read another article, talking about how the cost to safely sew a $22 pair of jeans in Bangladesh is ninety cents.  For $0.90, we can pay for safe factories and workers who aren’t killed trying to earn a living.  But time after time, businesses ask factory owners to choose to shave ten, twenty, thirty  cents — that’s less than two percent of the sale price of the jeans — by cutting pay, increasing hours, and failing to take precautions to protect their workers.

There are a lot of angles from which we can look at this problem, but the one I’m most interested in is this: would we, as American consumers, actually have a problem with paying $22.30, instead of $22, if it meant that young women in Bangladesh weren’t in danger of being crushed to death when their workplace collapses on their head?  I don’t think that the answer is no, but I also don’t think it’s as simple as a clean yes, either.

Why do Americans buy hybrid cars?  Part of the reason is price: as the cost of a gallon of gas goes up and the gap between hybrid and non-hybrid cars shrinks, the trade-off looks more valuable.  But the sales pitches aren’t based on cost, they’re based on the “feel-good” factor.  It feels good to buy a car that isn’t burning as much gasoline.  It feels good to buy eggs from cage-free chickens, so grocery stores prominently advertise them.  It feels good to go solar.  It feels good to plant a tree.  It doesn’t feel good to pay more for the same pair of jeans.

It there a way to bring these questions more into the public eye?  If the Shop-o-value can offer jeans for $23, and the Save-lots can offer them for $21, our choice seems obvious, but we don’t see that the Shop-o-value is using cage-free chickens, whereas Save-lots is burning fossil fuel just because it’s fun.  On the other hand, I don’t think a sticker that says, “Treats workers humanely; no factory collapses since 1986,” is going to have the desired effect.  It’s hard to quantify the cost in human compassion and fairness in a way that the American consumer can apply to purchasing decisions.

Maybe there’s a need for a non-profit organization which can rate factories and farms on a human rights scale, handing out A and B and F ratings to companies who care and don’t care about the conditions in which their workers produce for them.  Maybe we can move towards a world in which a WorkerCare grade of A would be a prominent selling point for an item, like pesticide-free or cage-free.

What do you think?  Is there a place for morality in business?  How do we achieve the transparency that consumers would need to take working conditions into account?

Faking Motivation

Some mornings, I just don’t want to get out of bed.  The idea of going into work at all is totally unappealing, but the idea of continuing to collect a paycheck is not, so I haul myself up and make my way into the office.  But what then?  On unmotivated days, it’s easy to find myself staring off into space, searching for new LinkedIn connections, or doing endless cycles by the water cooler.  How do you keep yourself moving?  Here are a few things I do to kick-start my motivation.

Dress Up

My company is business casual, with an emphasis on the casual.  My typical workday wear is jeans or a skirt, a nice button-down shirt, and tennis shoes.  On low-motivation days, I take it up a few notches, picking out a suit or a dress-and-jacket combo and wearing heels to the office.  The clothes say, “I’m here to work,” and it has a psychological effect on me as well as the people around me.

Eat a Good Breakfast

I know I should eat a good breakfast every day, but in reality, I often settle for a handful of cheez-its, a lollypop, and a diet coke in the car.  On low-motivation mornings, though, I make myself eat something more substantial.  I’ll have some granola with milk, or pick up a breakfast sandwich on my way into the office.  Protein is particularly good at giving you an energy boost that will carry you through the morning.

Clean my Cubicle

I don’t exactly let my cubicle degrade to squalor, but on my desk at the moment, I have a stack of unused napkins leftover from shared cake last week, a few printed proofs from tests I was doing on Monday, and several pens, post-its, and notepads, none of them put where they belong.  When I am having a low-motivation day, I straighten up my cubicle as soon as I get in.  Clean space, clean mind?  Maybe, but I think it’s more likely that doing something a little bit physical with a concrete, visible effect helps rev me up for the day.

Start Small

I don’t try to tackle big tasks right away.  Instead, I build out my day’s list of tasks with some small, easy jobs leading into and scattered around the harder jobs.  As I finish the smaller tasks, momentum carries me from one assignment to the next, and once I’ve started the big tasks, they don’t seem so daunting.

How do you handle the days when you just don’t feel like showing up?

Before You Go Agile

Agile is one of the hottest ideas in software development today, and it actually has nothing to do with software per se.  Agile is a project lifecycle methodology based on constant re-evaluation of your project and an iterative approach, where requirements, code, and testing are all being done constantly in small pieces.

Everybody wants to be agile today.  But what will it mean for you?  Here are some things to keep in mind if you want to go agile.

1. You can plan releases for dates or for functionality.  You cannot plan for both.
Agile requirements are deliberately fluid.  If you decide you are going to do A, B, C, and D for your July release, you don’t leave room to add X, Y, and Z if they’re more important.  If you want to maintain a consistent release schedule, you have to be willing to let things remain undone for now.  You’ll get to them in the next release (unless a more important M, N, and O come along…)

2. You will throw away work.
After you have designed, built, and tested a piece, a requirement may come in which requires you to rip out that piece and throw it away.  In fact, if you never throw away any code, you are probably doing agile wrong.  Get used to the idea now.

3. You need to embrace the idea of good enough.
You are not aiming for perfection on every iteration of an agile project.  If it will meet the needs of the customer, it’s good enough for a first pass.  Don’t do more than is necessary to meet the basic requirement.  If more is needed, it can be added as a new requirement with its own priority.

4. Modularity is your best friend.
If you are on a long-term enterprise-level project, I will pretty much guarantee that at some point, a new requirement will come in, and you will realize you need to change some major underlying part of your code to fix it, with implications that ripple through every line of code you’ve written.  To defend against this as much as possible, code to interfaces and keep your code as modular and pluggable as possible.

5. You must schedule work based on priority, not function.
If you have 6 major functional areas you are planning to address in a given release, it can be too easy to say, “We have three sprints, so we will focus on two areas per sprint.”  If you do this, chances are good you will completely miss one (or more) functions entirely.  Instead, do the highest-priority piece of each area first.  If you want to be able to view, edit, and print six different tables, start with building all six tables.  Then add the edit functionality to all six tables.  That way, if you run out of time, you’ll only be missing the least important functions from all tables, instead of missing some tables entirely in a way that might prevent a release from being usable at all.

Reversing Negativity at Work

No matter how much you love your job, there are going to be days when nothing goes right.  An important client suddenly demanded the impossible.  You find out that your boss’s totally clear instructions about last week’s work meant something different to her than to you.  You have three days of power outages and then a coworker gets the flu, and now you’re a week behind and catching up to deadlines seems impossible.  What do you do?

If you’re like me, or like most people I’ve worked with, you feel bitter about it for a while.  Here you are, doing your best, and now you’re deep in a hole, and it’s not your fault.  Maybe you and your coworkers commiserate and vent some steam: “What a jerk Bob is being,” or “They need to relax this deadline, because it’s absurd to pretend nothing has changed.”

By itself, this behavior is human nature.  When it becomes habit, it becomes toxic.  How do you break yourself out of that habit?

1. Think of an upcoming project that excites you  
A lot of people dwell on the exciting things they used to do, and see today’s routine as a step down.  The fact that you’re in a lull now doesn’t mean it will last forever.  Maybe the next exciting thing is a conference you’ll attend this year, or a paper you’re writing, or a new technology you get to play with.  Even if you can’t work on it today, looking forward to it helps restore your energy.

2. Compliment your coworkers
One of the dangers of negativity is that it spills into our attitudes about other people.  When we’re locked into negative thoughts, it’s easy to see the problems other people make for us, but almost nobody is a total waste of space, whatever we may think in our dark times.  Even if it’s something as small as, “Thanks for answering my email so quickly,” or “I appreciated that you asked that question in today’s meeting; I’d been wondering about it, too,” you’ll find that calling attention to the positives of someone’s performance will help you deal more comfortably with them.

3. Take a break
If you find yourself falling in a cycle of anger or negativity, stand up and walk away from your desk for a bit.  Get some coffee.  If you can, leave the building entirely and walk a loop of the building.  Count the flowers by the front door, or the number of people you pass on your way to the water cooler.  The most important part of this is to give your brain something else to focus on, to break up the cycle.  The sooner you do this, the better you’ll feel.

4. Cultivate small successes
Bitterness is fed on cycles of futility, where we feel as if nothing we do is having an impact.  To combat that, look for something you know you can complete and feel good about.  Every day, we put off dozens of small, important tasks because they aren’t urgent yet.  Complete a mandatory training course ahead of schedule.  Do an early performance review for a good employee.  Put together a how-to document you’ve been meaning to write for ages.  Getting a sense of closure on something, no matter how small, will refresh you.

5. Stop saying it aloud
When you complain about something unfair to your coworker, your coworker will agree with you.  Then your coworker will stew on it, and their negativity will go up.  Their negativity will make them complain about something to you, and you will agree with them.  And the cycle will repeat.

The simplest way to break the cycle is don’t feed the cycle.  If you can, tell your coworkers that’s what you’re doing: “I’m trying to stay more positive about things, so I’m going to try to avoid complaining for a while.”  Don’t put the burden on them, just say clearly what you’re doing.  You might find attitudes improving all around you as a result.