Hacker News new | ask | show | jobs
by rnd33 2661 days ago
> You are not paid to write code [...] The only thing that somebody cares about is how much does your software cost and how much revenue it generates.

I have a real trouble with this sentiment, and it is repeated often here on HackerNews due to this site's entrepreneurial focus.

As a developer and a professional, where does my responsibility end? I'm a developer, not a manger, and not a shareholder of the company.

Would you say it's a pilot's responsibility to point out and act in ways that reduces the cost of running the airline business or that increases its revenue? How about a surgeon or a medical doctor? At the end of the day most professionals work for a private company, a private company exists to generate profit.

Why must software developers have an entrepreneurial mindset while other professionals do not? Can someone help me understand?

6 comments

I'd say this mindset makes it easier to drink the kool-aid when management asks you to do something unprofessional/unethical, by justifying it on the grounds that it generates revenue.

"This codebase is a ticking time bomb, but it's ok because we're moving fast!"

"No, I'm not writing a spambot, I'm building a growth hacking tool!"

"The code I'm writing might intentionally cripple the user experience, but it's driving engagement!"

> The only thing that somebody cares about is how much does your software cost and how much revenue it generates.

This is one of those "motte and bailey" statements, which can be interpreted narrowly or widely, depending on how you want to use it in given situation.

When you are in a generous mood, you can admit that -- of course! -- other things are important too, because they have an indirect impact on the cost and revenue. For example, a software full of bugs can make the customers unhappy, and can make them replace you with your competitor, thus reducing your revenue. A horribly designed code and bad management can make the good developers avoid you, because they have a choice, and that will reduce your team's productivity, and increase the costs. See what a smart statement this is? Everything relevant is included there, because everything has an indirect impact on cost and revenue.

The next day, when you are in a bad mood, you can turn this accepted piece of wisdom against your developers. No, you are not going to do this refactoring thing! It only costs me money, and the customers don't care about your hierarchy of classes or immutability of objects. Keep adding new features; and if the whole thing starts collapsing under its own weight, get ready for some overtime!

> As a developer and a professional, where does my responsibility end?

It ends exactly where you decide it does. Just like in any other human interaction, the more you let other people push you, the more you get pushed. Of course there is the possibility that if you decide not to get pushed too far, but someone else is okay with that, you might get replaced. But this, too, is just like in any other human interaction.

> Why must software developers have an entrepreneurial mindset while other professionals do not?

It makes sense if you are starting your own company. (Which is what Y Combinator wants you to do, I guess. For some people this is a good advice; others may lack the necessary skills and character traits.) Otherwise, you are simply doing an entrepreneur's job for an employee's salary... in addition to doing the employee's job, of course, because all this strategic thinking about costs and revenues does not get you rid of the duty to produce the software, fix the bugs, etc. It's not like when you volunteer to do the manager's job, the manager will do a part of your job in return.

> It ends exactly where you decide it does.

> Otherwise, you are simply doing an entrepreneur's job for an employee's salary...

Thank you... I'm beginning to realize this but it's still sort of a professional identity crisis for me. Of course employers want employees who think, and I'm happy to think in terms of revenue and profit, but at the end of the day it's not my responsibility.

I am just guessing here, but when I think about the possible origin of the idea "good developers think about cost and revenue, bad developers think about code", I imagine something like this:

* There are stories about how two or three people started writing code in their garage, and became billionaires later.

* Some guy thinks: "Huh, I happen to have an empty garage and some extra money... perhaps I should hire two or three nerds to write code and make those sweet billions for me."

* A few years later: The nerds wrote some code, and it works relatively quickly and flawlessly... but the promised billions are still not coming. The boss is frustrated, because this is not how the stories have described it.

* Now the boss could blame himself for being gullible, or for not noticing the selection bias (just because some nerds made billions, doesn't mean all nerds do). But it is psychologically more convenient to blame the employees.

* He cannot really blame the employees for writing bad code, because the code happens to be good. So instead he blames them for, essentially, not doing his homework, too.

In other words, I would expect this to happen in small companies. Most strongly when there is no intermediate layer between the company owner and the software developer.

A large company has people, such as managers and salespeople, who are responsible for minimizing costs and maximizing revenue. The software developer may feel the result of this pressure -- if the situation is bad, there may be slow computers, small screens, and a lot of overtime -- but the developer is still expected to focus on coding, not to make financial decisions.

Trying to look at the problem from the perspective of the boss... hey, of course I would like to own a pet nerd who is great at coding, but also at making his colleagues redundant, and who works hard on maximizing my revenue! The only question is why would such person work for me, as opposed to starting his own company and maximizing his own revenue. The more perfect I imagine my hypothetical employee to be, the less it makes sense for them to be my employee.

-

More seriously: people have different skills and traits. There are skills and traits required to be a good software developers. There are skills and traits required to be a good entrepreneur. Some people are blessed by nature and have both these sets. Some only have one of them. Some have neither.

If you happen to be a person who could become a great developer and also a great entrepreneur... and you happen to work as a developer now... it is useful to remind you that you are probably using the less profitable of your options. That you are either not using the skills that are highly rewarded by market, or you are using them in order to make some other person rich instead of making yourself rich. Such advice may encourage you to start a new career, and perhaps improve your life.

But saying that you are not a good developer unless you are also an entrepreneur, that's wrong. From that perspective, Mark Zuckerberg would be a better developer than Donald Knuth. Nope, that's stupid. It is something entirely different to say that you would rather be Zuckerberg than Knuth. That is a legitimate preference, and if you have what it takes, go ahead. But I don't think that Donald Knuth or any other coder should have a professional identity crisis whenever he catches himself thinking about something other than cost and revenues.

I think the biggest factor is that the product of a company is rarely software, but the job it performs. If your software could be replaced by some humans then your company doesn't sell software at all, it sells a process fulfillment. In that case the quality of the software doesn't matter to anyone but the developers, and developers are a smart bunch and clue in to that fact, and they work to the requirements.

I have worked at companies that value quality over all else, as our position in the market was a premium, reliable provider and we charged enough to make the economies of that decision make sense. I was happy to be able to write software I could be really proud of while there and lucky to get paid to do it.

I've also worked at companies where the stakeholders make it clear that they want results, and they don't care how. In circumstances like that, where you have strong time pressure and limited resources, no one but you cares about the code quality. So do you spend your own time staying late and making perfect code, or do you do what you get paid for and exercise your passion somewhere else?

There is a lot of good coding that takes just as much time as writing bad code, so the second situation for good developers is mostly an exercise in pragmatism. Reliable, solid code, but some concessions where it saves time.

This is answering the question of where the sentiment comes from, which only partly answers the question of "Why is so much code bad".

There is a difference between code quality and software quality. Users dont care about the code quality at all as long as it meets their needs and requirements.

You should strive for both but if you had to choose one, quality software written with bad code is more valuable than bad software written with good code.

While quality code adds value when it comes maintenance and scaling, it is often overvalued by developers who think it is the end goal in itself.

It is likely there is confusion amongst the managers because software is a young industry. Take accounting as a reference. The job of an accountant is well understood, and the skills an accountant has are well understood. Analysts and managers (as a profession) have come to understand over the centuries how to estimate the magnitude of a businesses accounting problems and how many accountants they need to deal with them.

Compare that to software, where I doubt there has been time for a solid understanding to develop. Especially since the underlying hardware economics keep changing. There are scant business lore stories that I've heard of saying "you need to have X many developers maintaining your code base or you will suffer catastrophic consequence Y like suchandsuch megacorp did".

As the software and electronics industries move from discovery and change to more maintenance oriented tasks it seems likely that software engineers will professionalise like all the other engineering disciplines.

Same philosophy should apply to EVERY `surgeon or a medical doctor`. I'd be grateful if there was a consensus in medical industry:

we are not getting paid to push pills, we are getting paid to keep people well! Surgeons: we are not getting paid for cutting people open, we are getting paid for fixing people. etc.

The equivalent approach in medicine would be:

"We are not getting paid to make people healthy; we are getting paid for reducing the hospital's costs and increasing its revenue. Health is just something nerdy doctors obsess about, because they are too busy thinking about all those Latin words."

Get competent doctors feel guilty about spending too much time studying medicine and curing people, and not having entrepreneurial skills instead -- that would be equivalent to telling software developers that software doesn't matter at all, only costs and revenues do.

But as a developer with a place to make a decision, its part of the responsibility to choose a solution that provides the most value to your company or customer, even if you are part of a larger team. Also, a pilot and a developers job are much different. A pilot is responsible for ensuring that his passengers have a safe and smooth flight, which directly affects the company business. It's not like they just sit in the cabin and push buttons without a care in the world. Same for doctors. Point is if you are paid well enough, chances are your actions will directly or indirectly affect your companies revenue to some extent and you should keep that in mind while taking any decisions.