Management


Have a code review coming up? Need to give your peers a thorough review of their code, but are dreading the drudgery of the process? Don't find the peer review process particularly effective?

There are volumes and volumes written about code review processes, including debates with paired programming and other Agile practices.

Here's a simple yet powerful alternative. It comes from a former colleague and uber developer: Kent Brewster. As a published author, he's used the Clarion Method as a process for "critiquing short stories submitted over the course of an intensive six-week 'boot camp' for new writers."

During a team meeting one day, as we hunkered down for a traditional code review, he suggested this alternative. In a nutshell:

Roles

  • Moderator
  • Code Reviewee
  • Code Reviewers (two or more)

Process

  1. Code Reviewee brings printed copies of the code to be reviewed (preferably with a maximum of 10 pages or so). Each participant gets a copy. Each line of code should be numbered.

  2. Code Reviewee provides a high-level summary of the code. This can include the code's purpose, known bugs, and a brief rationale behind its structure.

  3. Each Code Reviewer reads the code for 5-10 minutes in silence. They can make notes on the copies as necessary. The Moderator keeps track of the time.

  4. Each Code Reviewer takes a 3 minute turn delivering their review. No more than 3 minutes should be spent, as each turn is meant to be quick. If someone else mentions an issue you wanted to raise, just say "ditto on xxx" instead of repeating it.

  5. While the Code Reviewers speak, the Code Reviewee must remain silent. No rebuttals, no explanations, no excuses. Just shut up and sit there. There will be a chance to speak up later.

  6. After the reviews, the Code Reviewee now has a chance to speak. This opportunity should be used to ask questions and clarify what issues the Reviewers saw. Both sides can converse and debate freely now.

Exceptions

  • If the code requires execution to be properly reviewed, each participant can bring a laptop along. The Code Reviewee should provide a location where the code can be seen an executed.
  • If the code is very lengthy, select just one section to be reviewed. Other sections can be reviewed at future sessions.
  • If a Code Reviewer offers incorrect advice, raise it at the end so the Reviewer can learn from this session as well.

Kent has a more detailed explanation of this process on his site.

If done well, this process allows everyone to have a chance to voice their opinions about the code, regardless of their skill level. Code Reviewees and Reviewers alike can learn a lot from these sessions. I've even found that developers from across multiple teams can join in without requiring a lot of background information.

Even more telling is that many developers really look forward to their code reviews. This process forms such a supportive, non-threatening, and educational environment that developers know they'll always learn something new from a code review. That, to me, is a mark of a truly effective process.

Sunrise Here's something I used to tell my team:

If you ever go to sleep on Sunday night, dreading to wake up Monday morning to go to work, then something is very wrong with your job. You need to see me right away so we can sort it out.

I realize this is a luxury few in the working world have. The majority of employees out there probably dread every day except Friday and Saturday. In the dot-com industry, where our jobs are our hobbies, we get free coffee & snacks (and sometimes more) at the office, and there are perks galore, I find that most employees really love their jobs. Or at least don't despise them.

However, if you do despise your job, and dread waking up Monday morning to go to work, maybe you should talk to your manager. Or quit.

Do parents make better managers? I sure think so. There are lots of similar responsibilities in both roles. Each trains you and prepares you for the other in a cyclical manner.

And apparently, according to a Forbes.com article, researchers from Clark University and the Center for Creative Leadership in Greensboro, NC, agree:

According to new research, parents–at least those committed to family life–actually perform better in the office. …

Those who were committed to family life achieved significantly better reviews. The reason: Parents learn to multitask, handle stress and negotiate, says Marian N. Ruderman, research director at the Center for Creative Leadership, and one of the study's authors.

"In parenting roles you get a chance to do a lot of the same things you do as a manager," Ruderman says. "You get to hone your interpersonal skills. You learn how to develop other people. It's another opportunity to learn from experience."

Ah! Exactly what I said!

There are some caveats, though. "After all, employees are not toddlers," says the Forbes.com article. (No, not toddlers. Maybe more like teens. Ever try to settle a petty dispute between coworkers?)

There isn't direct evidence of causality between being a good manager and a good parent, however. But someone who's a good manager typically is a good parent, and vice versa. Tammy Allen, a psychology professor at the University of South Florida, adds: "the best employees are probably those who are engaged in all life roles," whether it be as a manager or a parent, employee or spouse. "It's just indicative of someone who's an active, engaged individual."

In another study by Ajilon Office, an executive administrative professional staffing firm, says that "77% of American women believe that being a parent helps prepare one for being a more effective manager."

Although the study focuses more on women's perceptions of how being a good parent means being a manager, the results raise some salient points:

  • "The top parenting skill that helps out the most at work is communication according to 50% of women."
  • "Whether it's being constantly on the go with children's extra curricular activities or working on three different projects at once, women rank the ability to multi-task as the second most important parenting skill that helps at the office."
  • "More than a third of women decided that learning to be flexible as new projects arise and priorities shift is the workplace skill that's refined most at home while parenting."
  • "Another 23% of women believe that the ability to handle workplace conflicts, whether it's between co-workers or with clients, is the top managerial skill that comes from raising children."

See? Mommy's not just a manager at work; Mommy's a manager at home too.

Ever get close to burning out from a heavy workload? Your boss is pushing you to complete twenty tasks this week, yet you know you can only handle five or six. So you stay late and dine on coffee and pizza, trying desperately to finish at least ten.

And after you finish ten tasks (sans sleep and a healthy meal), another twenty tasks hit you next week, giving you a total of thirty. Deeper and deeper you sink as the weeks drag on.

Sound familiar?

As a former manager, I often heard about cases like this from my team. Heck, I experienced cases like this myself. Over time, I developed a way to compensate for these unrealistic & heavy job workloads. I had to; I would have gone insane had I not.

  1. First, it's important to realize that it's not always possible to complete all the tasks you've been assigned. Your boss may make you think you can. Even you may think you can. But c'mon, be realistic. Look at all that work. If you feel that troubling pinch in your gut, then trust your gut: you have too much work.

  2. Second, let your boss know. Not all managers are able (or willing) to help you lighten the load, but you still need to alert your manager about this condition. Give your boss a chance to fix it if possible.

  3. Third, find out the source of all these tasks. Someone asked for this work, so go seek that person out. Ask that person how urgent and necessary this work is; chances are, some of it can be postponed or done by someone else with more time.

  4. Fourth, prioritize your tasks. After speaking with the sources, you'll have an idea of the urgency and importance of each task. This can allow you to prioritize each of the tasks and do the most urgent and most important first. Ideally, your manager should help you with this, but if he/she is not able to, do it yourself.

  5. Finally, do the work. Do them in priority order. Realize that some of the items won't get done. If you can, set clear expectations with your team and the sources of work. This isn't always easy, as many will argue and try to coax a higher priority for their task. But hey, there are only so many hours in the day. The more they argue, the less time you'll have to finish everyone's tasks.

In my opinion, your direct manager or project manager should handle this kind of task prioritization for you. That person would/should also have the power to delegate and balance the workload across the team, which is something you may not have the authority to do.

Unfortunately, managers aren't always able or willing to do this. If that's the case, hopefully these tips will help.

What have you done to handle a heavy job workload?

Entrepreneur Week at Stanford University During his lecture "Top Ten Mistakes that Entrepreneurs Make", Professor Jeff Pfeffer said something that made me go, "Ah!"

If two people agree on everything, then one of them is redundant.

It's a quote from a colleague of his. What he's saying is that constructive conflict is good, even necessary, for highly-functional teams. When team members disagree, each is forced to defend his/her position. In doing so, facts are surfaced, assumptions are challenged, alternatives are analyzed, and everyone walks away more enlightened than before.

To put it another way: two heads are better than one, right? The more diverse your team is, the greater the variety of solutions they can offer. If everyone in your team thought the same way, however, then why do you need that team? Why not just keep one person and fire the rest?

A friend recently asked me, "How do you deal with flaky people when you're in start-up mode?"

My answer: Don't.

When you're just starting up a new business, the people you choose will be absolutely critical to your long-term success. These are the seed people, the grandparents of your business, the ones who will set the pace for generations to come.

A start-up requires an incredible amount of work. It's not for the faint of heart. A flaky person is not someone with a strong heart—at least, not for your business. Why would you want someone who only cares half-heartedly about success?

There are exceptions, of course. Perhaps that person's skills are extremely rare. Or that person is already loaded with prior commitments. What do you do then?

Then it becomes a matter of motivation and task management. I've already written about motivation. Here are some tips on managing the tasks of a flaky person.

(In this definition, a "flaky" person is one who is unreliable, may not complete tasks on time, and may even forget some of those tasks.)

  • Be clear and direct about expectations. Put them in writing (an email is fine).
  • Get that person's buy-in on tasks. Have that person agree (verbally or in writing) to the tasks.
  • Set clear timelines and deadlines. Make this schedule visible to the person.
  • Communicate often, even to the point of over-communicating. Repeat the tasks and deadlines.
  • Hold regular, predictable, and frequent checkpoints. The checkpoints can be short and succinct.
  • Give feedback immediately to the person, especially if performance is an issue.
  • Have a back-up plan for an alternate resource.

In my opinion, working with a flaky person in a new business is very, very risky. Personally, I wouldn't do it. But if you have no choice, hopefully these guidelines can help. Good luck!

There are many schools of thought on employee motivation. Here is the philosophy I've used while managing Internet software developers. The underlying principle is simple and has served me well.

Employee's Goals

Employee's Goals

This graph represents your employee's own personal goals. These are individual motivations which can be ideas like, "to get a promotion," "to be a manager," or even "to save enough to buy a house." They don't necessarily have to do with their day-to-day work either; they should be the deeply personal motivations which drive that person.

Company's Goals

Company's Goals

This graph represents your company's goals. These can be company-wide or specific to your particular team. The key here is that an employee's personal goals will rarely map directly with a company's goals (you're probably thinking, "no duh").

The Convergence of Goals

Convergence of Goals

At some point, there will be an overlapping of an employee's personal goals and the company's or team's goals. If you can accurately identify both sets of goals, those that converge in the middle will be the strongest motivators for your employee within your business.

If your employee is working on a task that is outside his/her personal goals, but within the company's/team's goals, your employee will most probably still do it, but may not be strongly motivated, depending on how far it is from his/her personal goals. Conversely, if the task is outside the company's goals, but within his/her personal goals, your employee will be strongly motivated, but the task won't be of any use to your company.

It is also important to note that not every task can be mapped directly to an employee's personal goals. Every job has its share of grunt work. But as long as a reasonable number of an employee's tasks fall within the convergence of goals, then you'll have a well-motivated employee.

An Example

Mary and Joseph are developers for Acme Software. David is their manager. Acme Software creates desktop and web widgets.

In his talks with Mary, David learns that her personal goals are to become a manager and one day own her own company. She's already a brilliant developer who's stronger in building web widgets than desktop widgets, but has lofty ambitions that span outside of Acme Software. Mary hasn't yet held any managerial positions, but exhibits some leadership capabilities.

With Joseph, David learns that his personal goals are to purchase a bigger house for his growing family, get a promotion, and earn a name for himself in the open source community, where he already regularly contributes. He's a strong desktop developer, but wants to grow his skills in web software. Joseph has no interest in management and the politics that come with it.

Joseph's team is tasked with building a stock ticker widget for the desktop and the web. He needs a team lead, a senior developer for the desktop version, a senior developer for the web version, and junior developers for each.

Knowing what David knows, he gives Mary the assignment of being the team lead and Joseph the assignment of senior developer for the desktop version. This matches both of their personal goals and their team's & company's goals, with a few compromises. The rest of his team fills the other positions.

For Mary, this is a stretch role. David will have to mentor her closely as he tests her leadership and managerial aptitude. Her strong technical skills help her earn the respect of her team, though she will need help earning the respect of the product, sales, design, and QA teams. This experience will be very valuable for her, especially if she's to own her own business one day. David explains this and Mary enthusiastically takes the assignment.

For Joseph, this is a stepping stone towards a promotion and internal recognition. As the senior developer in an area with which he is competent, desktop development, he will define the technical architecture while working closely with the senior developer for the web version. These discussions will familiarize him with web development and prepare him for a future role coding a web widget. David explains this and Joseph enthusiastically takes the assignment.

By understanding the convergence of his employees' personal goals and the goals of his company & team, David has been able to staff a highly motivated team. Not all real life cases will be this easy, of course, but these underlying principles can be a useful guide for any manager.

Trying to sell your ideas within a corporation isn't always easy. You have to contend with politics, egos, bureaucracy, and other assorted barriers.

With that in mind, I put together the following information a couple of years ago for my team. Some of it is influenced by Seth Godin's book Free Prize Inside, which lists lots of great idea promotion techniques.

Introduction

  • This is not about how to come up with great ideas
  • This is about how to promote your ideas
  • Your job is to come up with great, viable, & successful ideas

Ideas Are Easy

  • There are a million great ideas out there
  • There are a million bad ideas out there too
  • Lots of websites give you free ideas almost every day
  • People at your company may be bursting with ideas already (maybe)
  • Your company's problem isn't generating ideas, it's choosing which ones to implement
  • Your problem isn't how to sell your idea, it's getting your idea through the clutter of other ideas

Be an Idea Champion

Understand People & Politics

  • Understand the other person's point of view of life, frame of mind
    • Consider the person's background, culture, social standing, economic status, religion, family, ethnicity, etc.
    • Consider personality typing tools (Jung, Myers-Briggs, Keirsey)
    • Be aware of non-verbal communication & cues
  • Understand the other person's goals & motivations
    • Be aware of what the pesson wants from life, from you, or from this particular deal. What matters to this person? Money, fame, reputation, a promotion, etc?
  • Find out who the true influencers are; these aren't always the top executives (though usually they are); sometimes, it can also be a project manager or a low-level product manager, or even an administrative assistant
    • E.g. The executives of a major company wanted innovation. Unfortunately, below them were some senior managers who were afraid of upsetting the status quo and hurting their stock options because they were already making a fortune on them. They wouldn't let any new ideas through if they hurt the status quo. These senior managers were the true influencers, not the top executives. A way to approach them is to understand their motivations and show that, by not embracing this idea, the status quo would be broken because competitors would do it better.

Convince Others That Your Idea is Great

  • Not just good, but great
  • Do some research and gather statistics to back-up the potential success of your idea
  • Show them your vision, describe the future where your idea is a reality
  • Tell them the emotional impact of your idea, get them energized about it
  • The goal is not to prove beyond a doubt that your idea will work; that may be impossible to prove. The goal is to go through the necessary steps for your colleagues to believe that your idea will work
  • Understand what motivates people (which ties into politics)
    • Some want a cool challenge
    • Some like the geek factor of new technology
    • Some like being the first-to-market
    • Some want to push the stock price up
    • Some like making their own jobs more secure
    • Some want to make the world a better place
    • Some want public recognition

Convince Others That You Can Make This Happen

  • Build your reputation as a leader, an Idea Champion
  • Start small (plan a small event, like a team lunch)
  • Increase your responsibilities (take on increasingly more difficult tasks)
  • Take ownership of difficult, complex problems (own them from identification to resolution)
  • Be proactive about problem-solving (if you notice a problem happening frequently that no one else has identified yet, step up to find a solution)
  • Consider volunteering to champion someone else's idea (to help prove yourself and gain a political ally)
  • Consider learning about project management, marketing, engineering lifecycles, etc; (give yourself the right skills to see your idea through)

Good luck, champ!

Next Page »