Hacker News new | past | comments | ask | show | jobs | submit login

Pretty decent article (don't agree with everything, but for the most part)

> Code is secondary. Business value is first.

I wish I could shout this from a mountaintop. If there's one thing I could change about engineering culture it would be this. But then again I would lose my edge if everyone understood this, so maybe it's best that they don't

Engineers: If you want to stand out in your career - take this to heart. Code is not the goal. Money is the goal, code is a tool to get the money. You work in a capitalistic business, whether you like it or not. Push your colleagues to build the thing that makes the business the most money, not the thing that is the "best" engineering solution. You will get tons of pushback on this - but eventually your pushing will bubble up to someone who works in "the business" (directors, executives, etc) and not just other engineers and they will invariably support you. This is your contrarian view now. This is your answer to Peter Thiel's question "What important truth do very few people agree with you on?". And you will thank me in 10 years.




I learned this at some point while working in manufacturing. No one responsible for how much you get paid really cares how clever your idea is unless it makes the company more money.

For me, the game theory gets pretty advanced at this level.

My strategy now relies on enriching myself via equity and careful product decisions so that I can then go start my own software studio and do things my way. Presumably, this is what our leadership wanted all along.

Trying to get my rush experimenting with new ideas under the current employer is really only shooting myself in the foot with regard to this long term plan. Any experimentation is reserved for side projects and weekends. At this point, I only bring "code" ideas to the team if I think they will legitimately improve the business in some eventual way that a non-wizard can understand.


The irony is, I started and sold a consulting business. We got to do some things our way, but we still had to make money. Overall, I say do it, but I made choices I never imagined I would have to make. So it goes.


This is really the next layer up in the ‘galaxy brain meme’ of this thread. The understanding that the people that dissuade you from gold plated engineering solutions are not some inherently different monsters. Rather, they’re doing at least roughly what you’d do in the same situation.


It’s the central tension we always had. Can you do enough your way, and as you grow, your teams way while still making money. Hackers have an ethos and working for big corporate behemoths often means compromising that ethos. I feel we did, and still do, a good job. You can get rid of so much red tape, focus on quality, have a really fun culture etc. and if you hire pragmatic folks who accept they get all of that in return for doing the make money part of consulting it can be a ton of fun and very rewarding. But the owners and managers in the business are always balancing it.


Depending on what you mean by "code" I disagree.

It sounds like you're arguing for "just get it done quickly" vs "take your time and do it right". That isn't a "code vs money" debate it's short term vs long term productivity.

Technical debt is a real thing. As is "decision debt" (not sure the official term; I mean where you make the wrong long-term choice because you didn't spend enough time on research / prototypes. For example:

* Using Python because it lets you get something working fast. Oops three years later you're locking into Python and your app is slow as hell. You now spend all your time profiling instead of adding features.

* Producing documentation and commenting code. Don't need it now. 10 years later everyone that worked on the code has left, nobody can understand it and you have to start from scratch.

* Investing in tooling.

* Using Bazel. It's so complicated! We'll just use Make. 5 years later a CI run uses 300 compute hours and 6 wall hours, even for fixing a typo in the docs (these numbers are not made up).

Does those things produces no business value in the short term. But it definitely does in the long term.

Maybe that's not what you meant.


> It sounds like you're arguing for "just get it done quickly" vs "take your time and do it right". That isn't a "code vs money" debate it's short term vs long term productivity.

I'm not. I didn't say anything about speed. I am talking about deciding what to build. All of your examples lack the context of what is the best at making money for the business. You can't properly make a decision about addressing any of those things without considering the bottom line effect. Fixing performance for the sake of speed is not the right decision, unless your users are leaving because of speed and causing dollars to be lost. Technical debt is everywhere, prioritize fixing the debt that is causing monetary harm, ignore the rest of it.

"build the thing that makes the business the most money" is exactly what I said. And yes there's obviously plenty of nuance to that, especially when it goes "meta" and you get into tooling and platforms and tech debt and whatnot. But as a guiding principle it is inarguably advantageous and surprisingly rarely held (in my experience).


My mind jumps to things like..

- Don’t rewrite the architecture with microservices when the monolith is working fine

- Avoid rebuilding the company blog on the latest CMS unless there are good business (time/money) reasons to do so.

- Choose boring technology, which would be the ones that most of the people on the team already know, and probably not the cool new language you heard about last week. Avoid fragmenting the tech stack to keep things operationally simple.

This is just a guess though – if you have some examples from your own experience it would be great to hear about some!


Can't disagree with any of those really. I guess it's really hard to draw out general conclusions about these sort of things when the specifics really make a difference. You can pretty much say "spend your time wisely" which is not very actionable.

For instance on your last point - I've heard that used to argue against any new technology even if it solves real problems. Rust, Bazel, React, Typescript, etc.

I would go so far as to say some of these general principles can be harmful because they are mostly used as a lazy way to defend bad decisions. E.g. "premature optimisation" is more often used to justify ignoring performance entirely than it is to stop people writing things in assembly or whatever.


Premature optimization is much more useful as a deterrent for stuff like building complex data structures and processes to speed up looping through like 100 items.

"But it might be a million items later!"

Yeah, or the company might pivot before we ever go live with this feature. Just slap a for-loop in there and get on with your day.


> it's short term vs long term productivity

You should pick short term. Pretty much every time. The tradeoffs just don't make sense the other way.

There's a 9/10 chance the thing you're working on will fail or not achieve any sort of scale. Opting for short term productivity will let you find this out faster, and save you millions of dollars and years of time over your career.

When you hit that 1/10 product, you will experience some pain. But you now have enough information to justify dumping the resources (including political capital) into a proper long term solution.


> When you hit that 1/10 product, you will experience some pain.

There is a neat little trick I learned. Wait until leadership is under fire from customers and/or investors regarding the thing you thought might become an issue, and then present your solutions. Once you have proper buy-in, you can likely move way faster than by trying to constantly side-channel things through existing processes.

Spinning hypothetical tales of doom in order to be granted permission to build something shiny is probably the #1 thing that slowed me down in my career.


> Once you have proper buy-in, you can likely move way faster than by trying to constantly side-channel things through existing processes.

I've noticed this as well. It's amazing how many road blocks an executive trying to save their reputation can clear for you.


> It's amazing how many road blocks an executive trying to save their reputation can clear for you.

Precisely. The grandmaster software engineer learns to manipulate organizational inertia, fear and egos in order to achieve their goals. Simply detecting when someone has their heels dug in on something will take you about 80% of the way there.

Showing up to the 5 alarm fire with a perfect solution that can be deployed within 48 hours will make you look infinitely better than if you engage a months-long headbutt session with your managers about potential fires. Prepare your magic in secret and reserve your hope. If you are right, it will pay out. Be patient.


> Using Python because it lets you get something working fast. Oops three years later you're locking into Python and your app is slow as hell. You now spend all your time profiling instead of adding features.

Or your app continues to be perfectly usable like almost all Python apps because you’re not doing something CPU-bound in unoptimized code, and you’re not seeing YouTube/Instagram-level growth.

Performance is a real consideration but the better way to approach it is to make sure you understand the bottlenecks in your architecture and have a reasonable plan for replacing code when you need to. I’ve seen more failed apps in fast languages because the developers took so much longer to build things that they never found what users wanted or the performance problems they actually had weren’t what they expected so their Go code being 10% faster mattered less than taking months longer to reach feature parity.

There are situations where performance is critical on day one, of course, so part of your value as a senior engineer should be recognizing which situation you’re in and balancing those needs with your staffing levels, too. Your Bazel/make example is similar: if you’re seeing that kind of performance hit either something’s gone badly astray or you have grown to the point where you can afford to have someone dedicated to setting up more advanced tooling because they’re supporting hundreds of developers.


> Or your app continues to be perfectly usable like almost all Python apps because you’re not doing something CPU-bound in unoptimized code, and you’re not seeing YouTube/Instagram-level growth.

Honestly I have yet to use a significant (like >10k line) Python app that wasn't really slow. It definitely doesn't require YouTube scale.

"Just optimise the bottlenecks" is generally a myth in my experience. Most programs are all bottleneck.


And sadly those aren't problems or concerns for many/most folks. It's only an issue for those that haven't moved on after 2-5 years. Sad but true. Short term thinking is our present reality and way of conducting "business".


> "just get it done quickly" vs "take your time and do it right"

There is no such thing as "do it right". There's your flawed and biased perception of what's right, which doesn't take unknown unknowns into account.

> Oops three years later you're locking into Python and your app is slow as hell

Been using Python more than a decade, never had this problem. App slow as hell is always an eng culture problem. Shitty engineers will write slow code in any language. Don't do HFT in Python, don't write web apps in C.

> Producing documentation and commenting code. Don't need it now. 10 years later ...

The need for documentation doesn't skyrocket from 0 to 100 overnight.

Don't need it now? Don't write it.

Starting to feel the need? Start writing a little bit.

The problem is not the decision to not write documentation. The problem is not re-evaluating this decision in 10 years.

(another problem, based on your take, is treating documentation as binary: we either don't do it, or we're going all in)

> We'll just use Make. 5 years later a CI run uses 300 compute hours and 6 wall hours

Do you think every team that uses Make has this problem? Again, sounds like it's a team problem, not tool problem.


I had a boss for a while that took the opposite view. He just wanted to do interesting work. He was good at politics so he did, but the level he would have risen to in management if he had focused on business goals and money instead of fun work would have been much greater. But he also wouldn't have still been doing daily technical work which is all he wanted. We acknowledge that fun work can be part of total compensation, so accepting lower career advancement in return for more of that compensation doesn't strike me as unusual or a problem.


Yea no issues with that at all. That's why I prefaced my entire comment with "If you want to stand out in your career".


I guess that depends on what you mean by "stand out" then. It is possible to stand out technically without standing out in a "how high in the org chart can you go" contest


I disagree with both.

Code and business value are worthless. Boss approval is literally everything.

It really doesn’t matter if your ideas make a ton of business sense if they are in conflict with your direct manager or any part in the chain of hierarchy. As long as they don’t like what you’re saying - you’re literally worse than worthless. Often this is because your idea isn’t their idea - therefore damage to ego. Damage to ego means get that guy out of here and make sure I don’t hear more from them.

People need to understand that you’re hired for a job. You’re a glorified and well compensated code monkey. Even at $1m/yr - still a god damn code monkey. You jump when they say jump.

I’ve yet to meet any hierarchy chains that are truly open minded to a low level IC saying anything that counters them. I’ve worked at quite a few places too and talked to a lot of folks about this.

You’ll thank me in ten years because you’ll become a bootlicker and actually make progress in your career rather than being stuck in senior/staff until you burnout from the industry.


> Boss approval is literally everything.

This is such a sad corporate loser mentality.

Bosses are humans. They can be wrong. They can be convinced. Even manipulated, if that's your game.

> you’re hired for a job. You’re a glorified and well compensated code monkey

Only if you choose to treat yourself like one. I'm hired for my domain expertise that my bosses lack. I can understand 60-80% of their domain, they can understand 5% of my domain. When I'm saying that feature that they want is a nice-to-have and I don't want to build it unless I see evidence of it's value, they usually listen.

> I’ve yet to meet any hierarchy chains that are truly open minded to a low level IC saying anything that counters them

I worked at multiple startups (between 4 and 100 in size) and I always had a voice, even early in my career. Maybe you're the problem?

> you’ll become a bootlicker and actually make progress in your career rather than being stuck in senior/staff

Where exactly does the bootlicker progress? A code monkey doesn't become VP/C-level through bootlicking, there are plenty others with much better soft skills. At best you'll be a code monkey turned manager (which is worse than staff).


This is the real answer. Ego is greater than business, money, and code.


> You jump when they say jump

Thankfully sometimes 'they' are the customers paying real money for a product or service that's valuable to them.

But as you say, larger organizations have more room for political distractions on the way to giving that customer what they want.


ahh and finally we get the real answer that careerism is about playing jester to the court of the mad king regardless of any other concerns

if you don't want to be a jester and you want satisfaction doing a good job professionally you need a union


Unless you're in a <10 headcount everyone-does-everything startup, by the time work reaches software engineering it's already been determined as having good business value. It's rarely a software engineer's job to challenge that determination unless new information emerges that wasn't factored into the original decision.

Also, maybe my perspective is skewed from only ever working at gigantic companies but what usually grows a career is making your manager's life easy - becoming someone who reliably gets shit done on time and without drama.


I don't think this is the case.

I think most engineering teams will have a "backlog" of tech debt. Some are things they want to do (the original implementation is icky but could be lived with for years until requirements change) and some will save the team hours per week in distractions/maintenance.

Being able to evaluate the actual impact of the "tech debt clean-up" and pick the one which helps the business will absolutely set you apart from your peers.


I think you massively underestimate the number of startups with product engineers. It's becoming a much more popular approach with many high-performing startups, even up to the 250+ headcount tiers.


The execution by swe can still take 10 times longer depending on if you go with a proven, quick and dirty straightforward YAGNI solution vs reinventing the wheel in latest cool fad, with hundred layers of abstractions and configurations in beautifully crafted code in the most poetic rube goldberg machine you have ever seen.


You can probably also extrapolate this advice to most jobs that involve building or manufacturing something. The way you make it, the techniques you use, the practices you put into play... are all secondary to whether what you're building actually serves a purpose/fills a need.

And that's equally true of everything from programming to design to writing. The value of a newspaper article is often the story it tells, not the actual way it was written. Same with a video, film, tv show, design, or whatever else. Most people don't care how good your technique is or how elegantly the product was made, they care about whether it does something they care about.


This works in non-dysfunctional organizations only. In dysfunctional ones, the inmates are running the asylum and you will be scoffed at if your code doesn't follow the latest trends and buzzwords (e.g. functional programming). Nobody represents the business value - the product owner cares only about features being delivered and doesn't care (or, usually, understand) how the engineers do it, and the engineers are busy outnerding each other with "cool" tech. If you'll propose simple solutions using old and reliable tech, the team will think you're a lazy moron.


> Money is the goal, code is a tool to get the money.

This is an obvious and empty statement if it's not used in specific cases. Unless you have something new to add in the "how to get money debate" the distinction between "code" and "value" is irrelevant.

When I've heard this, it's typically way to trivialise engineers and shut down discussion. "I don't understand how this contributes value, therefore all your contributions are worthless."


That’s quite a conclusion to jump to


This same argument permeates in lots of other facets - especially things like compensation. Most tech people I feel do not realize that their compensation is not based on their actual “worth” but their worth to the employer cutting the checks. It is all about money and nothing else. I know people that make close to 7-figure total compensation package who would fail job interview in 98% of the companies (this number is actually closer to like 99.23%)


Ironically, demonstrating business value is exactly how you can get justification to build your own things from scratch!


When anyone comes up with the idea of lets rewrite X, or refactor Y, that is always one of my first questions.

What value does that bring to us or our customers, versus the money spent on doing that.

Many devs tend to forget that features can be measured in time spent on X multiplied by hourly rate.


>Code is not the goal. Money is the goal

>eventually your pushing will bubble up to someone who works in "the business" (directors, executives, etc) and not just other engineers and they will invariably support you

MBA-driven development when

You can never go wrong when optimizing for profit above all else.


This does not apply to the typical software engineer.

Rather this:

> Code is secondary. People are first

This is easily overlooked. Your social skills matter most. Leading, listening, communication. Most problems are people problems.


But if I don't build it with Rust with pure functional programming, how could I scale type correct, shared-nothing architecture? Who cares if customers like it? It could be a disaster if Coq cannot verify its correctness! ;-)


Agreed. There is a ton of resume/leetcode-driven-development out there.


>Money is the goal, code is a tool to get the money. You work in a capitalistic business, whether you like it or not. Pu

Capitalism and money are actually only the means to an end, to achieve the best possible for society. But as is so often the case, at some point the means becomes the end.


As if capitalism in practice has ever been about the best outcome society wide.

It's about a means of allowing wealth disparity while the have-not masses are too distracted to get out the guillotine


You are still confusing the means with the end.

It is not about what capitalism is about, it's about why society chose capitalism instead of other forms of economy.

That's why capitalism needs laws to tame it's worst excesses.


money is not the goal. providing a useful and valuable product or service to customers is the goal.


Totally incorrect, at least in a business context. If it were the case, you would build that useful and valuable product and then give it to your customer for free. But you would never, ever, do that (unless it was specifically as a loss leader for other products) because making money is the goal.


Business context is not the whole reality, only a part of it and it's losing it's purpose.


That’s not true because giving it away would mean you wouldn’t be able to produce the product.


This is incorrect. Without money you won't get salaries. And people will need to find another job (at a place that does value money).


Money is just the middleman pretending to be the boss.


Only if the problem is pervasive and people are paying money for it. Providing value just increases the probability that you will make money. You can have a very valuable service/product and fail miserably because you have no idea how to run a business and lack the know how and fuel to power awareness activities like marketing and sales.


I'll have to disagree with this one, that's what that point is about. Great things can be achieved by focusing on UX and providing real value, but these are means to an end, and the business' end goal is still making money. Most of the time [1].

Can you whip up a quick & dirty feature that might generate more revenue if released tomorrow? You can bet it will be done. At this moment the engineers who know when/where to compromise stand out.

[1] companies with a strong ethos or social mission do exist. If you find one that makes you happy, hold onto it :)


The only reason anyone can and does make a valuable product or service is for some wealth. If not money, kudos, power, ...

I don't buy the altruistic motives.


There is so much packed into the phrase "the goal."

- Is it the business owner's goal? Depends on the business owner.

- Would the CEO have a better company if they focused on building something great rather than extracting money? Depends on the industry (the premise of capitalism is yes, but unfair markets are a thing)

- Is it (betterment of society through engineering) a valid personal goal to have on a strictly moral or ethical level, with no need of evidence or efficacy? Sure, absolutely

- Are people who focus on "extracting money" sheisty MBA types who lie through their teeth and exaggerate every number and kill the company in the process of trying to self-promote any random thing they can control? Sounds like a leading question...

These are all worthy distinctions imo.


That's how it should be, but our society has embraced the sociopathic interpretation instead.


The successful startups hardly ever do that.


> If you want to stand out in your career - take this to heart. Code is not the goal. Money is the goal, code is a tool to get the money. You work in a capitalistic business, whether you like it or not.

On the flipside, you can be like me and be "meh" about business value (or at least, not a maximalist about it) and treat code as the point and fun/art/etc (easy to do with an FP language, for example). You'll still deliver value and even squeak in some fancy code that isn't the best business value.

The result? Over the years, your employer(s) effectively subsidize your code-for-fun's-sake using the money they make from business value others focus so much on :)


Everybody agrees counting lines of code is a bad idea to measure progress in programming.

Now you say measuring the money it makes is the way to go.

Money is not the goal. Money is just another tool. Like VSCode.


I love this comment. It dodges the point so well.


"What important truth do very few people agree with you on?"

For me it's that Apache is the best web and proxy server, Java is the best programming language and platform, Eclipse is the best IDE and never use anything made formerly or currently by Russians including nginx and JetBrains' stuff.


I mean irrespective of Apache/Java/Eclipse, saying to never use something made by someone just because it was developed by a company/people of a certain nationality is just silly.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: