Wednesday, March 18, 2009
Bonuses bonus
I'm not outraged by AIG's bonuses mainly because Merrill's bonuses outraged me far more. (Apologies to my friends at Merrill.) But, getting them back wouldn't bother me either.
One person on my trading floor said, upon reading that a bill would be passed to tax the bonuses at 90%, essentially clawing them back, "It's the end of capitalism. Some of these guys work 100 hours a week."
These guys do work hard, but I hardly think capitalism is at stake. I once worked over a 100 hours a week, including shifts that exceeded 30 consecutive hours, over a summer for an average of $7.50 an hour. If anything, capitalism will be healthier if we have a smaller range of salaries.
While many of the people who will be giving their bonuses back did not cause the problems, their bonus guarantees were probably born of continued expectations of fat profits through financial derivatives.
Not causing the problem is not really the issue, though, is it? What if developers started a job and refused to fix bugs because "I had nothing to do with the creation of those problems"?
More importantly, at the end of the day, everyone should be expected to work hard. While I will say, having worked with both bankers and software developers, that the former work much longer hours on average, a good percentage of highly-skilled developers work 60 hours as week (and, of course, some work more). They might earn between 100 and 150k. Does working another 50% more hours justify 1000 to 2000% the salary?
Bursting any bubble hurts. Right now we're witnessing not just the burst of the housing and financial markets bubble, but also financial industry salaries. Ouch.
Tuesday, March 17, 2009
Simple things to help keep your job
You might feel more comfortable if you knew all the source code intimately, were a technical genius in every architecture and language, and knew as much about the business that your app is used in as the people who use your app.
All good things to work on, but this post is about things you can do that take almost no time, effort, or money.
1. Show up on time. Most dev shops have fuzzy start times and fuzzy end times. Most developers start late and work late. Yet, consistently showing up on time signals that you are reliable. It helps others include you in important conversations or events. Few of us are morning people, but this is a small price to pay.
2. Call ahead when you're going to be late. I once got a call from someone at 11 a.m. saying they were going to be late and they didn't want me to wonder if they were coming in. Uh, I was already wondering. Again, the primary issue here is that you want to give the impression of being reliable. In addition, there's no excuse to call when you're already half way to work; call when you get up and it's already obvious you'll be late.
3. Attend group social events. If the team is getting a beer after work, you could get a soda if you don't drink. You don't have to spend a lot of money, just buy one drink and nurse it. This is actually a great way to strengthen your work relationships. Your interactions become more natural, and that can help you when, for example, you need to bother someone to get help sorting out your java threading issues.
4. Volunteer for internal groups. If your department needs a social planning committee, or the company is looking for members to join a diversity group, sign up. This will take a few hours of your time, which you shouldn't let interfere with your work, but you'll be making contacts outside your team. You can also try out some new responsibilities, like project management or dealing with vendors.
5. Give a presentation. What have you been working on? Offer to give a training. It will seem as if you are doing the group a favor; meanwhile, you're actually practicing your public speaking skills, sharpening your thought organization skills, testing yourself on how well you know your work, creating documentation, and interacting with people you normally might not or at least in different ways.
6. Be courteous and treat people with respect.
7. Tell your manager as soon as you think you might take a day off. Someone told me once at 5 pm on Thursday that, "oh by the way, I booked myself on a weekend getaway, so I'm taking tomorrow [Friday] off". Again, perception of reliability is being hurt, and you might be causing your manager real scheduling pain that could easily have been avoided. Maybe you're afraid that you'll change your plans? I'm sure you're boss won't mind if you decide to work on that after all.
In a sense, these things are free, always have been, and yet it surprises me how often people don't do them. Maybe the current job climate will generate a few converts.
Monday, March 16, 2009
One way to know you are good
You can test how good you are by taking a job where you are expected to be a senior person: project or team lead, architect, technical expert. The newer the better: new industry, new programming language, new tools, new responsibilities.
Now, how long does it take for you to make a contribution to the team, to go from being a net receiver of information to a contributor, or, said another way, becoming someone who answers more questions than asks? How long does it take to generate unique insights about the application or the team's problems? How long until you become the go-to person in certain areas? How long before things emerge that only you can do?
If you have truly exceptional skills, the answers to all these questions will be "very quickly" or thereabouts.
Sometimes, you find out that what made you strong was just having been in your previous position for a long time or you've just been doing it longer, not that you were particularly gifted. Nothing wrong with that -- that's highly valued by any manager.
But keep that in mind when new people come, and they need your help or they don't seem to be as quick as you are.
Sunday, March 15, 2009
"Forced entrepreneurship"
Read this NY Times article about laid-off workers putting their creativity to do new things. The subject of entrepreneurialism fascinates me, because the good IT departments at my company, as well as the good small companies where I have worked, all have that same spirit.
At one start-up I worked at back in the 90s, we had a huge client-server installed base. Eventually, Java and web service type applications showed too much benefit, and we jumped with two feet into that space. What made that a great time was not the relief that I could strengthen my resume, but being surrounded by individuals who eagerly threw away everything they knew, where we were experts, for the chance to try some new things, where we were rookies.
At larger companies, organizational bureaucracy may crush the entrepreneurial spirit. But, I also find that a large number of the people who come to larger companies no longer have a hunger to learn, or even a curiosity about what is going on around them.
The best IT departments in our company attack problems like something personal is at stake, as if they were laid off, and it's now up to them to find solutions, to try new things. This can be difficult -- there is a lot of organizational bureaucracy of course -- but that should be the aim of every team and department. If yours is lacking that, then figuring out how to change it becomes the top priority.
Thursday, March 12, 2009
Gaming search engines for 15k a month
I say "seems" because on closer read, I conclude that it is a completely legitimate business practice. In fact, it may be the future of newspapers, or, rather, what will replace them.
The author's basic strategy is this:
Your goal is to build a site which contains everything someone would ever want to know about your root keyword.... Now you have some original high quality meat for your microsite which is truly original content and is highly targeted for each long tail keyphrase.Later, he markets the site by connecting to other authors and experts on the same topic, and creating a self-referencing blog.
Ultimately, this is exactly how people have always built businesses. They create a product -- say, "Rosetta Stone" language software -- then run infomercials about it. Or, they investigate a subject, write a book, and tour the country promoting it. (Malcolm Gladwell comes to mind.) The only difference is that this replaces monetary cost with technical know-how.
It is the kind of job that only technically savvy people -- do-it-yourself, non-corporate programmer types -- can do today. Tomorrow, it will go mainstream. But today, there are a growing number of these kind of jobs available to the right individuals.
Meanwhile, he has done a tremendous favor to the people who were interested in a somewhat obscure subject, by sorting and centralizing an ocean of information and creating new, relevant content. That's not gaming the system, that's providing a highly-focused news service.
Welcome to the golden age of information!
(Thanks to Jose for the pointer.)
Wednesday, March 11, 2009
The volunteers that work for you
Volunteers, of course, don't owe you anything. Treat them like crap, and they'll disappear.
How would your management techniques change? How would you motivate them? How would you get the bad, boring jobs done?
It's not impossible. I've worked at several organizations where the volunteers were willing to do mundane, thankless, even painful jobs at great personal effort. Sometimes, I was that volunteer.
It's an important question, because in a very real way -- more than ever, and even moreso in the future -- that's what they are: volunteers. They can leave, especially the ones you need the most. And "the cause" is more near and dear to their hearts than any a non-profit could offer: a job that interests and challenges them (while offering financial rewards, of course).
Monday, March 9, 2009
Who's fault is it?
Later, it turns out, you were right. The users hated the existing color palette. Responses indicate blue would have been best.
Who's fault is it?
In an ideal world, we wouldn't ask this question. Instead, we would move on to "what do we do now that we're in the situation we're in?"
But, usually the person asking this question is the person who suggested the blue colors. "Those idiots should have listened to me. It's all their fault the app looks hideous. I told them to change it to blue."
How hard did you push to change it to blue, though? Mentioned it once?
Often, you have to push an idea several times before people stop and hear you. More importantly, you have to be able to express why blue would look better or appeal to customers. If you can't do these things, then people would have to follow your idea slavishly -- hardly a good idea. If you didn't do these things, then it wasn't really an idea that you were willing to bet on.
A parallel would be the guy who says he knew a month ago Citi shares were going to drop to $1. How many shares did he short? Zero. People would pay millions for accurate advice like that. He could have quit his job, instead of working for peanuts. But he knew.
If you have an idea, you need to put your money down, put your reputation on the line. Otherwise, it's just words.
Many successful projects of all sizes -- Google Reader, Facebook, open source, to name some software examples -- faced strong opposition. They got done only because someone believed enough in it to put their reputation on the line, and communicated the brilliance of the idea convincingly.
Thursday, March 5, 2009
Motivation and complaints
All valid complaints actually, but I got worried because we were on the same project team. Was she going to drag her feet the whole time for one reason or another?
I kept my concerns to myself and plunged in. And came away surprised and delighted at how productive and helpful she was.
I came to realize that she just liked to have everything lined up before beginning. Work environment, data, clear sense of objective -- once these were in place, she could move mountains. The main point of her complaining was that it prevented her from getting to it and doing an awesome job. She was totally self-motivated, but in the wrong environment, her review might have contained phrases like "reluctant to jump in" or "a negative distraction".
Far from dragging her feet, she actually wanted to race, and cursed the clutter that blocked the starting line.
Wednesday, March 4, 2009
What's the value of 10 seconds?
As you must know, some sites require you to translate a distorted word and type it in when leaving comments, to filter out spambots. The guy who helped create that system "realized that he had unwittingly created a system that was frittering away, in ten-second increments, millions of hours of a most precious resource: human brain cycles."
It could be defended as a small cost and necessary evil, but he decided that surely all that power could be harnessed for something useful. So he reinvented it.
If you've visited those sites [e.g., Facebook], your squiggly-letter-reading ability has been harnessed for a massive project that aims to scan and make freely available every out-of-copyright book in the world, by deciphering words from old texts that have stumped scanning software.For example, through this effort, every issue of the New York Times, back to 1851, will be digitized by the end of the year! Which just goes to show, the sum of those small costs was very large, indeed.
This reminded me of another fascinating application that I learned about from a former professor of mine, the excellent Panos Ipeirotis. In his class, he mentioned the esp game, a very clever way to get real people to label images for free. Google licenses the game to improve searches on its millions of images.
As with fuzzy words, people interpret pictures better than computers. Both of these applications struck me as being like manual grid super-computing networks.
No wonder, then, that I later came to learn that both applications were created by the same guy, Luis von Ahn. I also came to learn, through my professor's blog, that von Ahn has recently started a blog. Full of interesting ideas, no doubt. We are in the golden age of information!
Tuesday, March 3, 2009
Maybe it's the game that's the problem
The comment was that Dennis Rodman should be fired from the team because Rodman didn't have a good work ethic. What?
We're talking about one of the greatest rebounders and defenders in the history of basketball. He won two Defensive Players of the Year awards. He once had 34 rebounds in a single game. His contracts often contained memberships to 24-hour weight-lifting gyms, because he worked out so much.
Clearly, he does not suffer from a work ethic problem.
But, it is also true that Rodman contributed very little to his team on Celebrity Apprentice. He required heavy coaxing for every small effort.
He stated that it was never clear to him what everyone's role was, including his own. He could have been just rationalizing his bad behavior, but there is still some truth there. Rodman's the kind of guy who needs to know his role, who likes to focus. In his basketball career, he didn't look to score very often.
The primary challenge of a software development manager is to motivate the team. People aren't successful, and often the reason is, "He wasn't motivated" or "She wasn't a hard worker." This is particularly relevant to software development because most companies want only self-motivated coders, due to the solitary nature of so much of the work. "Here's the source code, here's a problem description, go to it." Frequently, there's no training. If you're the right person, you'll figure it out.
Yet, how many Dennis Rodman's get the boot as a result? No doubt, motivating someone like Rodman is a huge challenge. (Fortunately, he would surely hate coding.) On the wrong team or with the wrong coach, Rodman was only a disruption, a "bad apple." Instead, he was a major factor in 5 championship teams.
Some people really do have a poor work ethic. A software manager has to distinguish the ones who aren't motivated from the ones aren't getting the right motivation.
So let me change that sentence. The primary challenge of a software development manager is to figure out what motivates each team member. Everything else flows from there.
Monday, March 2, 2009
10 papers every programmer should read
I found all of them online for free, except for #8, so I added links for them.
1. On the criteria to be used in decomposing systems into modules - David Parnas html pdf
2. A Note On Distributed Computing - Jim Waldo, Geoff Wyant, Ann Wollrath, Sam Kendall pdf
3. The Next 700 Programming Languages - P. J. Landin pdf
4. Can Programming Be Liberated from the von Neumann Style? - John Backus pdf
5. Reflections on Trusting Trust - Ken Thompson html pdf
6. Lisp: Good News, Bad News, How to Win Big - Richard Gabriel html pdf
7. An experimental evaluation of the assumption of independence in multiversion programming - John Knight and Nancy Leveson pdf
8. Arguments and Results - James Noble
9. A Laboratory For Teaching Object-Oriented Thinking - Kent Beck, Ward Cunningham html pdf
10. Programming as an Experience: the inspiration for Self - David Ungar, Randall B. Smith pdf
Thursday, February 26, 2009
What's the Google secret?
Google gets a lot of press about how great it is to work there and how people are lined up for interviews, like the lines for American Idol auditions. Stories about their 20% free time policy, creative culture, self-organization methods, and of course free food sound very appealing. I admire them for their innovative products and efforts to balance business with "not doing evil". And yes, some of my best friends are Googlers.
Recently, Google decided to reprice options that it had given out to employees. Due to the stock market cliff-dive, the options became worthless.
This reminded me of another tech company that was once considered the greatest in the world, hiring only the smartest of the smartest people. They minted many millionaires through stock options. People dreamed about working there.
The company? Microsoft, which many would say epitomizes everything that Google is against. It wasn't that long ago that Microsoft was the beautiful company.
Which led me to wonder: is the warm glow coming from Google really just a function of their (previously) red-hot stock price? Will Google be perceived as just another company now that the options payoff has disappeared, and their pay matches most other companies (i.e., now that even their masseuse can't become a millionaire).
Obviously, this is a simplistic view. Google represents the cloud revolution against the desktop, just as Microsoft represented the desktop revolution against big hardware. That's also important.
But what I'm interested in is whether Google is actually a fundamentally different type of company, or they just have a good business at the present time. I think if you asked Google management which they would rather have, they'd choose the former. (Of course, everyone would want both.)
The typical justification for options is to align both the long-term benefits of the employee and the employer, via the stock price of the company. At the point that the company reprices options, the options are no longer acting as an alignment tool, though. The employee benefited despite how the company fared. The company's options program is exposed as just a form of deferred compensation.
There's nothing inherently wrong with that. Any manager would be foolish not to exploit a cheap way to fund super salaries for great people, as long as the shareholders don't mind.
Going forward, it will be interesting to see whether Google's creative organization continues to be heralded as their secret weapon, or whether their exalted image will follow their stock price.
Wednesday, February 25, 2009
Seth's blog
Yet, his is one of the first blogs I read everyday, and much of what he says directly relates to having a software career based on excellence and demonstrating importance through daily effort. As he marks his 3,000th blog post, he comments:
The hard part, as you can guess, is the first 2,500 posts. After that, momentum really starts to build.He started back in 2002, so that works out to aboue 415 posts a year. Yup, he's definitely a guy who believes in daily effort.
Here's a fairly recent post -- a typical example of why I read him. It's aimed at marketers, but highly relevant to anyone building their IT career.
As you consider marketing yourself for your next gig, consider the difference between process and content.... As the world changes ever faster, as industries shrink and others grow, process ability is priceless. Figure out which sort of process you're world-class at and get even better at it. Then, learn the domain...
In IT, it's easy to get obsessed about content. Our resumes overflow with acronyms and languages, versions 3.7 through 8.13. As we work longer, we might pick up some knowledge about the industry we're in, such as financial services, so that goes in the resume too. It's all stuff we "know".
Meanwhile, what's really valuable is the process. Capturing that in your resume or identifying which job applicants understand the process is the challenge and the goal. How do you identify what is important to your user? How do you effectively test your code?
Practices such as Agile help draw focus to the process, but sometimes that just turns into another list of domain knowledge. What's a product backlog? How many weeks do your sprints last? This is all content.
The more important questions lie underneath these details. What's the purpose of a product backlog? Name some other ways to do the same thing, and why are they better or worse? That's process.
I highly recommend Seth's blog for anyone interested in thinking about how to do their job excellently.
Tuesday, February 24, 2009
There's no f in bonus
What is the purpose of a bonus? Reward for individual productivity? Incentive to stay? Alignment of interests between employee and employer? Profit-sharing?
If your answer is all of the above, then I think there's no chance the bonus system at your company is working. It's just another form of compensation, so there's almost no reason to have it; just give a regular salary.
The general public is fuming about Wall Street firms' bonuses this year, in light of having their received taxpayer assistance. The public views these bonuses as a type of profit-sharing; thus, no profit, no sharing.
Individual employees view these as productivity rewards. Thus, the ones who worked very hard and had measurable positive results this year are upset about low or no bonuses.
Middle management typically views it as a key employee retention tool. Thus, even though Mary Developer didn't have the opportunity to produce like in previous years (maybe a couple of her projects were canceled), and Joe Programmer out-produced Mary this year, rarely would a manager consider switching their bonuses if Mary is viewed as the foundation of the group.
I would guess that senior management most commonly views these as a way to align employee and employer interests. Unfortunately, the payouts encourage the employee's short-term interests, which may be at odds with the company's long-term interests.
Underlying all these interpretations: a bonus that doesn't grow or, worse, shrinks feels like a punishment, even if the bonus is advertised as variable or tied to profits.
I think the biggest problem is that most companies haven't really thought specifically about what the bonus should accomplish. Thus, it tries to do all of the above by default, only because everyone interprets it however they want.
One of the most important decisions a company's executives makes is how people will get paid. If they want use bonus payments effectively, they need to be crystal clear about their purpose, and drive that down through the company.
On Wall Street, they would likely have revamped the entire bonus structure, probably eliminated it. Unfortunately, the issue has now spun out of control, and the revamping will be imposed.
Monday, February 23, 2009
The end of H-1B?
the U.S. Senate unfortunately voted on Feb. 6 to restrict banks and other financial institutions that receive taxpayer bailout money from hiring high-skilled immigrants on temporary work permits known as H-1B visas.
Not only will "buy American" sentiment continue to grow, but the original purpose of the H-1B program -- to fill the shortfall in technology workers -- begins to look silly as the numbers of laid-off tech workers increase. I personally know several good technologists searching for work. If this downturn continues for any amount of time -- and it appears that it will -- then that shortfall will surely disappear.
At the same time, like everyone else in the industry, I have worked with plenty of H-1Bs, and have become good friends with many of them, so I wouldn't be in favor of shipping people out.
Ironically, it's probably in the best interest of countries who send their H-1B workers to the U.S. to keep them at home. But, what's good for the team (country) in the long-term may not be what's good for the individual in the short-term.
Currently, the U.S. acts like the New York Yankees of the world. The Yankees hire the most expensive and best players, tilting the odds of a championship in their favor. Smaller teams constantly have to re-tool with young, unproven players. Similarly, the best and brightest come here for better pay and working conditions, tilting the odds in favor of exciting new innovations being created in the U.S. They help start new enterprises that make their solutions available first to U.S. companes. Their countries of origin have to constantly train new talent to stock their own companies.
In general, I am in favor of more immigration. Economies with greater immigration prove to be stronger than those with less. Japan has suffered economically since the 90s in large part because of a lack of immigration, combined with a very low reproduction rate.
I'm not sure that targeting immigration to a specific category of worker is the best way to go about it, but it may be the only way to achieve the desire ends politically.
Thus, let me say: long live the H-1B!
Remind me I said this if I get laid off. But, you have to believe in your own value, that quality wins out in the end. As a result, I have confidence my friends, currently out of work, will find something soon, being smart and highly capable guys.
Difficult times put your beliefs to the test. That's when you find out what you truly believe.
Thursday, February 19, 2009
Path to excellence
Going deep means becoming an expert. This can simply be a manifestation of doing something very well: learning about what you're doing, instead of just trying to get it off your plate as fast as possible.
One person who worked for me coded up some trade feeds for regulatory purposes. As she went along, she spent the time to learn a lot of fine-grained details about the regulations and what that meant for our system. Eventually, every meeting involving coding changes (because the regulations regularly change or have exceptions) required her presence.
Another guy wrote a feed to send some data to a central database for management reporting. The feed required some calculation pre-processing, but otherwise, it was pretty straightforward. In doing his work, he came to fully understand the nuances of the calculation on our side and how any changes would affect the aggregation. Eventually, he learned so much about this overall business process that he stopped working for me and started working for the business side.
By going deep, you become the go-to person on a subject. You can go deep on a technical language or a complex application module. You become the state of the art for that art. You demonstrate high competence in a public, understood way.
Going wide means picking up new skills or knowledge. The key to going wide is that the value is unlocked only when you combine the new with the old.
My friends who worked on the trade and data feeds combined their programming skills with a business process they previously knew nothing about. They did an excellent job of combining the two.
What you can't do is learn something totally unrelated to what you are doing now. Eventually, this could pay off for you, but it could be a long wait, and it won't help you excel today. You are a newbie in the new field; your only advantage is your accumulated unique experience that you bring with you.
Here's a fascinating example of a guy who repeatedly goes deep, then jumps to something new but related, then goes deep in that. He started with industrial engineering, becomes an expert in gun manufacturing ("I probably know as much, or more, as any one single person about manufacturing guns," he claims, credibly), moves into robotics. Then,
A few months ago, Baber decided to design his own mini-helicopter, one light enough to disassemble and carry in a backpack. After a successful test flight in January, he is currently busy building [modifications].
Yes, these are all related fields for him. This example shows that, if you truly master this process, you actually create your own "industry". Here's the summary (and the full article, requires free registration).
Wednesday, February 18, 2009
What's in your box score?
It was, and is, far easier to spot what Battier doesn’t do than what he does. His conventional statistics are unremarkable: he doesn’t score many points, snag many rebounds, block many shots, steal many balls or dish out many assists... "He can’t dribble, he’s slow and hasn’t got much body control."Weak stats on both offense and defense, yet teams he plays for become winners.
Battier’s game is a weird combination of obvious weaknesses and nearly invisible strengths.... When he is on the court, his teammates get better, often a lot better, and his opponents get worse — often a lot worse. He may not grab huge numbers of rebounds, but he has an uncanny ability to improve his teammates’ rebounding.... At the same time he somehow improves the defensive efficiency of his teammates — probably, Morey surmises, by helping them out in all sorts of subtle ways. "I call him Lego," Morey says. "When he’s on the court, all the pieces start to fit together."
An old adage claims that you can't manage what you don't measure. Seems true enough. Is the quality of your software improving? Much easier to say if you have some statistics on number of bugs, severity, etc.
But are you measuring the right things?
For most of its history basketball has measured not so much what is important as what is easy to measure — points, rebounds, assists, steals, blocked shots — and these measurements have warped perceptions of the game. ("Someone created the box score," Morey says, "and he should be shot.")The ongoing financial meltdown contains numerous, unfortunate examples of what happens when the wrong behaviors are rewarded based on measuring the wrong things. For one, bankers bonuses were tied to the size of their deals, regardless of quality and risk.
It's only recently that the NBA started to figure out how to measure the value of team play. At "regular" companies, the use of 360 reviews attempts to get at something similar. Feedback loops from multiple sources on multiple aspects of a person's job can also be used.
Does your team / manager / company -- do you -- encourage behavior that makes the team stronger? Or are you breeding players just padding their own stats?
The article goes into a lot of other equally relevant and interesting subjects. Read the whole thing.
Tuesday, February 17, 2009
Promotions
Occasionally, someone works for me who actively disdains getting promoted. "Not my objective," is what they say. I applaud the attitude, but I do sometimes wonder about the underlying assumptions.
While it is accurate to say that it is not a primary objective, it should be an objective because getting feedback should be an objective. A promotion is one of the biggest feedback mechanisms. I'm a big fan of receiving feedback.
I think these employees feel the promotion process is corrupt and inaccurate, and therefore not an accurate reflection of what they do. Another version of this complaint: "only those who are trying to get promoted actually do," the implication being that more kissing up to the boss is required. Surely that happens in some cases, but the vast majority of promotions that I participated in or had detailed information on were openly debated and resulted in the right people being chosen.
But, even if you accept the premise -- that the promotion process is useless as a feedback mechanism -- asking, "What are the specific things I would have to accomplish to be promoted?" is a very good way of finding out how to succeed. This creates a conversation about what is considered excellent work and what isn't.
At the end of the year, if you didn't get promoted, but you hit all the achievements, you'll know you did a great job, which is the primary objective. Then again, maybe you will get promoted, and you might find you like it.
Saturday, February 14, 2009
Valentine's Day
That doesn't prevent millions of women from loving it all the same. After all, everyone likes to be appreciated.
When do you take time to tell your team how much you appreciate them? This is a serious matter, and something that doesn't happen enough. Studies show positive reinforcement is more effective and longer-lasting than negative.
The annual review doesn't count, though it should happen there as well. (Positive comments should outnumber the negative ones.)
Maybe you're thinking, "We have an event just for this already: our annual holiday party." But, that's a gift of the company, not from you, and if your company parties are anything like mine, what typically happens is people use the party to interact and bond with people outside their group. That's actually a great use of the party, and it also means you should have something separate.
How about an annual appreciation lunch with each team member? Or a party that is planned ahead and advertised specifically as a "team appreciation party"?
Sound contrived? Surely it is, but that won't stop your team from liking it and feeling appreciated all the same.
(Just don't do it on Valentine's Day.)
Friday, February 13, 2009
New rules: no more rules
This escalator sign doesn't really make sense. But at least they have the excuse of English not being their native language. Presumably, the Chinese makes perfect sense.On the subway I take, they have no such excuse.
The tunnel where I get out is very deep. A very long escalator takes you from the subway to the top, where the ticket booth and street exits are. The escalator only goes up; to go down, you have to take the stairs or the elevator. Once you arrive at the top of the escalator, an LED sign greets you with this message:
Thursday, February 12, 2009
Testing smackdown, part 4
At what point do you stop having a set of basic, reasonable programmingThis has expanded beyond testing and into development principles, but TDD is still a good straw man for the conflict.
guidelines -- and start being a Ferengi programmer, an imperfect manifestation
of the ruleset?
Note that Jeff's argument here is not the same one I was making before about why TDD or another development principles might be pushed aside sometimes (basically: real-world constraints get in the way).
In fact, even though Jeff and I seem to reach the same conclusion, I disagree with Jeff here. This might not be his only reason for discounting the importance of TDD, but at least this particular argument seems weak.
I'm not sure you could follow Robert's principles "mindlessly", so I don't see any problem with putting them out as design goals.
Several years ago, when I started coded heavily in Java, I read that you should only code to interfaces. It also said that behavior used by multiple implementations should be kept in abstract classes; in anticipation of that, it recommended extending abstract classes as a rule, so that specific behavior could be easily moved up if you wanted to generalize. And, actually, those rules make a lot of sense to me.
So, on my next assignment, I did exactly that. Every single class extended an abstract class. Every instantiation was to an interface. To some degree, mindlessly.
But, to some degree, thinking was always required. Do I need this method in the interface? Which part of the behavior goes in the abstract class and which in the implementation?
The real downside was the massive number of files. More files had to be maintained. Creating a class took more time, because I had to create 3 files every time I wanted one. Once that was done, however, the burden wasn't too great, and I did see some benefits later when I went back for modifications and extensions.
On subsequent projects, I created interfaces and abstract classes more selectively. This is closer to the agile idea of limiting complexity to what you know you will need.
With this practice, or pick a principle, say the Single Responsibility Principle, it's much easier to ignore it and just plow forward with the code.
I haven't yet run into a case where someone was absurdly over-applying solid development principles or practices; the incentives run the other way.
Wednesday, February 11, 2009
Coding epistemology
I consider there to be the three levels of knowledge. They reflect my belief that knowledge needs to be shared to get the most value out of it.
1. knowledge you know. You read something, someone tells you, or you do it yourself, to the point where now you know it. But how do you know you know it?
2. knowledge you can explain to someone else. This requires you to organize the information. Many times, in the actual moment of explaining, you will suddenly realize a gap in your knowledge or a fallacy in your logic. I think this is akin to getting a call from your mom that she's coming over, and realizing only at that moment that your apartment is a mess; you're viewing yourself through someone else's eyes. And yes, the act has to involve explaining and a someone else, not just a mental exercise where you convince yourself that it could be done.
3. knowledge you can answer questions with. People react to your explanations in unpredictable ways; weird questions pop out. They try to apply it to things you'd never think of on your own, just as end users do things with your application that you'd never considered. These questions test the robustness and flexibility of your knowledge -- or, said another way, they test whether your understanding is at the implementation or the abstraction level.
You are more likely to succeed at numbers 2 and 3 if, as in Jeff's example, you wrote something yourself from scratch, as opposed to someone just explaining it to you once. Someone explains something to us, we can walk away with a false sense of security in our knowledge, which easily crumbles in the face of simple questions.
Implicit in number 3 is the possibility that someone's question may blow up your knowledge, perhaps due to false or missing assumptions.
For these reasons, I like to have a "training" on any major new functionality, either as a group, or one-to-one. To verify that the trainee (which could be me) is truly walking away with knowledge, that person will later have to explain it to the next person. And take questions.
Tuesday, February 10, 2009
Good person, wrong role?
To some degree, just chalk it up to the intrinstic difficulties of hiring. Even legendarily thorough and expensive processes employed at places like Google and Goldman, Sachs let in a fair share of low performers.

However, a book I read lately brought another cause to mind. David Sedaris's Holidays on Ice is, like all of his books, a collection of funny short stories. The stories are always personal vignettes involving his family or some trip he took. His new books always get to the top levels of the sales charts. I have read several, and they never fail to make me laugh.
Holidays on Ice is unique in that it also contains a few purely fictional stories.
His fictional stories stunk. I can't think of any real clunkers from among the dozens of his personal stories spanning multiple books, but I found every one of the fiction stories to be unamusing and uninteresting.
If you were evaluating his writing, and happened to read only his fiction, you'd walk away thinking, "Everyone talks so highly of this guy, but he can't write!"
I think this points to a simple truth: people can be hugely talented and accomplished, but it still requires getting them into the right role. The right role is not a title. The Vice-President role under John McCain would have been vastly different than it will be under Barack Obama. Same title, different role.
Getting someone into the right role can be very difficult. Sometimes there's a mismatch with the company culture. Some people are highly accomplished but not good team players. Or, vice versa, they are solid team players, but that makes them ineffective on a team of stars. A personal narrative writer assigned to fiction.
A good manager should be evaluating and searching for the right roles and responsibilities for each team member. This is the first step in empowering and motivating your employees. It is also never-ending. If that sounds like a lot of work, it is, which is why a rigorous hiring process can pay for itself.
But hiring will only get you so far, and then it's time to manage.
Monday, February 9, 2009
Software trade-offs: strategy under fire
New competitors appear with new features. Those features target your specific strategy, exploiting it to expose a weakness. Or, "misuse" of your service also exposes a weakness of your strategy. How do you respond?
Keep in mind that the strategy is or at least has been critical to your success. Any changes could compromise the value of your software.
Lew Moorman sees Twitter theatening Google. (Via Robert Scoble.)
Twitter is building a human powered search indexing engine. It is an engine that will build better results than any rules based index and has gotten millions of people super motivated to contribute for free every day (even though they don’t know it).Robert also points out that Twitter and other real-time interactive sites will provide better late-breaking searches.
Meanwhile, the lack of human contact on Facebook has made it difficult to recover from scams.
Facebook confirmed Rutberg's identity theft story and says it's beefing up security in reaction to the new scam. But Rutberg isn't sure how effective the social networking company has been. His main complaint: There is no way to call the firm and sound the alarm that a crime is in progress. The company confirms it doesn’t accept phone calls.
I think Facebook's problem is the easiest to resolve: put a "I am the owner of this account, and it has been taken over" link on the site, which immediately gives you access to a live person. This phone number would also be used for people who have been locked out of their accounts illegitimately. Yes, it would cost some money, but that would be managed by limiting the calls to only identity issues: those who accounts have been blocked by hackers or Facebook.
Google can hope that greater "stickiness" among their various tools -- gmail, reader, etc. -- leads to a greater percentage of people logging in, which in turn makes it easier to track specific user's behavior and who's reading whom. This will allow them to generate searches based on personal networks. Longer term, I think some amount of loss to niche searching is inevitable. This actually creates a healthier online infrastructure for us, as users.
The key for Google is whether an exploitation could turn fatal (as Google's was for Yahoo and Excite, etc.). So far, I would say this one is not.
Saturday, February 7, 2009
Testing smackdown, part 3
If you had read through any of the articles and/or books I’ve written on these principles over the last 15 years, you’d have found that I don’t recommend the religious or dogmatic approach you blamed me for.I'm following this confrontation because I think it represents one of the primary benefits of our current age. The two parties aren't just blowing hot air: one is one of the greatest software architects living, and the other two are extremely successful professionals with large numbers of followers.
If people are misquoting or misinterpreting you, by all means, take them out back behind the shed. Perhaps they have been irresponsible. Perhaps these are wide-spread inaccuracies, and this is a chance to set the record straight. That's what Robert's trying to do.
On the other hand, perhaps real problems emerge with the methodology in some circumstances.
It's all out in public, so everyone can understand the nuances of each argument and make their own conclusions.
Think if George Washington were blogging to correct Supreme Court justices trying to interpret the "founding fathers' original intent". Or John Maynard Keynes were here to set the economists straight about what to do with our current financial mess. (The economic blogging battles going on make this software discussion seem very polite by comparison.)
Hopefully we'll get more details from all sides about both interpretation and implementation problems around test-driven development, SOLID, Agile, and other principles.
Friday, February 6, 2009
Dilbert + agile
Dilbert pairs up.
We need more programmers.
Thanks to Jose for the pointer.
Thursday, February 5, 2009
Even cost-cutting measures are now too expensive
The economic slump has become so pronounced that even outsourcing is getting scaled back. Executives who once relied on outside firms to handle certain IT tasks to cut costs are now reining in some outsourcing plans on concern they're too expensive.The article is specifically talking about off-shoring.
I disfavor any work arrangement where half the team is located somewhere else, unless a clear division of responsibility can be identified (in which case, you really have two teams). Great camaraderie helps you form a great team. "Negotiations" -- meaning, any agreement that has to be reached between 2 or more parties -- done in person have twice as much success than those done over the phone, and four times greater than email. (They haven't studied twittering yet...)
Outsourcing adds the additional problem of agency, where the development team's incentive is to benefit the outsourcing company, not the client. Yes, the two often overlap, but not always. Similar problems can occur when a big company makes its IT team a silo that reports to no specific business unit. Developers should have frequent interaction with the client, whether internal or external.
Off-shoring adds additional layers of problems involving culture, language, and time difference.
The poster child for off-shore outsourcing is manufacturing, where you can hire assembly line workers at crazy low wages. Yet, recent studies show even that may be false savings.
Can't control quality in manufacturing -- think how much more difficult software is.
Wednesday, February 4, 2009
Reverse H1B?
India, China, Brazil... sounds like IT development-type jobs. If they were business consulting jobs, I would think you'd have to speak the local language.The climate is warm, there's no shortage of exotic food, and the cost of living is rock bottom. That's IBM's pitch to the laid-off American workers it's offering to place in India. The catch: Wages in the country are pennies-on-the-dollar compared to U.S. salaries.
Under a program called Project Match, IBM will help workers laid off from domestic sites obtain travel and visa assistance for countries in which Big Blue has openings. Mostly that's developing markets like India, China, and Brazil.
One good aspect is that it creatively solves a problem for both sides. These are people who have been laid off, after all.
Unfortunately, it smells very much like shipping jobs overseas, which, in a time of financial crisis, is not a good odor. The other problem: if it works well, it creates the incentive to use it to actually ship jobs overseas, even if that wasn't the original idea.
Thanks to Tyler Cowen for the pointer.
Tuesday, February 3, 2009
Testing smackdown, part 2
As I mention in my bio, I work at an investment bank. After the market closed one day, at 5 or 6 pm, we got a call from one of the business managers.
"We need to stop trading with Bear Stearns. Starting immediately, if Bear tries to buy something from us, reject the trade." This was back when everyone became seriously concerned that Bear Stearns would go out of business. (Eventually, JP Morgan bought them.)
None of us was even aware that the trading feed had a feature that allowed us to reject a trade based on the buyer, because no one on the development team had been around when the trade feed was written 8 years before. And Wall Street had never stopped trading with another major bank in our lifetimes.
With the clock ticking, we investigated how the feature worked. After a couple hours of talking to business people and developers at the exchange (where we send our trades), we figured out what fields to check, how to reject the trade, etc.
And then we hard-coded Bear Stearns into our trade feed. Hard-coded. Ran a couple unit tests ourselves, dropped it in for unit testing.
It was coming up on 9 pm, so the business manager ran a couple of very quick tests, gave us the thumbs up. Developers at the exchange confirmed our messages looked good. We pushed it out to prod.
That was fine, until a few weeks later, when Lehman started wobbling. "We need to stop trading with Lehman."
Again, we hard-coded it.
Does this make you cringe? In this case, I think what we did was exactly right.
Now, you might say that we got lucky. This was major business functionality, and it went in with maybe a half hour of testing all together. And you might also say that the fact that we had to go back and break the code open again later for Lehman shows the problem with our rushed implementation.
But, frankly, part of doing your job is knowing your code and understanding the risks you're taking. That's what Joel is talking about when he says he wants to step back from hard rules because he fears that people will stop thinking.
What risks did we take? The main thing we considered is, "What is the cost of hard-coding this vs the cost of doing something well-designed?" Knowing our code, we decided hard-coding would save a lot of time with not much downside. The main reason: you only have a small number of trading partners that you could remove from the feed before you'd end up not needing the feed anymore! Yes, we had to bust it open again for Lehman, but that was maybe another half hour, since this time we knew exactly where to put that code.
And, of course, as it turned out, we've never had to remove this code.
So, from a time perspective, we spent less than 2 hours coding this and never touched it again. It'd be impossible to get a better return on a richer, more robust implementation.
How about the testing? The two best testers are the business manager and the developers at the exchange -- they know the features and exactly how they want it to behave. Due to the time of day, every minute we delayed meant less likelihood we would have the these experts around, if not physically then mentally. So, I wanted to get the results into their hands as quickly as possible, even though that meant shorting our own testing.
What would have been completely unacceptable would be to say that we couldn't implement it in time, before start of trading the next day. And that's what Jeff's getting at when he says
Because the unit of measure that really matters to me is, how quickly you can respond to real business needs with your code. And by that I mean, how well are you serving the people that are using your code. To me that's what it's all about.This is in the paragraph that leads up to the infamous quote. It's important to think about that when you consider his later remarks.
Monday, February 2, 2009
Testing smackdown, part 1
Robert C. Martin is deeply troubled by something Joel Spolsky and Jeff Atwood said. Yes, the Robert that wrote one of the greatest dev books ever. Yes, the same Joel and Jeff that inhabit spots 1 and 3 in Jurgen Appelo's top 100 software dev blogs.
Here's the offending quote, as spoken by Jeff:
I don't want to come out and say I'm against [unit] testing, because I'm really not. Anything that improves quality is good. But there's multiple axes you're working on here; quality is just one axis. And I find, sadly, to be completely honest with everybody listening, quality really doesn't matter that much, in the big scheme of things.Here's Robert's reaction:
I was riding my exercise bike, listening to Stack Overflow #38 when I heard Jeff Atwood and Joel Spolsky say “Quality just doesn’t matter that much.” I nearly fell off my bike.The condemnation would have been much harsher if "Uncle Bob" hadn't interpreted the offending comments generously.
I mean this is Joel Spolsky right? His buddy Jeff makes this incredibly dumb statement and Joel grunts his approval. WTF?
This is the kind of idiotic statement I would expect to hear from junior hackers, or people who haven’t written very much code.
Joel may be aware of the controversy, because he promptly posted on his own blog part of the transcript from the podcast, which I don't recall him ever doing before. Read it and form your own opinion about the context of Jeff's comments.
I will have my own opinion about it tomorrow after you've had a chance to consider your own.