Wednesday, June 1, 2016

What Developers Should Know About Businesses

I think it’s important for a software developer to understand their boss’s motives to better align interests and goals so that career satisfaction is maximized, whether that’s developer happiness or hard cold cash. We’ll take a look at how businesses work and how this affects the developer. 

A quick note before we start: This mainly applies to businesses where there’s few layers of management. With more layers of management, the incentives get further and further away from the actual business goals, and it gets complicated.
  • Businesses need to make money. This is obvious, but sometimes we forget that the money coming in must be greater than money going out. Money coming in can be from sales, donations, investments, or any other kind of money coming in. If this gets flipped around, the business is in serious trouble. Thus, most businesses try to make this ratio nice and fat.
  • Developers are an expense. We may call it an "investment", but it's still money going out. Hence, it's generally required that whatever the developers produce bring some money in. Hopefully, the money it brings in is more than the money that goes out.
  • Features need to sell. Since any feature that developers produce cost money, every feature must sell. The "payment" may be more customers, higher prices, fewer refunds, less churn, or just more good-will from the community. Sometimes features that were projected to make money don't, so generally there needs to be a fairly good margin for each feature as well. Sometimes businesses can afford to throw away some money to make the executives feel good, but most things must sell.
  • Cash flow should be positive. Money in needs to be greater than money out on the long term, but it's also preferable that money in be greater than money out on the short term as well. It just makes every feel good to see the bank account go up rather than down. For developers, this means that giant projects that take a few years to see a return on investment are going to be hard sells, no matter how lucrative it is. 
  • Feature value is hard to measure. The average feature is just a small part of the overall product so it's very difficult to measure exactly how much money it'll bring in. This means that the business is often times just going by a gut feel of how much they feel like features helped. This means it's hard to quantify just how much money each individual developer is bringing in.
  • Developer productivity is hard to measure. Developers are very smart, and are generally good at finding edge cases. This means that any system for measuring developer productivity is fairly easily gamed. As a result, there is basically no way for anyone to objectively measure developer productivity. The only thing we have is the gut feel from a bunch of managers. Since the overall value of a developer highly depends on the manager's feelings, it's in the developer's best interest to make the manager feel very good about him/her. =)
  • Pay raise is a tool to improve retention. Pay raises are not about paying a "fair" wage to anyone. It's there so that valuable employees don't look elsewhere and take training or tribal knowledge with them. It's usually cheaper to pay a raise than to train someone new. Hence, the most powerful argument to a manager for a raise is not "I made the company super successful", but "I got a better offer elsewhere." This will probably cause some people to think you're not loyal, so figure out a different way of saying it. =)
  • Hiring is hard. Figuring out who to hire is very difficult. Training him/her takes a long time. Building team rapport takes time. All of this means most businesses don't want to fire developers. As long as you keep listening to your manager's feedback, you should have plenty of warning before getting canned.
  • Ideas are a lot more abundant than resources. At any healthy business, there's always a lot more ideas for improvement than there are resources to make it happen. This means priority is usually given to things that will make the most money, e.g. putting out fires that cause customers to leave and new paid add-ons. Lower priority will be given to things like automation, unit tests, and code cleanup.
  • Businesses love more data. A surprising portion of all business decisions are made on gut feels. Everyone would love some data to back up what they're saying, so it's good to see some reports on how things are doing. If you can get some quick reports for your manager, it'll probably make you look good and make him/her look good, too, increasing your "productivity" without too much work. =)