Mission Statement

The "Planet Bruce" blog is dedicated to a four-fold mission:

* Improve the technical and non-technical skills of software developers.

* Address the communication gaps between management (both technical and non-technical) and software developers.

* Help software developers to increase their income and happiness by maximizing their utility and productivity to their clients and employers.

* Contribute to the understanding of best practices in software development and technical management.
Showing posts with label career advice. Show all posts
Showing posts with label career advice. Show all posts

Monday, February 24, 2014

Top Ten Things You Should Learn from your Job Search and Interviews


Turning a Losing Situation in a Win-Win


Think of interviewing for a job as asking someone out on a date. You find someone you are interested in, you ask if they want to meet, they say 'yes' sometimes, then you meet and talk to see if you hit it off. Then, someone may make you an offer, and you live happily ever after. But that is about where the similarities end, so get your mind out of the gutter. Now let's talk about how job interviewing differs from dating.

Job searches are like an open-book test that you can re-take as many times as you like, each time earning a better grade. If you make a point of learning something from each interview and making adjustments before the next interview, your chance of success goes up each time.

 

Here is a list of the things you should find out before, during, or after the interview. The first three are things you should research in advance, the next three are things to ask during the interview, and the last four are post-interview tasks.

 

1. Research the Industry Expectations and Standards


Don't be surprised going in. Do your homework, so you know what the industry pays, what hours to expect, what skills you need, etc. Know whether you need so-called "domain-specific knowledge" (i.e. how important is industry expertise).

For example, I once was told that I was a shoo-in for a job in a financial company. I had been through four or five interviews that all went well, and I was just supposed to get the final stamp of approval from one of the VPs. I had researched his background on LinkedIn and could tell he was not a programmer so he was unlikely to ask me any technical questions.

I thought it might be a very easy interview. Instead, he asked very specific questions about financial terms. He threw out acronyms and the names of standards that I really didn't know. Try as I might to relate my prior experience and background to the current position, he just wasn't willing to take a risk on someone without financial experience on his resume.

Early in the the interview, ask, “What sort of industry-specific experience do you think will be most relevant to candidates such as myself?”  If you didn't get the job this time, you'll know to check the job posting requirements more carefully next time!

2. Research the Company and its Products


It is best to do some research on the company ahead of time. Start at the company's web site and read beyond the job openings. Read about their products, their press releases, and their staff. Does everyone look young and fresh, or old and experienced? Does the company sell itself on its innovation, or on its history and track record. What key words and phrases appear on their site? What are their core competencies? Do they match yours? If you work with a recruiter, ask what s/he can tell you about the company.
Be prepared to act like a product manager. If the interviewer asks, "What one innovation or improvement would you suggest for our products?" you should have an answer ready. This demonstrates you have done your research, have thought about how you may contribute, and can articulate your interest in and understanding of the company's core mission.

3. Research the Interviewer


Always find out about the person you will be interviewing with. This is easy, because you always know the company they work for, and you will usually have at least their name, and often their job title. Use Google and LinkedIn to find out more about them: where they went to school, what degree they have, how old they are, etc.  Check the company web site, especially if you have only the interviewer's first name.

If the interview goes south,  you should at least figure out if it was something related to the person's background. So the best hint you have is knowing the context of the person you interviewed with. Stay away from the obvious landmines, such as personal issues, politics, religion. Stick with the stuff in your roundhouse, such as sports, travel, or a shared alma mater.

The number one reason you will get the job is because of a shared personal rapport with one or more decision makers. Never underestimate the personal touch!

Often, you'll interview with multiple people on the same day or over the course of several days/weeks. Always ask the current interviewer about the “next” interviewer. For example, “Well, thanks very much. I understand I'm supposed to interview next with Bill Smith. What do you think will be the most important qualifications that Bill will be focused on?”

4. Always Ask what the Company is Looking For


The hiring party is always happy to tell you what they are looking for, so ask! But don't focus on the candidate (you); focus on the company's needs.

For example, you might ask, “What would you say are the two most important skills or qualities you are looking for in the ideal candidate?” That's okay, but can also sound amateurish.  Put the focus on the company's needs.

A much better question to ask might be, “What are the two greatest needs for your team based on the skillsets of the existing team members versus where you need to take this project?”

Or try, “What are the two greatest obstacles between this project, as it currently stands, and where you want to be in the next six months?”


5. Know the HR and Hiring Committee Process


Understand how hiring decisions are made at the company. Some companies allow hiring managers to select candidates on their own. But very often, it is a group decision among colleagues.

For example, you might interview with two programmers, one director, and one VP.  As long as no one has any objections, a strong recommendation from one interviewer (such as a technical interview/test) may carry the day.

But the decision may be made by people who have never met you. At a hiring meeting, the Hiring Committee might review your resume, plus receive reports from each person who conducted an interview.

At such meetings, the hiring manager has to “go to bat” for you. S/he may be unwilling to do so it, for example, you haven't completed a college degree in a relevant field or if your work experience is a bit thin.

The likelihood of getting hired is inversely proportional to the political capital that has to be expended to get approval to hire you.

If you think you are going to be presented to the hiring committee, ask the interviewer, "Are there any questions regarding my work history or credentials that you'd like me to clarify, or do you have everything you need?"

6. Ask About Other Open Positions


Find out what other jobs are open at the company (many are never advertised).

Especially if the interview doesn't seem to be going well, always ask if there is another position in the company for which you might be better suited.

During the interview, ask something like, “Based on the job skills I have, what roles do you think I might fill in this company?” Or, if the interview is going south rapidly,  ask, “Who else might I speak with about other roles in this company for which I might be a better fit?”

7. If You Didn't Get the Job, Figure Out Why


The easiest way to find out why you didn't get the job is to ask. Sometimes, the hiring party will be forthright. It may be as simple as, “We are looking for someone with more Java experience,” or, “We were looking for someone more senior,” (your experience is too skimpy) or ,“We're looking for someone more junior” (you're too expensive, too old, or too arrogant).

There are lots of reasons why the interviewer might not tell you. When working with a recruiter, they might be more likely to give you the reason. If someone won't tell you the reason, then try to figure out what you thought was your weakest point. Did you talk too much and ask too few questions? Did you answer their questions accurately and succinctly?

If you don't feel comfortable asking why you didn't get the job, make it less direct and easier to answer, such as, "If I'm looking for similar jobs in the future, what is the one thing you think I can improve on most?"

Don't worry if you don't get a given job. That's okay! But be sure to learn why not, so you can begin to make course corrections. If no one will tell you, ask your best friend if you have b.o.

8. Learn the Answers to Questions you Failed


Look up the answer to any interview question you couldn't answer. Research any topic/skill they said was a requirement for the job. This one is a no-brainer, yet most people fail to take heed!

Suppose you are interviewing for a Project Management job and the interviewer asks how familiar you are with MS-Project. If the answer isn't “fluent,” then you probably have to go out and learn it.

Or suppose they ask you to describe the software development life cycle, or compare waterfall and agile methodologies. Guess what? You need to look those things up and practice discussing them intelligently.

9. Hot or Cold?


Remember that kids' game where you'd walk towards some unknown item and the person running the game would say "getting hotter" or "getting colder"? Well, your job search is the same. You will be getting constant feedback about whether you are getting warmer or colder.

Are you getting more or fewer responses? First interviews? Second interviews? Job offers?

Make an honest assessment of which direction things are going. If things are improving, be patient. If the trail is cold or getting worse, you need to do a serious personal and professional reassessment.

10. Major Reassessment


If you are on the wrong track, it may be time for a significant change in your approach. Do you need to learn a new skill, switch fields, accept lower pay, or move to a different city? Do you need an advanced degree?
Ask for honest feedback from potential employers, recruiters, colleagues, and friends. Then listen, and be honest with yourself. Correct the most glaring flaw, whether it be your resume, your dress, your interview skills, or your unrealistic salary expectations. 
There are a finite number of variations as to how companies operate or why you aren't getting hired.

For example, if you run into four interviews where you lose the job because you don't have a college degree, you either have to get a college degree or apply for a different type of job.
If you keep eliminating the most glaring problem, eventually, there will be no fatal flaw that prevents you from getting offers, and you can start choosing among jobs.
Find the industry that fits you, and find a mentor to help guide you to the career at which you know you can excel.

Conclusion


You might say, “What is the point of finding out this information after the fact? If I didn't get the job, I need to put it out of my mind and move onto the next one.”

You are confusing a single job role with a job search. That one job may not have worked out, but it is probably highly correlated with future jobs you still want.

Think of each interview has a practice swing. The beauty is that you can never strike out, and you'll eventually learn to hit the curveballs if you just keep improving.

So, think of each interview as a chance to get free feedback on what mistakes you have been making.

There are an infinite number of companies out there with which you can get a fresh start based on the lessons you learned at the company that just didn't work out.

Sometimes it is just a numbers game! If you get 100 swings at the ball, eventually you will get a hit.

So get back in the batter's box and take another swing.

Happy job hunting!

Please comment, link, share, etc., and check out the other articles on the right-hand side.

Tuesday, February 18, 2014

The LeBron James of Programmers


How should Hyper Performers be Judged and Compensated? (How to Make the Case for a Raise)


I'm often asked questions about compensation by both employers and candidates, such as:
  • What is a fair salary for this position?
  • Why can't I find a higher salary?
  • Why can't I find and attract top talent?
  • What skills pay the most?
  • How can I get a raise?
For many years, I have wondered why a great programmer (one who is 10x as productive as a poor programmer) doesn't make 10x the income.

There are a number of factors, as described in The Myth of the Bell Curve, but that only explains part of the discrepancy. Even if we agreed that a programmer is 3x as productive, are we willing to pay 3x more? Should we be willing to pay 5x more once you take into account the fixed overhead, such as health insurance, and indirect savings through making others more efficient?

I find that the missing piece is a shared understanding of how to measure the minimum skills required for the job. Because I think the question that dictates programmer salaries is, "Who is the least qualified programmer I can get to do the job?" In another post, I'll try to cover how low-rate programmers cost companies more, but the focus of this post is the hyper performer.

How Much is LeBron James worth as a Programmer?


The average NBA player's salary is about $5,000,000.

The lowest-paid NBA players, like poor Mario West, make about $25,000.

Kobe Bryant makes about $30,000,000 but his salary is an outlier; the top 10 players average about $20,000,000.

LeBron James, widely considered the best player in the world, makes a little less than $20,000,000. He could make more, but he agreed to a lower salary in order to keep the Miami Heat under the salary cap while attracting top teammates. Not to worry, his endorsements raise his total haul to around $60,000,000 per year.

I've been using all the zeroes in the preceding numbers, instead of abbreviations such as $25K or $20M, so you could appreciate the orders-of-magnitude difference in compensation.

Please note:

  • The highest-paid players make about 1000x the salary of the lowest-paid players.
  • The top 10 players (top 1.7% of 565 players) each make about 4x the average player and 800x the lowest-paid players.
  • Even the lowest-paid players are all incredible athletes who have made the NBA. They are undoubtedly better than the vast majority of college and undrafted players who are not in the NBA, and perhaps better than players in other leagues throughout the world.

How much am I worth as a Basketball Player?

 

Instead of trying to evaluate my worth as a basketball player, in the aggregate sense, let's narrow it down to some specific metrics by which a basketball player can be evaluated, such as free-throw shooting.

How much am I worth as a Free-Throw Shooter?

 

Let's suppose that LeBron James and I are having a free-throw shooting contest (foul shots).

His career free-throw percentage is about 75%. Let's assume mine is about 25% (I can dream).

So, is LeBron worth only 3x me as a free-throw shooter? Perhaps.

Now, let's change it to a game situation, in which LeBron James earns 7.6 free throw attempts per game, because if they don't foul him, he is going to score anyway.

If I was in the NBA, and I played as many minutes and took as many shots as LeBron, I'd average zero free throw attempts per game, because no one would ever both fouling me ("He's open for a reason.") Let's be generous and assume I make 1 free-throw per game.

So, as a free-throw shooter, LeBron is worth at least 7.6x as me.

How much am I worth as a Three-Point Shooter or Slam Dunker?

 

Now let's imagine I have to make some three-point shots (about 23 feet away from the basket). With no defender, I might make 1 shot in 10 from the three-point line.  LeBron makes about 36.5% of his three-point attempts in a game situation, which is only 80th in the league!

Maybe I'm worth more than I thought.

Now, instead, let's imagine we are in a slam dunk contest. Granted, this isn't required in a game, but let's pretend it is a job requirement.

How many times, out of 100 attempts, will LeBron successfully slam dunk the basketball? I'd guess about 95% of the time, even when doing trick dunks, judging from this video.

I have never dunked a basketball on a 10-foot rim without using a trampoline. I will never be able to dunk a basketball, even if I get my knee repaired.

So, if dunking a basketball is part of the job requirement, LeBron James isn't just 100x or 1,000x more valuable. He is infinitely more valuable, because I simply can't do the job.


How Much is LeBron James worth as a Programmer?



Now, let's imagine we're in my house. LeBron won't stand a chance.

Can LeBron:
  • Write a Jenkins script?
  • Configure SVN and train the team on best practices?
  • Create a re-usable component?
I'm sure he is a smart guy who can do many things, but he presumably less of a programmer than Michael Jordan was a baseball player. (MJ made about $5/hour as a baseball player.)

How Much is a Great Programmer Worth?

 

So what are the factors that typically determine the low and high end of a programmer's salary?

The following are examples of things that cause downward pressure in your value as a programmer:

  • Low level of skill required (basic HTML, or template work)
  • Lots of repeat work required but not highly original (i.e., programming banner ads)
  • High number of qualified applicants relative to job openings
  • Easily outsourced or off-shored to lower wage markets
  • Low-paying industry, because people think it is glamorous (fashion, sports, etc.)
  • Low-paying because industry is not profitable (non-profits, dying businesses)
  • Low-paying due to lack of capital (start-ups, mom & pop shops)
  • Low paying due to poor stock market, IPO, or VC interest
  • Cyclical or boom-bust downturn (2000 Tech crash, 2008 Recession)
  • Dying technology with glut of existing programmers competing for declining number of roles.
  • The geographical market pays little (college towns, etc.) due to low cost of living, etc.

The following are examples of things that cause upward pressure in your value as a programmer:

  • High level of specialized skill required (quant, enterprise architecture, big data)
  • Highly original or creative work (award-winning advertising or game design)
  • Low number of qualified applicants relative to job openings
  • Harder to outsource or off-shore due to time constraints, security restrictions, or high degree of communication required
  • Historically high-paying industry (finance, etc.)
  • High-paying because industry is highly profitable (pharma, energy)
  • High-paying due to stock options (Facebook, Google, etc.)
  • New technology with shortage of existing programmers (iOS, Objective C, HTML5)
  • Booming market due to IPO and VC interest
  • The geographical market pays more (such as NYC) but business and living expenses tend to be much higher.

 

Are you Worth 10x Other Programmers?


The definition of "what you are worth" in a financial transaction is, "How much is a willing employer offering to pay you?"

You are highly unlikely to command 10x the salary of a "good enough" programmer, almost regardless of your skill.

Here are some things you can point out to your employer to help make your case that you are worth 2x or 3x what they are paying other programmers, but you'll be lucky to be paid 25% more.

If you are 10x as productive as other programmers, you'll probably be paid no more than 2x their salary.

Bruce's Law:

For each 100% improvement in productivity over other programmers, you are paid only 10% more in salary. LeBron James earns 4x the average NBA player's salary, and you are not LeBron James.


May these Odds be Ever in Your Favor:
  • You can perform some critical programming in time for a deadline that others can't meet
  • You have a unique skill that other programmers simply don't have
  • You can fix and debug things 10x faster due to your superior architecture skills, reusable components, and debugging skills
  • You raise the level of all the developers, and make the team more productive
  • You shorten time to market
  • You shorten the QA cycle and let them hire fewer QA staff
  • You wear multiple hats, so they don't have to hire other programmers to do those roles

All of the above pale in comparison to the one reason that give you the most leverage:

  • You have another job offer and are willing to walk away

Conclusion


There's an old saying, "You don't get what you're worth, you get what you negotiate." I'll cover some of the non-salary points for negotiation in another post.

When negotiating, remember:

  • If job satisfaction is important to you, don't make it all about the money
  • Software development is a team sport. LeBron James didn't win any championships by himself
  • Work to improve yourself every day
  • Make your teammates better
  • Learn what your employer values

Best of luck in all your career pursuits.

Be sure to comment, like, share, or follow this blog, and check out the other posts on the right-hand side.

Sunday, February 16, 2014

Of Snowstorms and Software Development

Explaining Software Development in terms of Snow


This winter has been brutal in the US. Record snowfalls, the Polar Vortex, crazy ice storms. I love analogies, because I think they can help non-technical people understand technical concepts. So what can snowstorms teach us about software development? More importantly, how can we use these analogies to explain these issues to non-developers?

How To Shovel a Driveway


How many times has this happened in your software development career? You are given an incomplete specification, or no specification, and asked to just start programming something. Or, you are asked to start some inefficient process (say, deploying some software by hand) because it will be faster than doing it the "right" way. (I'll talk about "The Right Way" in a future blog post.)

Or you've been asked to work on a single feature for a single project, knowing that it is (or should be) identical to the same feature in another project. But the software teams are divided by project, not by feature. For example, in pharmaceutical software development, there is often a team dedicated to a particular (prescription!) drug, with redundant development being done across teams.

How can you explain to management what they need to know about software development, when they don't recognize the things you take for granted (code re-use, automation, etc.) as valid and relevant?

I like to use the snowy driveway analogy.

Suppose your manager says, "Please, shovel the driveway."

Here are the things you should ask in snow-terms (and business terms):
  • Is it even snowing yet? (Is there anything to do yet?)
  • Do I have a shovel? (Do I have the necessary tools?)
  • When is the snow starting? (When does the first requirement come in?)
  • How long will it be snowing? (How long will requirements continue to come in?)
  • How much snow do we expect? (What is the scope?)
  • What is the reliability of the weather report? (Do we have an accurate spec?)
  • Do we have enough shovelers? (Who else do we need on the team?)
  • Should we get a snowplow? (What equipment do we need to buy?)
  • Should we hire a plowing company? (Should we hire a contractor or outsource it?)
  • Am I physically capable of shoveling? (Do we have the talent and staff to do this?)
On it's face, this technique seems juvenile if not ludicrous. But stick with me.

You have to remember that salespeople, project managers, and non-technical managers don't speak geek. How can I be so sure? Because the only thing more ludicrous than my analogy is the requests you get as a software developer to "shovel the driveway" without knowing answers to any of the above questions. And you're being asked to do things that are counterproductive by people who don't understand how and why their requests are counterproductive.

And one of the major goals of this blog is to help get you outside of your geek braincase and help you understand how non-developers think and communicate. This is the key to your professional satisfaction, productivity, and career advancement.

How Not to Shovel a Driveway


Here are some typical requests, and how you might reply.

Manager: I know that everything isn't ready, but please start on the project with the information you have.

You: I can certainly start some basic prep work, but it probably won't save any time. It would be better for me to work on another project while we wait for the spec to be defined a bit further. I can work with the project manager on that.

Manager: We need to get started on this project so we don't fall behind, and because Mary (Mary is always evil) will have my head on a stick if we don't start on it this week.

You: Well, I'll do what I can to help move the project along, but I want you to understand that it won't save any time. It is as if you are asking me to start shoveling a driveway while it is still snowing. I can shovel the entire driveway, but since more snow is still falling, the driveway is still going to be covered again. I'll have put in work now, with very little to show for it. And, I'll still need to shovel the whole driveway again later.

Manager: That can't possibly be true. What is the easiest thing for you to implement in module XYZ?

You: Any design you reasonably come up with is going to take the same amount of time to implement. What takes extra time is if the design changes. The best thing for me to do is work with Mary to agree on the spec. There is no benefit to starting on something that is not defined and/or highly likely to change.

Manager: Mary is out this week, please just get started.

You: Okay, now that you understand the situation, I feel much better that we had this conversation and know that I'm on the task you want me to be on.

Free Advice: Don't remind your manager s/he is uninformed. S/he understood the decision is inefficient, at best, but doesn't want to admit it to you and has a different agenda. S/he will use the same analogy to Mary's face later, because you gave her/him a talking point that Mary can understand. Your career will advance much faster if you see yourself as the student when it comes to office politics, and not the teacher. If you don't take my free advice, take your manager's free advice. Programmers are used to highlighting the important points to each other, such as, "You need to use this compiler flag or it will fail." Non-developers just speak English and expect you to read between the lines, which you're probably not very good at.

Always, be sure to check yourself. Are you just being combative or lazy?

Is it true that your snowy driveway analogy holds?

If the snow is already deep, then maybe you could take a pass now and get ahead on some of the work. If you wait, maybe the snow would be so deep you have to shovel twice anyway. Or, you can take this time to do research, so you can ask intelligent questions later.

Don't take the snow analogy too far. You can affect the weather! Instead of complaining about the snow, work towards solutions. Don't use the analogies as an excuse to shut down conversation. Use them as a path towards a shared understanding.

The Nor'Easter


For those who don't know about Nor'Easters, they are swirling snowstorms shaped like the Milky Way.

The relevant characteristic of a Nor'Easter is that they contain heavy bands of intermittent snow, interspersed with lulls in which the storm appears to have passed.

Here is how to use this analogy in business:

Manager: Now that we are done with that major push, we have time to work on this huge backlog of work.

You: Sorry, but I think this project is like a Nor'Easter. I think we are in a temporary lull after a ferocious period, but the storm is still there, and we will be hit by periodic waves of snow every three weeks for the next quarter.

Of course, this analogy fails if the other person doesn't know how a Nor'Easter works, so you may need to explain, or use a different approach.

The sneaky part of the analogy is that you've subtly introduced the concept of a recurring storm, which your manager can understand without any knowledge of software development.

You've taken the focus off the geek-speak, and given them a mental image of something they can grasp onto.

How do you drive that home?

Consider naming each of your projects after some weather-related event, and add a photo (in this case of a Nor'Easter) to the project home page. Once your manager sees the photo, s/he'll understand intuitively.

Tech Debt


Tech Debt is one of the most important concepts in all of software development.

Here is how to explain it in terms of snow:

Tech debt is like when you don't shovel your driveway, but you drive the car over it. That snow seems to be "out of the way," and you don't need to deal with it any more, right?

Wrong! That snow will turn to ice, and someone will undoubtedly slip and fall on it. When/if you decide to deal with it, it is much harder to scrape off the ground because it has been compacted and re-frozen. It is 100X easier to deal with by shoveling before driving the car over the snow.

Now let me give you the software developer's definition of Tech Debt:

"If I don't refactor this module, then the code will be brittle, and we'll have to spend more time in QA, and the software won't be as robust or performant."

Which one do you think your manager is going to relate to?

So try this:

"I can take a shortcut today, but it is going to cost us dearly in the near future. Any perceived benefit is just an illusion. It is like driving over snow in your driveway instead of shoveling the snow first. The part you drive over is going to be hazardous and hard to deal with later. Please authorize me to head off this problem today, and it will pay itself back 10x within a week."


Forecasting and The Weather Report


How many times have you been asked to estimate a project without being given any details?

Manager: We need you to build an advertising site for this new cell phone our client is promoting.

You: Okay, do we have any details?

Manager: No, we just need to know how long it would take to do a micro-site.

You: Well, I can give you a better weather forecast if I know the city, the latitude/longitude, and the season. At this point, I don't even know the planet we're talking about.

Manager: Just assume it is like every other project we do.

You: Okay, I can give you the typical highs and lows. These sorts of projects usually take two weeks to spec and three weeks to develop. But, I don't know if there is going to be a freak snowstorm that dumps ice on the unsuspecting Southeast. When the storm hit Atlanta, a typical 45-minute drive took 7 hours.

Manager: You made your point, but I just want to know what is typical.

You: Okay, thanks. I just feel obligated to meet my promises and my deadlines. As long as you understand this is just a ballpark estimate that will need to be revisited when I have more specifics, I'm happy to do everything I can to help approximate the work. Is there someone I can work with to get more specifics?

Manager: Thanks, I'll let you know.


Conclusion


We've covered a lot of territory here.

Some take-aways
  • Look for creative non-technical ways to relate technical concepts.
  • Use visual images to relate concepts. Most people think visually.
  • You've made your point, now keep your mouth shut. Non-programmers can only keep from strangling each other because their communication is built on a foundation of ambiguity that allows them to constantly save face or leave room for interpretation.
  • People in glass igloos shouldn't throw snowballs. Recognize that communication is a two-way street. Stop chalking it up to your manager's failure to understand your brilliance and expertise.
  • Make a snowman in the shape of your manager and watch him/her melt . Do not run it over with your car. It will only be harder to clean up later.

Happy Coding! Be sure to check out the other posts on the right-hand side. And like/share this article if you found it useful.