For small and medium sized companies you definitely need to make compromises. It is part of your job as a professional to make choices that leads to the best business outcome.
Unfortunately a lot of developers don't have a connection to the business side, because they are "protected" by several layers of management, PMs and designers that interact with the business on their behalf.
Getting a product out quickly means that you also get feedback earlier. This is not only good for business, but it is also an opportunity to evaluate your implementation to see if it matches your assumptions. In my experience this causes less stress compared to rolling out a "perfect" solution that has to be rewritten while under pressure.
My job as a developer at my current workplace is to reduce complexity and get the PM and designers to cut down their initial plans to a minimum. It makes arbitrary deadlines less stressful and any delays will not have the same impact.
This is a terrible take, and one I generally see as a signal of lack of seniority in a software dev. It is absolutely everybody's job in the company to make sure it is profitable, unless you work for a non-profit.
The thing is though, that profitable is not the same as "just ship it". If you're in a company where those things are conflated frequently, that's a sign of lack of seniority in management.
> Your job is to create great software
It really isn't, your job is to make a great product. Making a great product often, but not always, requires great software. Many great products have terrible software behind them. The tension between product, sales and development should result in a compromise that creates the most value short, middle and long term. It is 100% your job as a developer to understand what can and cannot be hacked, what priorities the company has beside delivering great software, and finally: when great software must be made, because compromise is unwise.
Just like the boy who cried wolf, the developer who can never compromise on software quality is powerless when there is an actual reason to not compromise on software quality, and rightfully so.
Developers aren't compensated for any extraordinary achievement, though. Unless they own a notable share of the company. So, why should they give everything and get nothing back? How is that fair?
Salespeople and managers usually consider technical guys pariah. They can always be outsourced or otherwise replaced, and they can be blamed, for example for failing to meet impossible targets. If there's success, it always is a manager's achievement.
Developers also get roughly the same pay for both working minimum and for screwing their lives and healths on powerpoint-driven death marches. The compensation for extraordinary success goes to shareholders, and maybe managers or even salespeople.
Devs are paid a premium, have generally much more relaxed work schedules than managers or any customer facing role.
If you screw over your health working in a toxic environment that’s on you IMO - as tech worker you probably have more opportunities to improve your working conditions than the vast majority of humans
Or, what is your comment meant to claim exactly, beyond the extremely obvious "there are exceptions to the rule" trope?
> Developers aren't compensated for any extraordinary achievement
That as a blanket statement is just not true. Of course it does not apply to every single developer, I would even say it doesn’t apply to the majority.
If your management is good, it absolutely is remembered and impacts future performance and promotion cycles.
So, if you want a bonus as a software developer, be a sales rep by happenstance. Probably helps if you went to a prestigious university where you met people who went on to prestigious roles...
never seen any one-off bounties or extra bonus for shipping one specific thing. usually it just gets rolled up in the "your yearly performance discussion".
obviously founders / owners / folks holding a lot of stock are playing by different rules
My first job as a developer made me work around the clock, day and night, for a below average (nationwide compared) salary. And I got yelled at.
Since I didn't have enough work experience, my applications weren't responded to. There were no ways to improve conditions without changing jobs.
Ofcourse it is fair. How can you say you get nothing back? They pay you salary you agreed on when signed contract.
> My first job as a developer made me work around the clock
Bad employer. Maybe doesn't obey the contract on their side and doesn't pay for overtime. Tough one until you level up your experience for sure.
But I'd expect salary to be below average in your first job. You still don't have the necessary experience. And when you do, you CAN find another job.
Just don't have bad attitude towards your job. You will be rewarded one day for being a honest and productive worker.
If a company is that pressed for time, theyre not going to fire you. Take your time and do things right, dont Boeing it up.
22.5 years later I can confidently say you are living in a comfortable bubble and have no idea what do most programmers go through every day.
And religion is not always bad. It can help us stay focused, and selfless for some unknown greater good.
That greater good does not have to exist. But decreasing the focus on self can still be good for your soul.
Only applies to people who mostly focused on themselves.
I'd argue that most working people have the opposite problem: they have to focus on everybody else's problems but not theirs.
I'm only working towards tangible greater goods. Including my own inner peace.
I had a similarly shitty first job, although I was lucky to be in France, which was very strict worker protection laws, so "working day and night" was 'only' 10 hour days. However, after like 8 months there I was able to get another job - it doesn't take much experience for recruiters to start reaching out on LinkedIn aparantly.
The workers protection authorities are not resourced to do any individual checkups, and going to court against a company would take years and possibly leads to lifetime in debt. So the practical way to resolve this is to change companies.
If you work at a traditional workplace, think of yourself as a professional. Do the best work you can during business hours, without ruining your health. The company is paying you to make decisions that are best for them, and you may not like it but that is what you agreed to. At the same time, they only pay for your work and not your soul. You need to keep a balance between work and you as a person.
Unfortunately there are many toxic workplaces out there, and if I ended up "trapped" with no escape, I would probably consider things differently. But when you finally escape, keep an open mind and try to put your bad experiences behind you.
I did put that behind me after switching jobs.
My initial outlook and attitude on professional life was that I need to try hard and stay positive and help everyone. I expected other people to work for common goals, put their own goals aside, and be friendly. As in school, that mostly lead to abuse. I'm only advocating against trying too hard because I've hurt myself with it.
As a child, I was taught to go the extra mile, work in a sustainable manner and never blame anyone. At work, I have never refused to work on a problem because it's not my fault or someone else would be a better fit for it - and that makes me a very good scapegoat and a fine target for impossible requests.
Guess what happened? I'm right now stuck with a person who is asking daily for something I have explained to be impossible, and does not accept my answer. So he asks again. I have no idea what to do.
I can't set boundaries or take care of myself, so I'm a bad employee and a bad person who doesn't try enough. Great.
Maybe that means talking to a professional therapist to find out how you can handle the situation. They get paid to help you, and there is no shame in that
Like most workplaces on the planet. Check your bubble.
I agree with your advice but you have to understand that many people start families and that tilts the table in favor of the employer; people become very risk-averse and dare not refuse anything. This is a fact and it's happening every second to dozens, if not hundreds, of millions of people out there.
> Unfortunately there are many toxic workplaces out there, and if I ended up "trapped" with no escape, I would probably consider things differently.
Please do. Living paycheck to paycheck is the reality of most working people.
this reply goes for everyone complaining about jobs really, everyone has strengths and areas where they can grow- so focusing on these can lead to greater job satisfaction.
If you believe otherwise I would question your real life experience.
The notion that devs have better hours than managers is either a fiction or conflating managers with founders. Who do often work ridiculous hours and expect everyone else to do it too - and enthusiastically - even though they’re the only ones with a stake in the outcome.
Grinding meaningless Javascript to deliver more advertisements and conflict to people is neither motivating nor important, or at least it shouldn't be to a responsive person.
2) Not everyone can be a doctor
We can all find meaning in our own work.
Get nothing?! What a strange way to view a paycheque.
"Hi, you're only paying me, but that's not enough to expect a solid work ethic. Instead, I'll make sure my work is just passable. Want more, and now you have to pay me more!"
Where I come from, "extraordinary achievement" is just "doing your job".
(Are you advocating something else? I'm not suggesting free overtime, just doing the best job you can.)
Do what's expected in the interests of the business, not in pursuit of some "great software" ideal.
Only in theory. In practice, the incompetent leadership leads to those naturally being identical, as in "we have to deliver project 17 for this year, please do your best!!!" and ad infinitum.
> Do what's expected in the interests of the business, not in pursuit of some "great software" ideal.
Who mentioned this? Only you. A projection on your part, it seems.
>Unless you have a stake in the company, it is NOT your job to make sure the company is the most profitable it can be. Your job is to create great software. What's great software? The kind you'd be willing to put on your resume without feeling bad.
You did omit the first part of my comment however.
There is something to be said for 'if you're going to be a rational economic actor and you have a salaried job, the optimal strategy is finish your job's tasks as fast as possible and work on a personal project which you control the upside to with all your extra energy'.
From a purely economic point of view, spending any effort beyond the minimum at a salaried job is a waste of effort - the expected value of that extra effort is nil, unless you own significant stock. This may be why many tech companies offer equity as part of their compensation.
That's a very protestant work ethic worldview. Doing what is expected from what you're being paid in the best way possible is not a poor work ethic, it's a pretty rational one.
The other side of it where one always strive to do more, to go above and beyond what you're being compensated for, and so forth can also be a quite poor one. God is not going to give you extra points, for some people doing their best work at current expectations is good enough, no need to spend more energy than required on a job, there's more to life than working and accumulating.
The problem is, people don't "get it". There are people in this thread protesting about "doing poor quality work", eg, "racking up tech debt". Why?
Because it eats at them. Because they are in this to build, and build that which holds, which has value.
They have pride in their work! Yet the response some have here is simply don't do the best you can do. These two things are counter to one another!
I am advocating that yes, do the best you can do. Take joy, deep internal joy in doing your job correctly, because of what you build. This indeed does not mean doing the bare minimum, by some broken, made up rationalized excuse.
As I said, a good work ethic is not a protestant thing, it is a human thing.
We can expand this to everything. What are you being compensated for? Are your ethics formed around what's profitable?! Madness!
It's also interesting that you bring the Japanese into this. While they certainly to care a lot about producing high quality work, they also have one of the world's highest suicide rates.
I understand taking pride in what you build.
However:
1) it's important to not let that destroy the rest of your life
2) it's a lot easier to take pride in what you build when you're working on something you own[0]. As I believe I alluded to in other comments on this thread, and was kind of insinuating with the original comment that you replied to, deciding that extra effort spent on a dysfunctional enterprise project micro-managed by 3 competing orgs who spend their time changing requirements in order to win minor political victories (yes, this is an extreme example, please bear with me) is better spent on a personal open-source project, or even building something like a sport club or happy family seems to be the logical course of action when you care about what you build.
Which isn't to say don't do the best you can at work - ship the code they ask you to ship, write it well, add unit tests, all that jazz. But then once that's done, you can either focus on being the best employee for Megacorp, which is likely to be soul-crushing, because you'll have extremely little reward for your effort, or you can be the best employee of You, LLC, where you natural human desire to make something beautiful can express itself in a way that is much more rewarding for you, both financially and emotionally.
> Lastly, you're trying to shift the discussion by claiming "best way possible" as opposed to others saying "do the bare minimum". These are very often not the same.
Because the discussion gets murky exactly at this point. Doing the bare minimum means not going out of the way to solve issues for others, like Americans working outside of their working hours and bosses expecting that should be done. I have many work colleagues in the USA who are beyond annoying by trying to prove themselves by working outside of what they are paid for, with the thought they should go "above and beyond" instilled in their minds. It just creates issues for other cultures who do not prize themselves in sacrificing their lives for the job.
The other side of it is doing the best work you are willing to do, with the limitations you currently have (skill, health [physical or mental], time, etc.), that's what I call "bare minimum" for myself. I won't be wasting my time trying to come up with new products, new paths of generating revenue, simply because I'm not paid for that, when I am in that spot I definitely offer the best help I can but I won't be fighting political infights, depriving myself of a life to work another 2h/day to setup a new project for some higher ups, and so on.
> I am advocating that yes, do the best you can do. Take joy, deep internal joy in doing your job correctly, because of what you build. This indeed does not mean doing the bare minimum, by some broken, made up rationalized excuse.
You don't need to take deep internal joy of doing your job correctly, at all, one just need to have a work ethic that doing your job correctly is the right thing to do, it's what I'm being paid for, and that's the bare minimum. If that means I can slack off a little bit because I'm aware I can deliver what's expected so be it.
Perhaps we are talking past each other here because I do not disagree mostly with you, I probably just disagree with your approach to it (and hence what I called a derivative of the protestant work ethic).
> As I said, a good work ethic is not a protestant thing, it is a human thing.
Not necessarily, if your work is bullshit and you are not paid enough for it without much chance to do something else because of life's circumstances there's absolutely no inner motivation to have good work ethic.
> We can expand this to everything. What are you being compensated for? Are your ethics formed around what's profitable?! Madness!
Much the opposite, what's profitable is usually the least of my concerns ethically-wise, I would even say it is most times detrimental to ethical behaviour.
I take joy in projects that I actually find meaningful. Being an underpaid cog in the machine, working on JIRA tasks visioned by someone else isn't meaningful. Lack of adequate pay makes me feel underappreciated, and frankly destroys any motivation I could otherwise have. So no, I'm doing the bare minimum and don't feel bad about it. I treat my employer like it treats me, that's called justice.
As I'm writing these words, an aspiring musician is probably sleepwalking through his day job because he was up all night practicing his music.
Or Paul Graham, when he talks about writing the book On Lisp during his time at Interleaf [0]
You are right.
...Most are much worse. :D
No? Then you'll keep seeing what you call "mediocrity".
I am a pretty good programmer and have literally saved businesses, several times over the course of my career.
Never again though. A pat on the back is not enough of a reward.
Start your thought process by making the extremely obvious distinction between these two.
Ultimately anything can only give you feelings. I don't understand what else would you expect from (pursuing) being excellent (just to clarify, I define "being excellent" here as being extremely skilled at some ex ante selected task or creative process; both individuals and organizations can have that property).
But I get what you're saying. You feel like being excellent should give you money, fame and ladies. But you can get these things without being excellent. At some point, being excellent is a burden, and it's irrational to pursue it if you have those goals (of money, fame, etc.). (Someone else said in this thread that they want "a credit" for the excellence. Well if you want that, you don't need to be excellent, you just need to be good at pretending that you're, in front of people who you ask for the credit.)
Now, corporations (and private companies in general) are setup to pursuit profit, not excellency. If excellency gets in the way of profit, and mediocrity is sufficient, they won't pursue excellency, regardless what the individuals in those companies want. That's organizational laziness. Note that organizational laziness is rational (and we teach it to MBAs), because rationality only ever makes sense with respect to your goals (which here is pursuit of profit, not of excellency). But that also means, rationality is never gonna tell you which goals you should pursue. Therefore, to decide to want excellency will always be an inherently irrational act (therefore, you only do it for good feelings).
The point of the second comment I made was that yes, some people choose to build mediocre (capitalist) organizations (based on profit maximization and labor market) in pursuit of organizational excellency. To me as a socialist, this is a foolish mistake. If you're interested in excellency, you should build organizations of peers (like cooperatives) who intrinsically share that goal, not subordinates who have to be motivated extrinsically. I should also note, every organization will get parasites who have different goals, like work for less effort. Unless these people are somehow a burden on the goal of excellency, they are less problematic in organizations that pursue excellency than in capitalist organizations that pursue profit. Therefore, the organizations where the excellency maximization is a goal may seem to be collectively less efficient (more wasteful) than those where profit maximization is a goal. Again, this comes from the fact that being excellent is not necessarily the optimal way to pursue an extrinsic goal, such as profit.
Hand-wavy dismissals are not a discussion argument. I don't accept this as a rebuttal.
> You feel like being excellent should give you money, fame and ladies.
And that's called "tearing down a straw man". Why are you arguing in such a bad faith?
The only thing most of us who finally smartened up about the labor market is this: profit must correspond with reward.
You and others seem to conflate this pragmatic view with the suggestion that we do sloppy work. No, we do our work just fine and we do it well, reliably, and on schedule. What we do NOT do is to go above and beyond.
But you and others seem to get triggered on other topics (mostly about human excellence and "we as a society must all help") that have almost nothing to do with the discussed topic and give your takes not on it, but on these other things.
Finally, profit being an "extrinsic goal" is a needless philosophization and does not advance any discussion.
Lazy pay, lazy perks -> lazy workers.
You are not being paid enough to rack up tech debt during 80 hour weeks constantly moving from one sales-driven project to the next, because that's a stupid way to develop software and it'll burn you out after a year of back-to-back "why isn't XYZ done?"/"why didn't you make XYZ not buggy?" meetings, at which point you'd better have made enough money to retire to the Bahamas.
where?
They aren't giving everything they're there to do a job and that job is make the company profit.
The person you are replying to isn't saying "you need to go the extra mile to make profits" they're saying "you should be focused on making money for the company, not on personal preferences in your code".
But GP is saying everyone except the devs is there for status and fat bonuses. You’re talking like a defector.
Common misconception, but a non-profit needs to make a profit, too. It just gets invested back into the business instead of distributed to shareholders, or in fact to any individuals.
Look: job 1 is making safe software, job 2 is making money and job 3 is perfecting the architecture.
If it is, then at least you have a simple test case to work with so they've done a chunk of the work for you. If it's not, then they'll spend ages trying to craft a test case for a scenario that's extremely unlikely.
People very often leave you alone when challenged to put in the work to prove their point.
>It really isn't, your job is to make a great product. Making a great product often, but not always, requires great software.
I believe that depends on the role you have. If you're a software engineer I think you should try to create great software. If you're responsible for the product you can decide it might be better for the product to ship earlier or with the current state of software but I think you should not keep your software engineers from trying to make the software great. You can try to shift their focus on a different (software) topic that you think is more important if you don't like what they are currently trying to improve.
This is different from always making great software but shifting priorities.
Absolutely and categorically it is not. That is complete nonsense. Why should an employee care? Unless there's some profit sharing scheme in place that would benefit the said employee and they took advantage of that scheme. And even then, employees typically (and I'd even say in the vast majority of cases) have very few and tiny levers to pull to affect company profitability. So you typically you get nothing if the profit is x and nothing if the profit is x+n and even if you get some of that n you can't really affect the absolute value of n. Why should you care about n again? Oh, right, so the company doesn't go under and/or lays you off. That shit may have worked 20-30 years ago when company loyalty and upwards mobility was a thing.
> It really isn't, your job is to make a great product.
Nope, that's the product manager's job. Here, a Wikipedia link, just for you: https://en.wikipedia.org/wiki/Product_manager
They don't have to care, they are just there to do a job. If your company values a release now more than a more stable one later, it's not on you to refuse to do that.
In a well-working organization, that absolutely means that you, as an engineer should look into how to do X with the least amount of effort, hush things up, and ship it. The PM is the one that has to decide into hushing or not things, you are the one to decide how.
The problem is, every single organization where the PM insists on you to hush isn't well-working. It's easier to win the lottery than it's to find exceptions here. On those problematic organizations the PM will use your results to improve their curriculum and will absolutely throw you under the bus when the hushed product behaves like a hushed product. And everybody will be happy with kicking you down.
Also, if the product has any kind of safety impact, it's not the PM's job to decide about it anymore. It's yours.
Its interesting that a lot of the replies here are railing against the idea that software devs are used as cogs in a machine, yet at the same time all replies are arguing that a dev should only be a cog in the machine, and any further context/awareness/action outside of being a cog should either not be expected or make the dev eligible for an outsized reward.
So to zoom in on your reply:
> Why should an employee care
Because they are paid to make the company profitable, and if they fail to do so they may not continue to be employed. I'm not sure why this is controversial. This requires no profit sharing to be in place, because it is simply the job that is required of the employee. It is probably by far the most general description of a job that is not: "the thing you do for money".
It may very well appear that the employee has no direct influence on company profitability, but since this is nearly impossible to measure objectively the next best thing is to try to make sure that he or she does by listening to signals coming down the hierarchy of management. Your PO telling you to hack a thing together is such a signal, and should be listened to. You warning about a giant pile of tech debt is a signal you should send to your PO, that he/she should listen to.
This is all absolutely trivial.
To generalise this, it's everyone's job to create value. This may or may not result in profit, but ultimately aligns with the goals of the organisation.
In some cases, ship vs not ship, profit vs not profit, is the difference between a company thriving and failing to thrive.
In others, there are second- or third-order effects that render marginal profitability kind of irrelevant to the trajectory. This usually applies to either very large / institutional orgs, or situations where the business is leveraged by investors (VC or PE) such that the kind of honest profit earned by shipping an update or a new product won't meaningfully impact on the company's fate. In those situations, doing good engineering and cleaning up tech debt might make more difference to yours and your colleagues' lives, and maybe even your customers', than shipping.
That's their problem, not mine. I get paid a fixed amount. If I get paid the same + a percentage of outcome then I'll change how I work.
Easy to understand, I believe.
It becomes a nasty chicken and the egg problem though -- many companies pay less as a risk management strategy, and that leads to the employee not having enough motivation. Of course from then on he/she does not want to excel and the employer concludes they made the right decision which is of course super wrong.
It's quite tragic on a human level but I stopped caring about that aspect as well. At my age and experience I just shrug and say "You get what you pay for" and I am not interested in trying to school people who would never change anyway.
This attitude is more likely to get you fired than rewarded in most companies.
If you step outside your role, or even lift your head up and peek around and offer your thoughts about what you see, you'll be at greater risk for no reward.
Again, in most companies, not all.
Please give some examples of great products created by software developers that have terrible software behind them.
There's a third and even more common option: seniors who really could care less about either
Who do you think is more likely to be lying? The person who claims to care about the bottom line or the person who claims to care about code quality? From my experience the former is almost always a bullshitter
Is it a hobby for passing time? For pleasure? For the beauty of the code?
Could be. But most of the time, you develop in order for the software to perfom a task someone needs.
And that should be your first focus: to develop something that brings value for its user, and develop it as efficiently as possible. After all, what's the point of a software if nobody uses it? So no, your job is not to create great software, your job is to bring value to users.
In my career, I've mostly seen the developers pleasuring themselves with overengineering, bloating code with features nobody needs, and writing lines to anticipate future developments that never came. Rather than the opposite.
So I think the challenge is to remain minimalistic, that's hard, and that's what the original post is about.
And yeah, no googling involved. I often look in HN profiles to find more context to why people are writing what they write. I don’t stalk them, tbh I find it creepy when people from HN find me on X and DM me.
The better places I've worked were more focused on compromise, experimentation and taking shared responsibility for risk.
Of course it may not apply to software today (except to the extent first impressions count) because modern software tends to be continuously maintained (and modern games often are too, to a much lesser degree, with post-release patches).
[0] Games like Minecraft, Stardew Valley, Terraria and online games being a minority.
The profit-maximizing strategy is to keep the level of crappiness that frustrates your customers, but not enough to make them switch to a competing product.
Or Duke Ellington: "I don't need time. What I need is a deadline."
Bad forever!
to me he's right about how devs should deliver it as engineeringly sound as possible, and executives should deliver it as timely as possible.
its a balance between having a usable product and a product they need at the right time.
it's not adversarial. its a conflict yes, but a healthy one.
Swe should inform about consequences, and executives should inform about business priorities, but they don't have to all disagree on the way forwards.
Oh nooo... the poor managers, how will they manage if you don't TRUST them blindly and completely (and bend over backwards to fulfill all their whims)? What kind of a cult is this? I'm not a sheep that needs to be herded. Besides, trust is earned.
So no, it's not exhausting, it's the exact opposite. It's refreshing and freeing.
Anyways, I get along with my coworkers very well. In fact most of my friends began as my coworkers. Then again I do not consider managers to be my coworkers. And generally speaking, yes, you could say I don't trust them. But that just comes from working in 5 for-profit companies for over 15 years. The only exception was an energy company, probably because the "just ship it" mentality wasn't as strong.
That said it was quite a cynical interpretation of my comment and aggressive reply, so I'll leave it with that.
And since we are that and are paid for that knowledge, we should strive to improve software / system quality as much as possible. Isn't the job of executives, managers, etc. to figure out the constraints we have and strive to improve profit and shipping speed as much as possible?
Together, with our combined expertise we can get the practical best of all three. But if eng just nod along knowing they are sacrificing quality, security, scalability, etc. then they are doing a disservice to the team, no?
It's the executives' job to synthesize info from other orgs and understand the business. In social media apps for example, delaying a feature launch for better quality may not be worth it. In commercial aeronautics software, it matters a lot better.
"Do the wrong thing unless it's for you, in which case ship it earlier", "your job is to make you feel good about what you put in your CV", and other amazing quotes.
The only thing of value in the whole comment is saying to not get too attached to any job or worry too much if you get fired, but even the reason given for it is wrong. Incredible to realize I probably work alongside a few people with the same adversarial attitude.
Some people do like to live life in the wrong game theory quadrant.
Don't you know anyone that donates money? Or that volunteers their time? Or that doesn't use all their deductions when doing taxes? Haven't you read stories about people who anonymously donate kidneys? There's so many examples - and the only way for your world view to "work" is if all of them only do these things for selfish reasons.
At some point one has to acknowledge and believe in good and cooperation and decide if they mostly want to try and operate in coop mode or in selfish mode, but the more you believe others are likely to choose coop, the more like you are to do the same. So you need to start from the belief that good and coop are things other people will also choose. Your world view prevents this "from the start".
Of course, it's impossible to predict complications. Some donors have died on the operating table. The risk of complication is very low, though.
If you have any other questions I'm happy to answer.
Sources
* https://www.livingdonorgames.org/
* https://www.kidneyregistry.org/for-donors/kidney-donation-bl...
* https://www.kidneyregistry.org/for-donors/i-want-to-learn-mo...
come the f on u for real?
There's more information about living kidney donation here: http://waitlistzero.org/living-donation/risks/
Donating money? Volunteering? Even donating a kidney can all categorically be understood in terms of individual gain.
He mentioned that your job as Software Engineer is to focus on Software quality and push against on unreasonable deadlines. It is NOT your job to make sure the company is hitting its sales targets, that's the management's job.
If you think this is satire, you are in the wrong profession and frankly I'm amazed that on a website called Hacker news, people are attacking parent for this advise. Then again, perhaps not since most people here are focused on startups churning out products with unreasonable deadlines.
No wonder no one takes Software seriously if _this_ is the attitude from the self proclaimed "Engineers" themselves..
There's software quality, and there's that one guy who over-engineer's everything and just loves writing frameworks and never ships actual product. Without seeing actual demands and code, it's impossible to know which of the two categories they fit into, but it reads like the latter of the two.
We are not perfectly rational automatons that always work towards our rational best interests. Shipping is hard so we create mental battles inside ourselves to avoid it and use post-hoc justifications to feel morally ok with that decision.
The choice of when to ship isn't nearly as important as the answer to why you aren't shipping on the choice you said you would ship. Yes, shipping at different points of maturity represent different sets of tradeoffs in a complex multi-dimensional matrix and it's an intellectually fascinating challenge but often, the choice is far less important than the debate that sucks it in and engineers end up bikeshedding the decision. Whenever you find yourself bikeshedding, it's important to realize you don't solve it by looking at the decision but by looking at why people feel the need to bikeshed in the first place.
You talk about how "Your job is to create great software. What's great software? The kind you'd be willing to put on your resume without feeling bad.", what is the "job to be done" by that belief for you? Is this a true, genuine held belief by you or is that here as a cover to some deeper belief that is uncomfortable to surface?
The answer is something ultimately only you can answer and no internet comment can force that deep degree of introspection, only those close to you who have a requisite degree of insight and therapeutic practice can reliably help with that. But the larger point I want to make is that the shape of the conversation around shipping is all around exploring where we feel different mental resistance around shipping at any point in time and uncovering where that resistance truly comes from vs the reasons we make up to dress it up.
Really fascinating thoughts.
You build the mobile app and you still don’t ship because the mobile app was not the problem, it just hid the problem. Until you understand and confront the true problem (emotional discomfort at the consequences of shipping), there will always be another reason not to ship.
Firstly, I sense you are frustrated in your current post and I sense you are not in step with your management or perhaps not even in step with your coworkers. I sympathize with your predicament. If I had any advice it's that you cast around for a position that's more in line with your principles and goals (don't quit your current job till you find that.)
Personally I've been on all sides in the myself. I've been the principled programmer. I've been the one dedicated to quality. I've been the manager. I've been the person responsible for the business staying in business.
Yeah its nice to adopt the "code my problem, business not" position. It seems like the moral high ground. But businesses are all about balance. They have to balance things like income, and happy customers with tech debt and so on. Having programmers (or anyone for that matter) working -against- the big picture is not ultimately useful and can do more harm than good.
I don't always agree with my team and they often don't agree with me. But ultimately I'm responsible so (sometimes tough) decisions have to be made. The most successful employees are those who acknowledge that this isn't necessarily the best way to do something, but strive anyway to make it a success.
I wish I had the time and money to let programmers just spend forever building stuff and never shipping. They most definitely wish that. But we live in a real world with constraints and the reality is we need a lot more than perfect code.
Of course some places are just impossible to work at, where everything is rushed and there is no balance either. And then it sucks to be you.
Oh wait, no they don't.
What? No.
It's the economically and humanly well-balanced position. I got a wife whom I love to spend time with and I don't want to live on the computer. 8 hours is already way too much. I do what is expected of me and maybe a little more, for the rest they'll have to pay extra or give me parts of the profit.
If not, they'll get baseline performance.
It is always so mind-bendingly odd to watch people claim that you can go above and beyond as if that has zero side effects on any other aspects of your life.
In corporation setup, you always have a manager and peers that push you. You have periodic meetings with team/manager whatever to show what you have done, and then, depending on company setup, it's quality vs speed discussion. But that's very different from being all alone with your code and computer trying to build something from the grou up.
Maybe. But...
> Your job is to create great software.
No. Your job is to do what the company pays you for. The company is not paying you to create great software. It's paying you to solve some kind of business problem or provide some kind of business service. Some of those problems or services do indeed require great software. But many do not; mediocre software will do the job just fine. And if that's the case, and you insist on creating great software anyway, you are spending time and effort that is not adding anything to the company's bottom line. And while you personally might not care about that, the company does, and they're paying you.
> What's great software? The kind you'd be willing to put on your resume without feeling bad.
You used the term "software engineer". A software engineer's job is not to always write great software. It's to write the optimal amount and quality of software for meeting the particular requirement it's supposed to meet. More generally, an engineer's job is to produce optimal solutions to problems. That does not always mean building the highest quality product possible. Sometimes it means doing just enough to get the job done, even if it's not very pretty, and stopping there because doing more would add no business value. And you should not at all feel bad about putting that on your resume. Refusing the temptation to gold plate everything when it's not necessary is a good thing for an engineer.
Yes and no. Ultimately, your solution will live on after you. Even if theres no way for it to backfire publicly, your coworkers and future employees have to deal with it. It can absolutely ruin your reputation and cost you future employment. Admittedly its much easier for a contractor to draw a red line, but I had done this as far back as my first full time IT job, setting boundaries with the owner of that business as to what is and is not practical and achievable.
If your solution does not meet the company's needs, yes, this is certainly true. But I never said you should do something that does not meet the company's needs. I just pointed out that meeting the company's needs, even if you add the qualifier that you are going to do that in a way that is professional and does not create unnecessary burdens for others, still does not always mean "write great software". It means finding the optimal solution for the particular problem.
> setting boundaries with the owner of that business as to what is and is not practical and achievable.
And in cases where "write great software" is not practical and achievable (and yes, there will be plenty of such cases), that would mean telling the owner that it is not practical and achievable to write great software to meet this particular requirement, and recommending a different solution. Which is what I said.
Like company policies can be wrong. They are often wrong. It wont matter to your reputation that some CEO accepted the risk and asked you to ship before code review.
The problem with this mindset is the most companies are short-sighted and when the problems inevitably start coming in it is the developers who are placed under pressure.
It is the developer being paged at 2am on a Sunday. It is the developer working overtime to get the feature out because the codebase is a giant mess. Etc.
Having a minimum quality bar is a must. The OP was suggesting a professional level of quality - not gold plating everything.
The best course if you find yourself employed by such a company is to change employers. A company that is genuinely short-sighted is dysfunctional and no amount of professionalism on your part as an individual contributor is going to fix that. Now if you could get yourself promoted to management, then maybe you could have an impact--but then you wouldn't be doing actual software engineering any more, you'd be doing corporate management fixing, which is a different job.
> and when the problems inevitably start coming in it is the developers who are placed under pressure.
Yes, this is true. And as above, if it's genuinely dysfunctional, your best course, unless you are willing and able to become a manager yourself, is to change employers.
> Having a minimum quality bar is a must. The OP was suggesting a professional level of quality - not gold plating everything.
That's not what "write great software" means to me. "Great" is not the same as "minimum quality bar".
The company pays me because of my knowledge and expertise, that is needed to create and maintain the porduct as best as possible.
If I am just a yes man, the company isn't getting what they paid for. If I honestly assess and say what is being sacrificed re: security, scalability, future flexibility, etc. in the software, then the company is getting what they paid for, and they can choose how far they want to go in the quality / time spectrum. And if they pick somewhere my expertise says is too far on one or the other side, it's my job to say so.
No?
Yes, but that does not always mean writing great software. Sometimes it means writing mediocre software because that's all that's needed. Sometimes it might mean writing no software at all because software isn't the best way to solve a particular problem.
You recognize this because you say there is a quality/time spectrum, and the company wants you to use your expertise to help find the optimal point on that spectrum for a particular need. But "write great software" implies that there is no such spectrum--everything you do is always at the extreme high end. You are agreeing with me that that's not the case.
Yes I guess I just read the parent comment more charitably. Like always push for maximizing the quality as that's your job and your expertise. And sometimes when quality really matters you have to stick your neck out and push back aggressively, even if it will cost the company more than expected. That's what we learn in engineering ethics courses in school after all.
Yes, that's certainly true. But not all cases are cases where "quality really matters". In many cases you reach a point where adding more quality has rapidly diminishing returns in terms of business value--often because it takes time and effort away from other projects where quality matters a lot more. Ultimately that's the company's decision to make. And as I pointed out in another response upthread, if you genuinely believe the company is dysfunctional in this regard (and many companies are), your only real choices at that point are to try to become a manager so you can fix the company's culture, or change employers.
Usually when you are doing "just ship it" often enough you achieve this, especially at larger firms too often I see situations where engineers are doing their 3th refactoring without any customer feedback.
If you want to write good software, get it in front of someone who will actually use it as soon as possible.
Get it in front of many people who use it as soon as possible.
No matter how smart you are, you can't anticipate every user need. Let the users tell you what they need.
To do that, you need to ship.
Wow. That reminds me of what the guy who was fired said.
I’ll never understand him. He lives in a house that’s below sea level, with one kid and one wife, and it gets flooded every 4 years. He was raised 30% during Covid, job was quite comfortable, he was competent for it, then stopped pulling his weight. Wouldn’t it be easier to keep pulling weight and try to build something that works, rather than deploying energy for union tactics, and then live in a twice-more expensive above-sea-level house?
Yes it would. Sometimes people get stuck in a victimization loop.
Any job, In any industry at any level should be working together with your manager to understand what the company goal and how to achive that. Its always going to be time/price vs quality if you work on creating software or clothing or whatever. There are properly companies and managers that do not care.. but imbany healthy organisation this should be the case. There is not garbage tasks. Its tasks that needs to be done. Any understanding that not all tasks that needs to be done in an organisation is fun but needs to be done is a sign of maturity that you want from your employees
Once there was a problem that machine didn't make good enough surface finish, but boss just said it's fine, let it run. Turns out it wasn't fine and we had to fix 3000 parts with hand sander. That's why I don't like to cut corners.
It sounds like you're a fan of Total Quality Control, as am I. However, it also sounds like you're susceptible to feature drift and undermining yourself with ideas thought up late in the development cycle, as am I.
I've seen it from both sides. Software people who want to get just one more feature in, or who want to hold up release to fix an inconsequential bug. Similarly, the CEO who ruminates all weekend and decides we have to revamp something for no objective reason and on a ridiculous deadline.
Your job is to create great software for the company and your definition of great software is therefore defined by the company.
> . What's great software? The kind you'd be willing to put on your resume without feeling bad.
If your idea of a good CV is one where you can say "I deliberately made the following companies less money than I could have: ..." then I'm not sure who you're applying to with confidence.
You do know that the point of a company is to make money, right?
Also, and this is something a lot of the managerial class people don't want to hear:
Your job as a sw engineer/architect is to resist the "just ship it" pressure from the management as much as possible. So unless you own what you're coding and you really need it out of the door for your own benefit, if more time makes your work more professional, then take more time. Anyone telling you otherwise is a 100% hack. You are not an automaton that takes in JIRA tickets and spits out hacky code as soon as possible. Or at least you shouldn't be. Not to mention that not taking time (doing things properly) is incredibly taxing on your psyche and you WILL burn out. There are only so much garbage tasks you can take.
It's worth repeating: Unless you have a stake in the company, it is NOT your job to make sure the company is the most profitable it can be. Your job is to create great software. What's great software? The kind you'd be willing to put on your resume without feeling bad. This is the thing that will ultimately make you feel good about the work you're doing. Hitting that arbitrary deadline for a 1425474th time may feel like a relief but it's short term and a form of negative motivation - and in the workplace, those NEVER work over a long period of time. So RESIST that pressure from the top and do your work properly. If they fire you, then who cares, the only way up these days is job hopping anyways.