Hacker Read top | best | new | newcomments | leaders | about | bookmarklet login
I don’t belong in tech (medium.com) similar stories update story
162 points by ingve | karma 199255 | avg karma 12.93 2016-11-26 10:52:43 | hide | past | favorite | 205 comments



view as:

The writer sounds like a crippling perfectionist. The world isn't perfect, and neither is any real program. It's an important step in your personal development to recognize and deal with that.

Perhaps they would be happier as a designer, where they can make everything fit into perfectly neat boxes.


It's interesting because I suffer from perfectionism as well, severely so. Probably for worse, I've also been able to achieve it in a lot of aspects of life. This reinforces my desire for perfection.

The interesting part is that programming is the one place where perfection escapes me, as in I haven't desired for it. I realize there are bugs and caveats to written code. My flip side here is that I strive for perfection of the user's experience. I do get disheartened when a user experiences something negative in the code based I work on.

The key for me has been focusing on the perfection to a user and not perfection of code. There may be a dark edge that they never see, and it's fine.

When there is a careless bug, I still struggle balancing empathy and drive to fix it. That's fine, however, as I'm aware and work to not do it. I could see where someone who strives for perfection would easily get disheartened and feel misalignment in values.


> Perhaps they would be happier as a designer, where they can make everything fit into perfectly neat boxes.

Typically I'd just downvote, but was that condescending comment really needed? This is the sort of toxicity that turns people away from our community.


It is a fair comment. In design you at least have a chance at clean work safe from messy reality.

It's a condescending comment because there are many designers who have to design for the real world. It's no less condescending than saying someone should go into programming where they just have to type out code all day and not face the real world.

That's exactly why software engineering is more attractive than hardware engineering though?

A condescending comment would be something like: "Maybe you should stick to your pretty R graphs for 'journalism' and leave discussion of software engineering to the professionals who actually get paid to build systems and who haven't, as a profession, fucked up on every metric in the last decade even without including the most recent election."

That would be a condescending comment--the one you are remarking on can be interpreted as "hey, designers get to make pretty things unfettered by layers of shaky abstractions and stupid imposed by business and deadlines".

Please don't rush to aid the theoretically aggrieved; especially when there are folks in this same subthread going "yep, as a designer, that's the truth".


If a designer doesn't confront reality while creating a design, then I would say they have failed miserably. Perhaps you are right, and few designers are successful in this regard.

I'm not sure about that - designers have to build a UX that works in the real world, and sometimes there are really complicated processes that need to be exposed in a nice way. I imagine this has similar tradeoffs as programming (i.e. difficulty in implementation, balancing power/intuitiveness)

As a designer, one can live exclusively in "photoshop", ignoring the complexity of the process and the reality of usage. It's not like you can "test" a drawing with a real user.

As a programmer, you gotta get all the little details right or the application is not possible to use. There is no way around it, whatever is forgotten will just hit you right in your face.

And last but not least. Drawing is dead easy. A programmer could design a UI in a drag&drop devtool maybe as fast as a designer. The challenge when creating an application is not the drawing of the UI but the handling of the user interactions and the data.


Thank you for illustrating my (apparently unpopular) point.

This is such a massive simplification of what a designer does it's actually amazing. You're first and last paragraphs are simply wrong.

First of all a designer doesn't get to live exclusively in photoshop or some other tool. They don't get to ignore the "reality of usage". In order to be a competent designer they have to not only completely understand the problem domain, but also the given software solution and how a user can use the software to achieve the desired goal in the most concise manner. They have to worry about how to signal to users how to perform any given interaction and the overall complexity any activity has. Also they absolutely do test designs with real users. There is like a whole field of study in design around exactly this.

As to your last point, drawing != designing. Designing is actually really hard. This is a problem I see with programmers all the time. The oversimplification of others contributions. Yes you can put together a UI with drag and drop tools. You can build a website with drag and drop tools too and you'll probably get the same quality as the drag and drop UI. A drag and drop design will probably have most of the various pieces. But will it be obvious what actions a user can take from any given screen? Will it properly optimize screen space, and be color correct? There are a 1001 questions that a designer has to ask that most programmers wouldn't even think to ask. There are many challenges when writing an app, and good design has proven over and over again to matter just as much to the success of a business as solid code.


We both agree that there is a difference between a "drawer" and a designer, just like there is a difference between a "code monkey" and a developer.

First paragraph. I could say all the exact same thing about a developer.

Second paragraph. Yes to all your questions. I should clarify that the drag&drop tools I had in mind were for desktop applications, not web, that's a different world.


Design <ought> be perfect, because you actually have a chance to do so. Design is declarative. You are defining what <ought> be. People who are studying someone's design specification shouldn't have to wonder whether your circle is <really> a circle. A designer declares a perfect circle even if when zoomed in you find bumpy pixels.

Also, design in the context of a team especially ought be perfect, because your perfection will be degraded in a game of telephone.

By perfect, I don't mean that your design fits the user with maximum optimality. I mean that when you draw a box, you actually mean a perfect box. When a mathematician draws a square, they are describing a perfect square. It would be a little socially blind to pick up a magnifying glass and accuse the mathematician or the designer's square to be imperfect because you find the bumpy ugliness of a 1080p monitor or a sheet of paper.


Design is often a victim of mutually excluding constraints, i'm not so sure it's easier to achieve perfection. In fact, I'm pretty sure it isn't.

That comment about being a designer is <not> an obvious aggression -- notwithstanding whether aggression is net useful. However, saying that someone's speech is characterized by condescension and toxicity is <obviously> aggressive -- notwithstanding whether aggression is net useful.

Given that you do not possess the prerogative to control the costs of your potential mistakes, ought not calls of toxicity be restrained toward obvious cases? Also, how toxic are mistaken accusations of toxicity?


This thread is full of obvious cases of toxicity.

Or maybe they'd just rather do computer science than software development.

There are lots of branches of technology work that prize understanding over shipping.


Shipping without understand is no virtue, and as far as I can tell, there's no hard conflict between the two.

The entire official story of "lean" is "build, measure, learn", which is fundamentally about developing a process for shipping while deepening an understanding.

The hermeneutic circle (https://en.m.wikipedia.org/wiki/Hermeneutic_circle) cited by Dave Herman of Mozilla Research and Brendan Eich (about JavaScript) is a process of iteration that prizes a deepening understanding interleaved with lessons learned from shipping.

I didn't interpret the OP to be saying that she wanted to gain a perfect understanding before shipping, but rather that she preferred a style that focused more than the tech community average on deepening understanding.

And I don't think she needs to go to a different branch of technology to get that. Maybe app development needs more of it.

Steve Jobs famously talked about the interplay between understanding and building: https://wycats.svbtle.com/theres-a-tremendous-amount-of-craf....

I think we could do worse than to think about this topic more.


Belongs in an enterprise environment IMO. That mentality works really well with unlimited budget where projects can live forever.

Enterprise projects have sprawling budgets and indefinite timelines, but nobody who has worked on line-of-business software would suggest that the outcomes are anywhere close to perfect.

Not implying that. Just that her way of thinking is a much better fit in that environment.

Could you explain? Because she sounds like the opposite of an LoB enterprise programmer to me.

In the enterprise environments that I've been in, there has always been a big push for over engineering. The idea of iterating and improving is generally frowned on and the waterfall mentality tends to shine. Waterfall planning revolves around trying to understand the entire problem, plan every step of the way and then methodically deliver a solution that's prematurely optimized. Once the project is over it's handed off to a production support team with the goal of living virtually forever.

Her mindset of wanting to fully understand the problem, why it's a problem, etc seems like it would fit be in an environment where you had lots of time and a lot of people that you could meet with to gather information, plan, etc.


Having spent significant time at a true enterprise (in the top 100 of the fortune 500), the push is not for over engineering, but for over bureaucracy. I would represent that the frustrations are more likely to increase, as not only is there an absence of understanding things deeply, but also no impulse to ship.

Or perhaps she'd be happier in an industry such as aerospace, defense, or emergency services.

6-7 years ago, I interviewed at EFJohnson. The position involved maintaining code for systems used by emergency services (might've been related to E911, but I'm not sure). I distinctly remember one of my interviewers telling me, "if we screw up, people die". I'm fairly sure my lack of self-confidence was why I didn't get the job; he could easily see the nervousness on my face when he said that. However, it sounds like that kind of job would be perfect for the author.


Maybe the solution would be to switch to working on a different kind of software, where everyone agrees that getting it right really is critical?

Reading this was thinking, this doesnt apply to healthcare tech. Mistakes are not encouraged.

But is that the problem?

It sounds to me like the author wants to get it perfect, not just right. And even in those other kinds if software, you stop when it works well.

It might even be worse, as the developer needs to sometimes willingly make the product worse in some areas to make it acceptable in others, and that kind of compromise hurts to a perfectionist.


Well. Maybe the industry that do critical software don't let newcomer with no experience and no degree come in. So she's stuck in the world of poor software.

[Just a thought]


textbook imposter syndrome

I don't see any indications of imposter syndrome in here at all.

This is like the opposite of imposter syndrome.

She cares about quality and is upset that no one else seems to care.


Maybe she should quit doing user-facing stuff and try getting into systems programming for a change. Or some other area where sloppy solutions lead to tangible reduction of business value and thus are not tolerated. Tech is big, no need to quit all of it.

Totally seconding this.

Just trying to "quick fix" apparent bugs, without having understood the complex problem in its entirety beforehand, is a pretty bad approach in quite some areas of the tech world. This is true for most server-side work, for example - you just can't put a band-aid type solution on a problem created by a weird race condition between different requests processed in parallel, because you most likely either ruin the performance or don't catch all the cases in which the bug appears, or even worse: create new bugs, deadlock situations or similar catastrophes as a result.

I personally work on cash register software. In that area, it's basically this way for the server and client side of the equation, because if this highly business-critical piece of technology fails, the user really has a problem and typically can't do any business anymore. And the software release cycles on those machines also don't allow for continuous-deployment-we'll-just-test-the-fix-in-production-so-it-doesn't-matter-if-your-first-attempts-fail-miserably-style of work, so you have to get your bugs fixed thoroughly, which requires fully understanding the nature of the problem first.


"You just can't put a band-aid type solution on a problem created by a weird race condition"

Oh yes you can, and do, often, in payment processing code. I've done it (with a simple sleep for x seconds I think), and I can assure you the higher ups couldn't have been happier.


Oh, so maybe THAT is the reason why one of our customers had funny cases of thousands of his customers being double-billed on card payments by the payment processing provider!

As a developer (of the cash register software, which wasn't at fault in this case), I was kinda amused by the whole thing. But I can assure you, the higher-up business people weren't amused at all.


Heh. We had tons of double billing from payment processors, we never could get a straight answer from the gateway as to why it happened.

Most of them came from.a gateway called CyberSource.

Also, lots of customers have weird banks where they see both an authorization (I.e. hold) and the actual capture, and they mistake it for two captures. Usually it helps to educate them about what is an authorization.


Man, a bank that doesn't know the difference is a bank I'd be withdrawing my funds from!

The bank knows the difference, the reports they send out to customers (or maybe what the customer's see on the site) don't make the distinction clear enough.

Most banks don't even bother showing the customer authorizations of any kind.


If your using Java, there's a popular apache http framework[0] that automatically retries a failed request unless you specifically instruct it not to.

That bit us in the A$$ with double payments a few times.

0- https://hc.apache.org/httpcomponents-client-ga/httpclient/ap...


If you rely on http to ensure the one-and-only-one type of paradigm, I have bad news for you (because you won't be able to distinguish failure vs success case when you hit a timeout: did it not receive the request or did I not receive the ack?).

You should embed a transaction ID to ensure idempotence of your API call. Then you can make the request 1, 2 or 3 times without any risk. The receiving end will realize the transaction ID already transitioned state and won't cause multiple payments to occur.


Obviously. But youd be surprised, some gateways don't let you send your own transactionId. Or at least they ignored it for determining duplicate requests. Though that was several years ago.

I always wondered why cards get processed so slowly in some countries...

You absolutely shouldn't need to do that often in payment processing code. Did you go back and fix it properly later?

The sleep was as good a solution as we were willing to do.

The race condition resulted in an error syncing between two datacenters, so when it happens it can be dealt with manually.

Also, to be clear, it did not affect customer waiting time as the delay was in a webhook which we used as a backup to the main payment process.


I'm not entirely sure that she's right in tarring the whole industry with the same brush.

Taking a bug out to tea is fantastic, because it really is about understanding the problem. But she conflates maintenance coding and program writing. There is a lot of half-baked software out there, but to say that this isn't like any other industry - like journalism - is really patently absurd. Despite best intentions, journalism is absolutely like programming. A sub-editor is really just like your QA department in many ways. And just like she made a mistake in a script on NPR unintentionally, so too do programmers.

This piece is really a mass of contradictions. Take the following:

But here’s the thing. No one will ever remember that number. No one remembers it now, and I’m sure no one noticed it when it happened. But I knew it happened, that it was an easily preventable mistake, and, in journalism, being wrong in that way is absolutely unacceptable.

So... what is it? Was it unacceptable that the figure got into the story to the extent that she got fired? No, of course not - I'm assuming NPR ran a correction, and forgave her for her mistake.

I really doubt most programmers are going out of their way to slap together code that has deliberate bugs. Yeah, they exist but to say any software development house that writes email clients, job seeking sites or any other software are intentionally encouraging this sort of behaviour seems to be an insult to the vast majority of founders and software developers who work hard to hone their craft and take care to produce quality software.

This essay seems overly emotionally wrought and with a perspective that is out of kilter with reality. For me, despite her protestations that she is no better than all the others who work at software development, there's an implicit undertone of superiority masked by claims of victimisation and isolation. It's not particularly fair, and it seems rather manipulative to me.


I think the difference is in how the two industries she are comparing here fundamentally treat mistakes. In journalism, you might not get fired immediately for a mistake like that but certainly you're going to get reprimanded and told how unacceptable that is. Your company is absolutely going to run a correction at the first opportunity they get. Any mistake is treated as a major embarrassment by staff of a respectable news company. The viewers/readers might not notice/care but the company does.

This is totally not how things work in tech though. First of all there are a lot more mistakes/bugs, and because of that how bugs are handled is completely different. If you're not doing something where lives/money are at stake, it's ok to release with bugs so long as they aren't showstoppers. When I write something that has a bug in it, I don't even get talked to. We just write it up and toss it in the list with all the other bugs.

There are of course situations in both industries where things are different but I think in general there is definitely a major difference in how tech treats mistakes as compare to how pretty much every other industry.


A bit hard to respond at the moment, I've been rate limited!

You should try reading science journalism. It's absolutely riddled with errors and oversimplifications that never get corrected!

Moreover, sure NPR might fire you for repeatedly using incorrect numbers for which they then have to publish retractions but that doesn't stop you from using essentially correct statistics in highly misleading ways, a sin all major media sources are guilty of.


"Just trying to "quick fix" apparent bugs, without having understood the complex problem in its entirety beforehand, is a pretty bad approach in quite some areas of the tech world."

And a million sysadmins across the world cried aloud in agreement and despair.

The point is that I think there are business side problems more than there are tech problems in this industry as a whole. I think the phrase "the perfect is the enemy of the good" is a dangerous one for so many managers to latch onto. More on point to the article though, we need more magnum opuses, more results of this kind of long term thinking, put into action. Not more band-aids on problems.

I do think though, that big picture thinkers of this ilk do find themselves trapped into a twist on the Bertrand Russell saying, "The trouble with the world is that the stupid are cocksure and the intelligent are full of doubt."

What we need then, are some of the intelligent to gain a bit of the cocksuredness, and the stupid to gain a bit of doubt.


This was my thought as well. And don't work at a small company or startup; go work in a mission critical industry such as aerospace where perfection is the rule of law.

Also power electronics, medical, nuclear, etc. But there is a problem in those industries: They don't pay nearly as well as the fail-fast-and-break-things internet jobs. Tech salaries are sky-high right now because we are taking over the enormous advertising industry, which has large margins.

Those other industries? They are already quite mature, and are operating on razor-thin margins, often in the 5% range.


We should also consider making startups a place where understanding is more common.

I thought exactly that. Then I got to systems programming (embedded, soft real time, consumer brand that used to be known for quality etc) and found out everything is equally crap out here, too.

There is plenty of place for polish and deep understanding in the user-facing sphere. Apple is renowned for their work in this area. My company's product, Skylight, has made a virtue out of "all the little things" - understanding problems deeply and solving them well.

I think it's reasonable for people to wish that more of user-facing software worked this way, even though it's out of sync with how Silicon Valley and Venture Capital tend to work.


> Apple is renowned for their work in this area.

Apple is renowned for their draconian policies and, more importantly, massive marketing apparatus that brainwashes customers.

Their actual expertise in development, as exhibited in the last few years of buggy software and gimped hardware, are not that great.


The flagged sibling comment demonstrates how emotionally invested people can be in their technology choices. Similarly worded comments about other subjects would not have been flagged to death.

If anything, I think this demonstrates how talented Apple's marketing team can be, as well as how meticulous their UI team can be. I myself am a huge fan of attention to detail, and we need more of it. I've used Skylight before, and if I'm working on another project that could benefit from it I'd recommend it again, so thanks for paying attention to all the little things.


For what it's worth, I spent half the holiday weekend arguing on Twitter that I think apple has lost its way, and talking about my switch to Windows for my home machine, so I found both the vehemence of the flagged comment and the flagging to be pretty strange.

> Tech is big, no need to quit all of it.

“Well if no one out there understands, start your own revolution and cut out the middle man” - Billy Bragg, Waiting for the Great Leap Forwards

Bragg was writing about the tension between being a musician and being a political activist rather than the tension between problem understanding and problem solving, but the tension seems to be everywhere. I've got a friend who was frustrated about how little his PhD had to do with philosophy because there was no time for that, only time to publish. Alan Kay said something of the ilk in the epic Ask HN thread a few months ago, referring to how hard it's been to get funding to do good research for something like the last 35 years or so. Hopefully the author can find her 'birds of a feather', it's not like we lack problems that need understanding.


> I've got a friend who was frustrated about how little his PhD had to do with philosophy because there was no time for that, only time to publish.

I don't understand. He studied philosophy but ended up writing a thesis that was only tangentially related to the field?

Or he assumed that "Doctor of Philosophy" was related to the field of philosophy, and was disappointed that he couldn't talk about Plato while writing about physics?


More like the later, but less extreme. Disappointed that there wasn't time to talk about the philosophical aspects of computer science in a degree named `Doctor of Philosophy'.

Oh, well that's not really what "Doctor of Philosophy" means. It comes from the same Greek word, which means "love of wisdom", but it's unrelated the field of philosophy.

I also think the philosophy of computer science is very interesting, though. I just saw that Oxford offers a course that combines computer science and philosophy: https://www.ox.ac.uk/admissions/undergraduate/courses-listin...


Well, I think it's the 'love of wisdom' angle that I saw in my friend's frustration and the article author's distinction between problem understanding and problem solving. I think there's a place for knowledge for knowledge's sake, akin to Hardy's belief that mathematics is worth pursuing for its own sake, not just its applications.

Actually, whereas the word literally means that, the use of the word philosophy to mean a disciplined investigation into questions actually predates even Plato's Academy.

The reason why academic titles have the word philosophy in them is because modern investigations have developed from the philosophical tradition.

For example, philosophers may have a question, "what is value?", or "what is the nature of the world?", born out of the philosophical tradition.

Then, after sufficient discussion and philosophical investigation, they figure out that certain methods, approaches to answering these questions, are very fertile and lead to informative answers, e.g. value as a real-valued mathematical measure, or the nature of the world as a generalization of empirical observation.

Such methods may prove to be so fertile that you may have academics spending decades or centuries investigating the implications of that method. Hence you have economics and philosophy.


it also has to do with the fact that the title of the degree predates the differentiation of many of the sciences. Newton, for example, would not have described himself as a physicist because that word didn't yet exist. (it was first coined, per the OED, in 1840.) He was a natural philosopher, which meant he thought Aristotle could be wrong and you could prove that.

Just more and more reasons to quit web dev, huh?

I understand the author's frustration, and I don't think it's misplaced, but the "world of tech" is wide, and the description, while veridical, is perhaps a little narrow-sighted, or confined to too small a portion of this industry.

There are fields (we all know what those are) where, indeed, "if you aren’t embarrassed by the first version of your product, you shipped too late." Those fields are recognized for anything but quality, and this attitude is precisely why LinkedIn is the profitable (for a handful of people) but despised piece of shit that it is. If your aim is to get as rich as Reid Hoffman, by all means make that a credo. Otherwise, ignore them and the people who think there's any value in that sort of thinking.

In the meantime, there are a lot of other fields in "tech" where if you're embarrassed by the first version of a product, that's usually a sign that it's going to be scrapped because getting it on the market RIGHT NOW is going to get someone killed, literally, and it's in such a bad shape that by the time you patched it up into a state where it doesn't kill people, no one is going to need it anymore.

Not that blunders don't happen (eh, Toyota?), not that this always results in beautiful code that would make Knuth himself weep tears of joy. Like with everything man-made, there's a lot of room for imperfection, but perpetually shipping beta-quality software (oh, sorry, I meant continuously deploying and improving software delivered as a service) is not cultivated.

There's a lot of "ugly code" in these things as well, but for different reasons. "Beautiful code" isn't pursued for its intrinsic aesthetic qualities, it's a result of the pursuit of quality design, of "proper" engineering. It doesn't happen because programmers have a thorough understanding of beauty, it happens because they're encouraged to understand the problems they're solving from many angles, to come up with solid solutions that are going to work two years from now, too (upper management not having selling the company for a decent price within the next 18 months as their main objective helps a lot here) and so on. Certainly, having time to properly implement code helps as well, but most of the super Agile shops I've seen couldn't produce ten lines of good code even if they had an ice age and a half for it. Not because their programmers wouldn't have time, but because they're constantly battered to ship code whose only virtue is that it can be quickly patched up to The Founders' latest whim. Unsurprisingly, when you optimize for things without technical value, you end up with code that's technically crap.

There is a place in tech for people who think that products that sell for their intrinsic quality, not just their smart timing, are both possible and a goal worth pursuing, or for people who want to work on things where quality is a prime concern. There are companies that try to pursue that as well, even though, like everywhere in the Western world, their main objective is to make money. The idea that the two are somehow mutually-exclusive is popular, but not universally revered, and companies that don't adhere to the "move fast and break things" mantra need programmers, too.


I had that feeling. It went away after a few more years.

I used to try to fix everything and stay up at night thinking about a strategy to turn the spaghetti code into a well structured framework. What you don't realize before you start is that it takes an awful amount of time and the end user doesn't even notice it. You make it harder on yourself thinking about the ideal code rather then fixing the problem.

It's all about making it work. And trust me, that in it self can be exciting.

Think about maintaining an old php project where the original developer is all gone and you have to figure it out. You can complain all you want, try to convert it to rails, or you can fix the bugs. That feeling of figuring out and fixing it is where i get my thrill.


I definitely identify with this post. I love figuring out each and every bit of the product I work on, how it interacts with other code or products or whatever, before inevitably getting frustrated when the focus is on shoving more features into the product haphazardly instead of fixing existing issues or getting a better understanding of the feature and how it best fits in the product.

I think I've begun to figure out how to use that to my advantage though. Ultimately any product is driven by business concerns, and you have to use that same skill of understanding of how code pieces fit together with how business pieces fit together. "If I improve this interface then the code will be more modularized" isn't going to make much waves with a product manager but "If I invest five man-days now, we'll save ten man-days per year and here's why" absolutely will. It's very tough as business and human concerns are much less structured and easy to understand than algorithms, but it is an important step in being an engineer and not a computer scientist.


"I am not comfortable making half-ass s..."

Agile and Lean both contained good ideas, but they've been misinterpreted. "Flexible processes" became "no processes", "rigorously test your assumptions" became "try things at random".

Web and mobile are becoming mature platforms. There's now a long history of web and mobile products to study - the design, engineering and business principles for success in these products should be well-known. They're not because of the rampant ADHD and short-termism in the industry.


> I'm a white male - a right-wing white male - and I agree with her.

Why do you need to include that?

She very deliberately said that this is not an article about race, gender, or politics.


The article author spends numerous paragraphs establishing her identify to the reader as a womain in tech before explaining that this isn't the issue she has with tech. The comment author has merely done the same?

As someone with ADHD, I guess I should be insulted by IsaacL's post, but I'm not. I thought it was fair comment.

As a journalist-coder, I sympathize with the author's feelings, but I've come to understand that even as much as truth is ingrained into the work of journalism, that there is a lot a journalist doesn't know and can never know about their story. This feeling is most evident in obituary writing, where you're asked to sum the essence of a life in 500 words of someone who until the day of assignment was a complete stranger to you. Once in awhile I've had readers who were close to the deceased write and thank me for revealing things that they hadn't known about the deceased...which is natural, because even close friends have angles and aspects they don't reveal directly to one another. But then I wonder, what makes me think that I, the outsider, got it right?

It sounds like the author is less disenchanted with tech and coding than she is with product development, because there are many ciders and engineers who care as much about the truth but conflict with CEOs and managers. This is no different in journalism, where the saying goes: an editor's job is to sort through the wheat and the chaff and keep the chaff.

To me, the truth that can be found in code is a refuge from the inherent unknowability of the real world that journalism attempts to describe. I tell journalists who aspire to code that as hard as programming may seem to be at first, it's by far less complex and confusing than the real world.


overly flowery writing made it really hard to get at the core point the author was trying to make.

from what i got she wants everthing to be perfectly done with unlimited time. I would imagine one of the core qualities of software dev is figuring out what level of perfection is acceptable. Not everything in the world need to be 100% perfect, Walmart exists for a reason. That said its a welcome attitude in world full of crappy software.


This kind of vacuous, meandering, self-indulgent drivel would be torn to shreds if it had been written by a man.

This comment is uncivil, unsubstantive ("if false then X"), and introduces a classic flamewar topic with nothing at all to say about it, new or otherwise. Please do not do this here.

https://news.ycombinator.com/newsguidelines.html


I'm pretty sure the style of writing was to convey emotion and help people understand her perspective at a deeper level, it wasn't just long for no reason. In this case, the article is specifically about what motivates us to keep on programming and keep on building things, so the human side of things is really important. It's not just that she wants everything to be perfect, she believes that the relationship between a website developer and one of its users should be one of trust, and it feels wrong to betray that even if it's more efficient from an engineering standpoint. Accurately conveying "this feels wrong" is complicated, hence the long article.

Every industry requires you to change and grow. Sometimes you find an industry that allows you to grow in the direction you want to grow. Sometimes you don't, but you should. It's up to each individual to find their niche.

People who cannot process their emotions should not try to build a startup.


The author makes some great points that I initially wanted to dismiss, but I think are actually really interesting. Unlike many other types of engineering/craft, most experienced software developers have settled on an aversion to perfectionism. A good carpenter wants to build a solid house even if no one will ever see its frame. Ditto to an auto engineer at BMW, or a hardware engineer at Apple, or a mechanical engineer at Boeing.

Why do software engineers break this mold? I think it's because building software is inherently cheap, which means it's easy for a large number of people to build things without an obvious economic incentive, which means there's often a product misalignment. When someone builds a house or a car, they are certain their product will get used. Most software, on the other hand, never sees heavy use. Probably 90% of what I've built over my career has never been used, and I've had a productive career.

The most rational thing in software is to ship something functional, then perfect it after it's been proven to be useful and popular. I can see why someone with a craftsman's mind would hate this. I feel a sort of disgust with myself when I ship shitty code, but ultimately I know it's what makes me so productive and valuable to my employers. This disconnect is real, and it's worth talking about.


It's not so much that software is "cheap" (it's not, software is notoriously expensive) but that it's incrementally improvable.

If I build a house with a bad frame, it's really hard to make it better over time. If I build a quick MVP, I can easily incrementally improve it.


Today's "quick MVP we can incrementally improve" is tomorrow's "unmaintainable legacy codebase."

But sure, it'll be different this time.


Legacy codebases make money. The engineer anxiety about them is myopic and ignorant of business realities.

If you can code something quickly and well enough that it doesn't immediately collapse under its own weight, you have succeeded. The fact that a codebase has existed long enough to become "legacy" means it did a good enough job to stay alive.


The engineer anxiety about them is myopic and ignorant of business realities.

I don't think that's fair to a large number of engineers. We know that code gets loaded with technical debt and we know that we can't spend time fixing it because of "business realities". That doesn't mean it isn't a problem for us though. Anyone whose had to maintain a codebase that's years old and riddled with undocumented and untested "features" suffers for it. Old code is a source of stress and anxiety. It might make money, but that isn't a reason to think it's not an issue.


Can you name a single trade where that's not also true? Keeping any mechanical thing running for years takes a lot of monkey-patching and duct tape. Technical debt in software engineering is not the exception. It's typical.

> The engineer anxiety about them is myopic and ignorant of business realities.

Far from. The worry is not "this code is old." Plenty of old code (especially boring old code) is cranking along just fine.

The worry is that if an old, abstruse system stops working or has a critical security bug, there's a real risk that nobody will be able to put the fire out.


> If you can code something quickly and well enough that it doesn't immediately collapse under its own weight, you have succeeded.

Well, yeah, for the first version. But when is the first version also the last one? Not in many good situations. Crap that doesn't immediately collapse under its own weight will probably immediately collapse as soon as you add more weight to it in version 2.

A lack of anxiety about the structure of the product is myopic and ignorant of engineering realities. There's got to be a balance. Too little anxiety, and you lose customers to competitors that spent more time to build a quality product, structured so that it's easier to grow. Too much anxiety, and you're in a "perfect is the enemy of good" situation, and you'll lose customers to competitors that were able to iterate faster and with a proper balance.


If I build a quick MVP, I can easily incrementally improve it.

But you won't. Even if you want to, the client won't pay you to because all the client sees a working solution, so you never get the chance to.

That's the problem the author is highlighting.


Sure I will. Most products have continual work done on them.

Code "quality" (whatever bullshit metric you use for that) is not the only metric of improvement. In fact, it's probably the least important metric to optimize over time.


Most products have continual work done on them.

Usually that's new features and bug fixes. It's very rare to find a client who'll happily pay for refactoring. If you're in a job where you get time for that you should consider yourself very lucky indeed.

EDIT: For what it's worth, I agree with your point about code quality. What's 'beautiful' now is only 'perfect' in the frame of the current feature set. It might be horrible if the next feature that comes along changes things dramatically. I'm very much of the opinion that "good is better than perfect", just with the addendum that the code at least has to be good. Bad code is just bad.


"Just ship it, we can iron out the bugs later" - later never comes because that cycle repeats ad nauseam.

Where your analogy starts to break down is that it is increasingly hard to find those top quality craftsfolk as many people aren't willing to pay the prices they command and instead go to cheaper labor who don't do as great of a job.

I'll have to disagree. I used to be a carpenter and the objective is definitely not to be perfect. Building anything, houses or apps, the objective is to work within tolerances. The modern system of 2x4 framing and drywall allows those tolerances to be very loose without affecting the end product, but I digress. Would you prefer a half-finished house with perfectly cut studs (that you can't see inside the drywall), or a completed house that has looser tolerances but has passed inspection?

Even in those fields that people imagine involve a lot of perfection, like watercolors or fine Japanese carpentry, the perfection is not arrived at by agonizing over details and overworking the piece. The perfection comes from the muscle memory of someone who has done it many times. App development should be the same way.

This economy of effort is intrinsic to any craft and is part of being a good craftsperson. I used to have an attitude similar to the author, a mixture of derision and envy towards those who were able to ship. She needs to learn that if she does not abandon this counterproductive mental handicap, she will never be a good craftsperson, in software or anything else.


Thank you for sharing your thoughts here, this is so well put and I completely second this.

I find the beauty of code is not in adhering to someones concept of elegantly written code, that only the coders see, but in the fact that it's living, and that over time your solution can evolve to become better than its intended purpose. Something observed to be perfect usually has a past that is often overlooked.


There's a huge difference in economics. A house will be used, so looser tolerances in carpentry are not obviously good and are seen by many as a bad trend. Sure, you may not die from those lower tolerances, but you'll likely regret it. See for example http://www.mcmansionhell.com/post/150597521816/mcmansions-10...

The median house will be used for decades, the median software is used for months (maybe days, or even minutes). This is really what my point is.


I don't think the median software is used for months. I don't think that's true at all. That really needs some evidence behind it.

I reckon in most companies, software is written and maintained until the whole system it's a part of becomes obsolete. That typically takes years, sometimes decades if the system is really useful.

It's really risky to rewrite software, so it typically isn't done; it's similar with deletion of code. Most people shy away from it because they're making local changes and don't have enough global knowledge to be brave. So the code lives on.

Personally, in my professional career, nothing I've written has yet been retired or end of lifed, and I've been doing it for 15 years. Some things were experimental and never got released; some things were maintenance for a subsystem that got buried away; but no whole feature nor whole product has been discarded other than by gradual overwriting through maintenance.


>> the median software is used for months (maybe days, or even minutes).

This may be true for trivial web apps, but line-of-business software is often used for years, sometimes decades.


That's an interesting point. But there's a big difference. Carpentry don't fall over much - at least not unless it's pushed beyond reasonable tolerances by outside forces.

Software falls over all the time, often in very avoidable ways that give the impression of simple laziness and/or incompetence.

E.g. Why do I need to use Safari to log into my bank account? I bank with a household name bank in the UK, but they've failed to make their web portal work with Chrome.

Why does iTunes let me set up a new iPad, but at the end of the process I get a choice between two buttons labelled "Sync" and "Done" - and I still have no idea what either is supposed to do, because sometimes I get a message about syncing to an old backup, or something, and the whole process is utterly counterintuitive.

Why can't operating systems handle paths with spaces or unicode with a standard convention for quoting that ensures consistency? It's 2016, not 1966, and this shouldn't even be a problem. But it is, for a lot of languages and operating systems.

And so on. IMO the author is right. We have a "dog ate my homework" industry made of quick superficial hacks bodged together, when we should have an industry built on solidly professional standards, conventions, and expectations.

Yes, the hacks ship. But if they don't work, how is that a success?

The attitude is built into the culture, and it shouldn't be. It should be impossible for anyone to become a professional dev without some lectures or lessons in domain analysis that forces them to confront a fundamental lesson - the problem is always harder and more complicated than you think it is.

A talent for cute math and logic problems is not the same thing as being able to dive into a novel domain, extract the essential elements, design a workable architecture to represent the elements, and then iterate towards a robust solution that can survive contact with users.


Not really the same thing though. A low cost house still has to function and is enabled by the use of modern fabrication techniques and things like power tools. Just like you can build less refined web applications with frameworks and cloud services. If the walls crack, the paint chips, wiring starts a fire and the drywall wasn't fire resistant that would be considered bad craftsmanship and you'll probably be liable for a fair amount. In modern software development the equivalent is common place.

I think the attitude of doing less things better is quite common among successful software developers. It's just hard these days to have a good experience while getting to a level where these values matter.


I'd rather give a completely different explanation.

Building 90% of a software is easy, getting to 100% is insanely difficult.

Building 90% of a construction/hardware/car/... is hard, the final bits are easy.


No, the last 10% of completing the house, car, machine, or meal preparation is still the most difficult, just like in software.

Finishing always requires more attention to detail, and a tougher sense of good-enough than the first 90%.


" A good carpenter wants to build a solid house even if no one will ever see its frame. Ditto to an auto engineer at BMW, or a hardware engineer at Apple, or a mechanical engineer at Boeing. Why do software engineers break this mold? "

They don't, but a good carpenter is not going to try to figure out how to make every single wall perfectly 90 degrees, etc. He's going to take a level, see if the thing is in a center for a given stud, make that work, and then move on.

They never perfect the end result. None of the walls in your house are likely perfectly square and plumb They also use imperfect building materials, and so they know that a year from now, even if it was square, it wouldn't be anymore.

Carpenters, more than anyone, are true believers in "good enough". I'd argue most of your other examples are the same.

That said, the problem she complains about is real. She is, in essence, a programmer from 30-40 years ago.

When you had to share time on computers, and your software broke, you didn't just poke it repeatedly until it worked, because you couldn't. Instead, you sat on a mountain and meditated upon your code, until you understood it well enough to fix the problem and try again.

In that sense, the thing that has really changed is not the cost, it's the speed at which you can throw shit at the wall.

Development is so fast nowadays that programmers don't stop to think about the real underlying problem, they just want to make the compiler shut up or the program keep going.

They just want to solve whatever their immediate problem is.

The cost incentive was always there. People always wanted good software as fast as it could be built. It was the speed of being able to build it that made people concerned with quality.

Now that they can essentially build it at light speed, nobody cares, because it's only how it seems to work that matters.

IE doing things the wrong way to achieve the result people want is fine, even if it causes longer term problems.

You can see this in pretty much any long-running (IE 15+ year) open source project.


Instead, you sat on a mountain and meditated upon your code, until you understood it well enough to fix the problem and try again.

:)


And it was the most productive time of your life. Never, at any point in your meditation or mountain ascension, did you introduce a single bug or provoked any issue to any user =)

And the snow-white sheet of paper did remain pure and chaste for ever -- pure and chaste -- and empty.

Successful SaaS software have the property to accumulate more cash for every minute they're online & working, they can do pure and chaste AND profitable. That's where the difference between software and the snow white stops :p

Even though you are being sarcastic, certainly you realize things like defensive programming were much more heavily used in such environments.

So yeah, it was entirely possible they didn't introduce more bugs.

Now people just expect to crash often and make it up in volume.

They can of course, which is precisely the problem the original author has: in a ton of contexts, fast and able to hack up things is more sellable than understanding problems.

(and FWIW, i actually haven't thought hard enough about it to have an opinion whether the current status is better or worse, i'm just explaining why it's not necessarily about cost to develop).


I think it's mainly because software engineering is still more an art than a science.

Although we may have formal engineering education, most of us end up making business logic where there are few rules on how to do it. You can't compare it with building a bridge, which has a strict mathematical workflow.


I think it's mainly because software engineering is still more an art than a science.

The use of the word "still" here implies that it will be, or that it should be, more "science" than "art". As an act of creation and navigating ever changing constraints, I think it is more art, and will have art be a major component of it for a long time, if not forever.


I would posit that's the main difference between a craftsman and an engineer. A craftsman pours his heart and soul into his work and aims for perfection. An engineer, on the other hand, has to work within certain constraints, such as time and budget.

Of course, the definition of "perfect" is different for everyone. The point is that craftsmen can wait until they're fully satisfied with what they are working on before releasing it. Engineers don't have that luxury.


The lament that software engineering is not real engineering because we eschew formal methods is one I've heard a lot (not from you), but in those fields testing and failure are very, very expensive.

In places where failures are expensive, such as high volume websites, we use techniques such as A/B testing to limit the scope of expense of failures and detect them earlier.

In cases where failure is truly unacceptable we take more drastic measures such as formal verification, restricting programmer freedom through coding standards, etc.

Even he dramatic story about having a wrong number read out on NPR you'll notice she is the one punishing herself; no-one really admonishes her, there are no negative repercussions. As economic pressures have increased in journalism, this attitude that everything must be fact checked has fallen by the wayside since it is not economically viable any more. This economic pressure coincides with mass adoption of the internet though, and the real cause may not just be their declining ad revenue, but the increased competition between news outlets to be first, since that's what drives clicks.

The saying that the perfect is the enemy of the good exists for a reason.


This piece really frustrates me because it pretends to be neutral, but actually has a very clear viewpoint of denigrating experimentation. It's very clear that she actually thinks tech (not her) should change.

I hope nobody quits tech, and certainly not because they are frustrated that the tech industry chronically celebrates solving problems we don't understand.

This was great, and well written. As the phenomenon of software and technology expands to encompass all of human activity (and thus all humans), it's also going to bring in diverse mindsets, experiences and approaches.

This is a good thing.

When I was young, tech really only existed in the hearts and minds of a very small, self-selected, few. Most of us had similar or common viewpoints and experiences. It was very easy to go someplace new, find the local group of nerds, exchange a few Star Trek quotes to prove your bona fides, and you'd be in.

But we, and the technology that came from us, was limited to what we could produce given the limited set of experiences and modes of thinking we brought to the table. But we also couldn't see this limitation, because our work was a reflection of all that we could think.

What's happened in the intervening decades is that our technology, the kind that we literally grew up imagineering, while important, has become a minority of what humanity needs technology to do for it.

Even today, the fact that somebody from a non-tech background can go take classes to learn to code, and make a successful business, or have a successful career with that knowledge feels vaguely alien to those of us from the early years.

I've come to the conclusion that the notions I had as a child about what technology was and how it was in my blood, were incredibly wrong. The world of technology is immense - bigger than just software, or hardware. Writing is technology, cheese is technology, sewing is technology... As this enlightenment continues to unroll in my mind, I'm not even sure I know how to latch a definition onto the word that doesn't ring hollow, but it seems vaguely associated with anything that uses our minds to make the human condition better.

The author above, she does belong in technology, it's our insistence on trying to limit the meaning of tech to the kind of tiny world I grew up in, that has convinced her that she doesn't belong. Yes, she doesn't belong in that microcosm of early tech. She belongs in the macrocosm of human betterment.


Not sure why it had to be prefaced with "white man" talk. Majority (all?) people in software development, who are doing it because they like it, hate to do half-ass job. Yes, even some silly-simple web widget most (all?) want to be perfect. So this has nothing to do with "feelings", being a woman or being non-white.

Trying to deliver perfect product is good in vacuum, but not so in real world. For real world perfect product is not the same as perfect product in vacuum. It takes time to truly understand, but OP, just like all other devs, will get it eventually.


Most people that complain about shipping the imperfect solution are not aware how inefficient is striving for perfection in the software world. Personally, I have never seen rumination on every nook-and-corner of the product yielding something fruitful. In fact, it invariably results in the opposite — solving the wrong problems and then, solving the real problems that you never thought would've existed. Rinse. Repeat.

The author equates imperfection to sloppiness but I'd argue that the case is quite the opposite. I recall a comment made by Paul Buchheit on Hacker News about FriendFeed —

"Another interesting detail is that this is roughly the 4th iteration on the FriendFeed backend since we launched 17 months ago. If you look at the the graphs at the bottom of Bret's post, you can see that our previous system was about to die -- average pageview latency had increased from about 135ms to 260ms in less than a month! (not a good trend) This new design also accommodates some important upcoming features that would have been problematic in the old system.

This experience reinforces my belief that it's better to be quick than brilliant. If we had wasted a lot of time trying to build some really smart, super-scalable system right from the start, it would have inevitably been over-optimized for the wrong things, since the product and requirements have changed quite a bit since launch."


Perfection is the opposite extreme from minimum viable product.

There could be a "happy medium" where a ship schedule incorporates a reasonable level of quality in v1. Minimum viable is too often implemented as ship as fast as possible, and viable gets perverted into first post release patch.


Objection! Perfection is the ultimate minimum viable product, as mandated by the condition to achieve it.

   (12) Perfection has been reached not when there is nothing left 
        to add, but when there is nothing left to take away.
https://tools.ietf.org/html/rfc1925

I don't understand, don't you obviously want both conditions? Isn't that a far better definition for minimalism?

Given objectives, constraints, and means, the most fit set of solutions are the "perfect" ones.


> Sometimes he says wrong things, and then I have to explain why those things are wrong

>please sit tight while I take a moment to roll my eyes

>You failed fast and broke my heart.

>Maybe I will change

It's hard to learn if you never accept that you're wrong. Admitting defeat is not accepting you're wrong.


This post is horribly verbose. It constantly brings gender and race into it, then disavows it a couple paragraphs later.

This is a textbook definition of a first world problem. Don't like tech? Don't do it. Nobody has a gun to your head. The worst part is having a job, "hating" it, and spewing your hatred of it across your social circles. That does nobody any good. You're not a slave. Either you dislike not having money more than imperfect tech, or I guess you're going to be doing your job for the foreseeable future.

The worst thing is expecting the world to change according to your ideas of what the "right" thing to do i.


> Don't like tech? Don't do it.

Alternatively: love tech but don't like how it's built and the incentives in the industry? Try to change things for the better.

Your way, nothing ever improves. Her way, things might get a little better for some people. At the very least, there's a benefit to highlighting the issue and generating some conversation.


> Try to change things for the better.

Change arises closest to home. Instead of setting up straw men to knock down on the internet, why not quietly work to change your own work environment? I'm working on a Node.js code base I'm not particularly enthused by, but I'm trying to make it better by pointing things out and speaking up about inefficiencies or unprofessional coding practices.

> At the very least, there's a benefit to highlighting the issue and generating conversation.

That is completely false. The issue she's highlighting is that she doesn't like the way reality is, and that reality should change. That's not going to happen, especially with that attitude. The only conversation this should generate is "Ok, we all have things we have to deal with. Stop complaining and make smaller, local changes rather than dumping your feelings all over the internet in elaborate prose. That is worse than useless, it actively advocates against your cause. Who would want to be on your side when all you do is complain illogically?"


Sounds more like she values all the startup culture over proper engineering values. "Lean methodology", “fail fast and break things,” Javascript would point in that direction. Pretty sure other areas of tech would value good engineering over those things.

I apologize if you assumed this was a story about a difference rooted in race and gender, because it is not. That’s not where we are going.

That's not an apology.

You deliberately manipulated your audience by playing on their fears of being deemed discriminatory, their anxiety over real ethnic tensions, and perhaps most egregiously, you intentionally encouraged gender stereotyping of women for your own purpose of obtaining attention.

If this story really wasn't about race or gender, why start your first paragraph with a, quite frankly, racially charged masculophobic non sequitur?

-----------

EDIT: Watching this comment see-saw in karma has been very interesting. I seem to have successfully offended both the alt. Right and the alt. Left, so I must be doing something right.


Writing is art too my friend. Why feel so insulted?

Art often deliberately insults to get a reaction. Which is a valid thing to do, if you are making great Art.

Of course, then people feel insulted, people groups feel targeted, etc. and they then respond. This person has responded, and neither insulted nor denigrated the author - they have merely criticised them. If the author wishes to write like they do, then mild criticism shouldn't be unexpected!


Race wasn't the focus of the story, but it was an element of the prelude to it. My understanding of the purpose of that paragraph was to underscore that it wouldn't come up again. And frankly, if you break out in hives at the briefest mention of race especially when you're specifically asked not to pay attention to it I don't think that's a failing on the part of the author.

Pretending omission in order to emphasize something is a core element of classical rhetoric dating back as far as ancient Athens. It is a parlor trick that has been taught to children for two millennia, and an inherently flawed line of argument.

If you punched someone in the face, and then specifically asked her not to pay attention to it, would you be shocked if she failed to carry on as if nothing had happened?

When someone falsely deems you, your family, and your children bigots by mere virtue of the color of their skin and the shape of their genitals, that is not any less radically offensive due to the author's own race and gender. This type of casual discrimination cheapens the experience of racism, engrains the very cultural atrocities it claims to combat, and alienates the very people who's minds we need to change.

To raise racial specters for personal gain and social gratification is extremely troubling, and I will not hesitate to speak out against it.


Where did the author deem anyone a bigot? Your pattern matching algorithm has severe bugs if it identifies this post as deeming families as bigots.

This piece literally begins with a person screaming a racial insult in the middle of Broadway.

No logical person would conclude that outburst was free of gender or racial bias.


"I'm not a white man" is not a racial insult. You need to connect a few more dots for us.

My goodness, I didn't realize there were so many Black Friday sales on self-righteous indignation. Giving it out for Christmahannukwanzakah, are we?

Personally I felt quite a bit of sympathy for the author. Some of us are builders. Some of us are growers. Some of us are finishers. Unfortunately the former two often unintentionally conspire to make life difficult for the latter, whether by poor architecture, bad code, or simple lack of prioritization. That is what the author spoke to (at least, that was my takeaway) and that was what the headline lead to. Her stops along the way at the gender and racial discrimination questions were also relevant, but not where the story ends.


It is never right to attribute negative characteristics to an entire race or gender. Anyone who does so under any circumstances will find me speaking in opposition.

--------------

EDIT in Reply:

1. Your comment is, however unintentionally, quite interesting.

Never have I seen someone so self-righteously accuse another of self-righteousness. The closest analogy I can devise is an infinite regression of ignorance, a perfectly formed fractal of feces. Maintaining that level of willful lack of self-awareness must be exhausting.

My goodness.

2. Overt racism is a heuristic I use to determine whether to take a person's other viewpoints seriously. This article did not pass that test.


That hasn't happened here, so your opposition is, itself, raising spectres.

The writing is starkly clear. The piece is also listed above, so I am confident the other readers can reach their own conclusions. Secondly, if any spectres be raised, so be it.

Scorn is a badge of honor if earned when speaking the truth.


But receiving scorn is no evidence of speaking the truth. A death spiral looms from this confusion.

> Never have I seen someone so self-righteously accuse another of self-righteousness.

Either you don't hang around HN much or you're just prone to hyperbole.

> Overt racism is a heuristic I use to determine whether to take a person's other viewpoints seriously

I'm curious whether it was the tacit acknowledgement of the dominance of white males in technology or some other device in the writing which triggers this reflex for you. If the former, that's a pretty low bar for that, and of course a totally disingenuous accusation.


1. Both.

2. The "dominant" vs. oppressed false diachotamy gives you away as an ideologue with whom I cannot have a productive discussion. At one time or another we are all the oppressed and we are all the dominant.

This ridiculous caste system isn't some static hierarchy that was ordained by God or an inevitability of our history. Race, class, and gender are societal constructions which must be actively sustained to survive. Yet you insist on utilizing the very same categories drawn by racists, which only reinforces the persistence of hierarchy you claim to despise.

Finally, dismissing every contrary argument by attributing identity-based motives to your opponent is facile. Categorizing all those who disagree with you as stooges of some eternal shadowy "dominant" cabal is the exact type of unscientific babble that constitutes every conspiracy theory.

Most importantly, it is also a very convenient way to turn every argument into an ad hominem based on the race/gender of the speaker.

This is what happened:

I read a post written by someone who broadly stereotyped millions of people in a racial and gendered fashion, and I raised an objection. It was very simple.

The question is, why are you so desperate to make this about "white male dominance"? This is about what the author stated.

Is it because you realize your vacuous arguments cannot stand on their own merits, or because you are too insecure to confront the intellectually arid world view which you clutch like a safety blanket? Or do you merely think that the "dominant" persons (as determined by you) simply have no right to a voice at all?


>> You deliberately manipulated your audience by playing on their fears of being deemed discriminatory, their anxiety over real ethnic tensions, and perhaps most egregiously, you intentionally encouraged gender stereotyping of women for your own purpose of obtaining attention.

> The question is, why are you so desperate to make this about "white male dominance"? This is about what the author stated.

You were the one who came out of the gate gunning for that argument. The author merely referenced her own early misgivings about her place in the industry, which were (and remain) entirely valid, especially considering the piece was about her own experience.

Using a lot of words to say the same thing repetitively doesn't make your argument any stronger. It just makes it a little harder to parse.


My position is stated. I only debate in good faith.

>Her stops along the way at the gender and racial discrimination questions were also relevant

They were not relevant at all to the topic. I don't think it would be a stretch to say that her purpose of including gender and race would be to attract more eyeballs.


found it pretty toxic and regressive when she talked about explaining stuff to her boyfriend likes he's 5. idk if i'll ever be able to relate to all the emotional stuff she talked about.

"I offended everyone" is not defacto evidence that you're doing something right.

"You have enemies? Good. That means you've stood up for something, sometime in your life."

It's a very common political quip. The usual attribution of the original version is to Churchill, with the specific phrasing I used reappearing in various contexts in the United States for the last fifty-odd years.


This was way too long for me to read. I wish she would just get to the damn point instead of going into pointless details about her feelings, etc.

Most of the things mentioned annoy me too and I've been doing this for going on 20 years now. Perhaps move into a different industry that uses tech but is not tech. Some companies appreciate 10+ year code. (Code you write that you expect to last 10+ years).

Churn and burn code fits SV right now. VC's invest in hundreds of companies expecting only a few to make good money. It makes sense to only build enough product that proves the business model / concept. If the business model is bad, it's better to have paid less to build it than spend more for solid code. Solid code costs time and money.

Traditional companies that use tech want a product build well that has low maintenance costs and will last them 10+ years. They are more willing to build a tight application rather than a loose one because their business model is already proven.


Reminds me of Ira Glass's Quote.

http://www.goodreads.com/quotes/309485-nobody-tells-this-to-...

And for a different perspective. This was posted 5 days ago.

https://neilonsoftware.com/books/personality-patterns-of-pro...


Tl;dr: researcher discovers they're a researcher not an engineer.

Perfectionists rarely finish, but when they do, it's usually everything they wanted and more than you expected.

I can't be a perfectionist in anything.

More than perfectionists, though, I like those who focus on building that one product, writing that one book, solving that one math problem over years. That is people who are dedicated to a problem and have removed Time from the equation.


This level of attention to detail, perfection, and craftsmanship is found largely at bigger companies with more to lose with their products. Automakers, manufacturing, aerospace. When I worked at GM, this sort of thinking was necessary at every step. Perfection and correctness was written into every process.

Also, about 40% of the engineers in my group were female (active safety/autonomous vehicles. We solved awesome problems, but moved slowly to do it right. Maybe the author should look at companies whose markets demand less iteration and more safety.

"You get there first, making waves while I sit in last place and watch." There are companies out there that do not subscribe to this thinking!


>> Perfection and correctness was written into every process.

you say that but the industries you mentioned have some of the worst code possible.


I agree on their code quality/their coding practices are bad, but that doesn't matter for this context. They (GM) are not software companies, so they don't set out to write amazing, clean, modular code.

This isn't about writing great code, it's about the culture surrounding release.


I used to work in healthcare and banking. Failing fast isn't encouraged in either.

The problem with fields where perfectionism is expected is that everyone knows you arent going to do a perfect job.

So you end up having 50482772 code reviews with 30 people pouring over every single semicolon, that is also very frustrating.

Maybe the author should get out of web/mobile development, but I'll take some dipshitty code that I know I can fix over highly micromanaged perfectionism any day.


Echoing the sentiments of others here, it looks like she's been in startup world for the past few years, maybe she should try working with different types of companies for a while.

I agree. As someone with wrong gender, I strugle to find good job in tech. With right gender my chances would be twice better.

Sure it seems a little unfair that women get an advantage, but they are only a small percentage of the workforce.

So if everyone was equal your chances wouldn't be twice as good - only about 5% better. That's a more reasonable view.


sad that these people focus on complaining about women getting jobs when they could just focus on being better than the worst man with a job. reason they don't have one isn't because women took their spot but because they're worse than the 90 pct chunk that are men that got the job

If you come across in real life the way you do in your posts, I wouldn't want to hire you either.

And if I were to make a decision based on HN comments, I'd hire @thro32, no joke. I've read all the comments and their author makes an impression of an interesting person with a broad outlook.

He's a self-described MRA, that's not compatible with any kind of healthy workplace culture.

There is a joke that every hardcore feminist becomes MRA once her son/husband gets into trouble ;-)

No matter what you're replying to, this isn't the kind of comment we need on HN. You know this! So please don't.

We've already asked you to please not introduce flamewar topics like this, so we've banned the account. We're happy to unban accounts if you email us at hn@ycombinator.com and we believe you'll post within the guidelines in the future.

We detached this subthread from https://news.ycombinator.com/item?id=13044957 and marked it off-topic.


But you left parent comment which was 'offended' over disclaimer. I am done with HN community. Enjoy your bigotry.

The authors espousing of deep problem understanding sound like it would be more at home in a PhD program / academia. Also, sometimes it's possible people just "pick wrong" in the sense that they don't or can't think far enough ahead to realize where their best fit will be professionally. Wouldn't be surprised if that's what's going here. For example, I'm pretty sure, in hindsight, my best fit would be as a psychiatrist / psychologist but I'm too far down the path as an engineer to really want to change course. Instead I've channeled my strengths and leanings by working in ML and user-centered design as much as possible. That helps but never fully makes my fish out of water feelings go away. I have much more of the "feeling" predisposition than the overwhelming "thinking" predisposition of eng teams I've always worked on. Earlier on I felt like this oppressed (in terms of values) minority but once I learned about innate personality type distributions I was able to stop taking it so personally and in fact use it to my advantage by taking on roles where my differences were in fact strengths (being the guy who made sure the UI didn't feel like dogshit, thinking through how to personalize our shopping predictions, etc.).

Anyone else bothered by her phrasing of "he’s trying to be helpful" followed by "Bless his little heart"? Why would anyone publicly address their SO in such a patronizing way? This just bothered me more than it should.

Also "Sometimes he says wrong things, and then I have to explain why those things are wrong.."

Sounds more like she just lectures him rather than having actual conversations.


yeah and what does that have to do with the article at all? not sure why she included it. imagine if a man said that stuff about a woman. i'd hear sexism and mansplaining nonstop.

You're right: it bothered you more than it should. We should leave strangers to their own relationships; they're not for us to litigate.

I was forced to look beyond those comments to try to understand the substance of the article. It bothered me, too. In fact, the author makes some great points, but ultimately I found that if you remove the emotion from this article it led to someone complaining they want to do things the right way, the first time. That's admirable, but the attitude behind it is that nobody in tech does this and the author is incredibly badly misunderstood by everyone in IT.

That annoyed me in The Fountainhead, and it bothers me in this prose also.

I think there is a big difference between being bothered by someone's comments and litigating them :-)


I think this is her problem --- I imagine she thinks she is always right, and when her team decided to make the project way A which was probably faster and easier to do than her way B, she got upset and wrote this article to 'correct' the tech industry

Write the friggin tests is what she means to say.

Not belonging? Not at all. When I read that article, I see a kindred spirit who belongs doing either systems programming or maintenance programming. In the right place at the right time, that very mindset is worth a lot of money. I for one have made a career out of fixing awful code and awful systems.

Publicly, we praise companies and programmers that get a lot done very quickly. Do what doesn't scale. Move fast and break things. Those are great ideas for a while. But eventually, following that alone harms a company, and might even kill it. The quest for speed needs a whole set of people that are capable of keeping bad systems running and improve their stability and scalability while they keep going.

For instance, I currently work at Stripe, making a core piece of infrastructure that doesn't scale anywhere near as well as we need, and has been plagued with downtime issues. There's been plenty of attempts to rebuild and replace, which never had any success, but this year, we've had tremendous improvements, which are seen by our users every day. This improvements aren't really about someone getting lucky and rebuilding from scratch again. Instead, we spent time adding observability features, and understanding how the system works in practice: Pain points, causes for errors and all that. Only after we had a good understanding of the major problems we started making architectural changes to improve the system: Build better interfaces across components, then replacing the components that needed the most help. After enough time, Theseus's ship might still have the same name, but it is a far better ship than it ever was. Then other systems will need more help, and I'll move on to work on another fire.

There are companies out there that don't value this kind of skillset, and that's fine: They are either too small to need it, or they will be unable to keep building new things and fail. Instead, look for growing companies that realize that they can't just hire commandos, and need people to focus on lowering risks and maintenance costs.

You don't just belong in tech: You are a key part of tech, you just have to realize what your spot is.


If you have the opinion of "This wasn’t going to work. Coding wasn’t going to work. I didn’t belong" before you even start learning a new skill, of course you're going to go through your career with that new skill believing you don't belong.

It honestly sounds like the poster really needs to invest in some self improvement before diving back into a career. If you want to succeed, go in with the expectation that you will succeed. Do whatever it takes to succeed. Don't start with an expectation of failure and expect everyone around you to change your mind.


This post is not about perfection, but rather about a deep, legitimate frustration that the tech community spends so little time really understanding the problems it sets out to solve.

Here's a key paragraph:

> I am not solution-oriented. I don’t see a problem and get giddy at the idea of solving it, patching it up and sending it on its merry way. I want to poke it and ask it questions. Where did it come from, what is it doing, what’s its story? I want to take it to tea and hear about its life and understand it to its core. And if, at that point, I’ve come to a wholistic understanding and am able to solve the problem, by all means, let the problem-solving commence! But my instinct is never to solve, but to understand.

This is not a statement of perfectionism, but rather a deep yearning for like-minded people who believe in trying to understand the problems they're trying to solve.

The RFC process, which has gained more prominence through projects like Ember, Rust, Swift, and Yarn, operate on the same principle: that we should try to make sure we understand, not just rush in with the first solution that comes to mind.

Iteration and contact with reality are important. A desire to understand is not in conflict with a desire to iterate and work with communities. But too often, the tech community makes a virtue out of moving fast, breaking things, and never coming to a deep understanding even in many of the most successful cases.

I think we owe it to ourselves and our community to get past a knee-jerk reaction to this post.


I was just about to say how weird it was that almost all of the projects you named were worked on by Yehuda Katz and then I noticed who posted it...

'I'm not a white male!'

Seriously? This felt incredibly out of place in the article, it seems like its just pandering for clicks (lets talk about how women, minorities, and 'non-tech' people don't have a place in tech for the millionth time!). Not to mention the quote could have worked similarly with 'asian male' and 'indian male'. Why are you erasing the identities of other overrepresented people in tech?


Because otherwise the article has no substance. Better write a couple of preposterous lines and then back off and turn the subject to something completely different. I know exactly why a person who writes like that does not belong in tech. Imagine code written like that. Just the imagination is the pure horror.

>Because otherwise the article has no substance.

Not true. And trust me, I hate substanceless articles as much as the next person. But once you get past the opening, the article is about mindsets, which are much more interesting.

>Imagine code written like that. Just the imagination is the pure horror.

People don't write code the way they write prose. If they did, Steve Yegge and Yossi Kreinin would have been fired years ago (what makes for good prose doesn't make for good code).


I think about problem solving and code a lot like the author. But I don't think that means she and I don't belong in tech. I think that means we don't belong in the get-rich-quick scheme that is the present tech startup industry. Or put another way: we belong just fine in tech; we don't belong in business.

It's not tech that says "move fast and break things", it's business. Business is the reason the Internet of Things is full of insecure products. Business is the reason for Web pages made unusable by popovers and ads and unnecessarily paginated articles. Business is the reason for keeping massive databases on users. Behind every problem in tech is an MBA trying to make a profit.

And that's the irony: tech people suffer for the problems business causes, but tech people don't profit from those problems. Sure, tech salaries are good, but those who determine those salaries unsurprisingly pay themselves more. We don't get the satisfaction from making a solid product and we don't get the profit from making a shitty product.

I think the key to being happy in tech is to break that cycle. Either builds things that make you joy (CRUD web apps bring no one joy), or build things that make you money (not salary money, but owner money). Don't settle for building someone else's dream and giving them the profits.


"CRUD web apps bring no one joy"?

If you aren't bored of writing CRUD apps, you haven't worked as a Web developer very long.

Interesting. Here my 2 cents.

Most software that i've worked on is terrible. It's terrible because software engineers by nature are 'technology muddlers'. They know how to program but have little insight into the world around them. By this I mean that there is very little in the way of 'deep understanding' by the guy fixing the problem.

Image I gave you a hammer and a box of nails and I told you to build a house. "Sure thing", you say. What sort of house am I going to get? A shack? Sticks nailed together? Cardboard box? It totally depends on the guy with the hammer. What happens if I gave 6 people hammers and boxes of nails and asked for the same task? Would the product be any better?

Most software developers get away with crap as a delivery because the cost of failure is low. So there's no real incentive to 'do it right' or 'make it perfect'. In fact the opposite is true. There is a real cost of failure attached to understanding a problem and taking time to solve it correctly.

If I was given an hammer and nails and asked to build a house, I could put down the hammer and go away and become an architect. However, I'd never get the house built, or I'd realize that a hammer wasn't an appropriate tool for this task. Now that you have a deep understanding of the problem now you realize that the problem is not solvable without a large time and expense.

"But I've promised that delivery in 90 days", says your boss. You then explain how that, given a toolbox full of hammers and 200K nails, this project is going to end up as a large ball of mud.

In the end the 'business of software' is pragmatic. Do you as Cassandra, having knowledge of the future but no power to change it, fight the inevitable ball of mud? Or do you accept that yes, you will not be proud of this body of work, and dutifully search Stackoverflow.com for another mud layer to pat onto it?

Personally I'm also a perfectionist and like to understand the problem deeply. I've found that this is a hindrance as well as an asset. I think that if you find yourself in this situation, find someone that is the opposite to pair program with. That way you can balance out your own strengths and weaknesses.


I kinda get the feeling, the holistic understanding has always been a requirement for me, and peaked when systems grew either too big or too fluid (js fatigue).

It's hard to accept the sniper mentality where you try to find a target ASAP and remove it quickly. Instead of migrating the world smoothly.


> But that’s where the anger ended, in not being white or a man or coding since I was two or some combination of the three. This wasn’t going to work. Coding wasn’t going to work. I didn’t belong.

What's interesting is that white men, with no gender or racial bogeyman to hide behind, have created the term "imposter syndrome" to explain feelings that are almost universal in this field, and also very evident in this woman's essay. You don't belong. You don't think like them. Your mind is different. If only you programmed since you were 5 on your family's Amiga.

It's sad for me to see gender and race become the focus of her disappointment in her career. In a twisted way it puts even more distance between her and other engineers who invariably feel the same way but are trying to cope with it on their own.

Maybe she's worried they'll "say wrong things, and then I have to explain why those things are wrong" ...


Software, standard engineering (e.g., EE, Civil, Mechanical), and clinical medicine are fields in which in order to understand and learn requires an iterative process of attempting to understand, trying something out (coding and debugging, designing and trying out a hardware or a building or mechanical apparatus or attending to patients) and learning.

When it comes to these sorts of applied fields it is important to do both.


That wasn't the article I was expecting. Which is good. Because I was expecting the, "I am a woman in tech" article. You know the one. What I got instead was a very well written article about something that I can actually identify with.

And it's something that a lot of people in tech complain about. Maybe not your coworkers, or your boss, or your friends on the internet. But the people doing major work. People like Joe Armstrong and Alan Kay.

I don't know if you'll stay with tech. But if you stay, I'm confident you'll find people who think like you do. Eventually.


She was only a developer for 6 months. Sounds like an ad hominem, but it is relevant to weigh her longevity in the field when she criticizes the field.

This feels very INTP vs INTJ. Both are stereotypical engineers, but INTP typically values understanding the problem. INTJ is stereotypically more interested in leveraging just enough understanding. The world needs both. I'm not surprised that the ESTJ managers and such don't value the INTP style...

Why do I get the feeling that this person worked at a Web start-up for three weeks, then decided the entire tech industry was beneath them?

OP posits that industry developers have different values than hers; but how much is it that she's simply learning about the business side of things?

In other words, is her problem really with developer's values, or with business/operations/management?

I feel a bit like she's simplified it a bit by placing everyone in into a "Tech" category (vs her experiences with non-tech).

Are there not inter-company divisions, that are usually in opposition regarding these values (with developers, usually having the least leverage in the business, following business priorities)?


It basically sounds like she doesn't want to be a pigeon-holed implementation engineer in a fast paced silicon valley startup.

The traits she described can actually be quite valuable. She just need to find the right role. Or perhaps one day start her own company.


This might come down to being a goal oriented person versus a process oriented person.

I got a PhD in theoretical physics. By the end of graduate school I was really unmotivated. I decided to leave physics and do something else, as yet to be determined. In order to go through any of the job interviews through the university you had to first go to a career counsellor. I had absolutely zero expectations, but I of course did it anyway.

When I walked in, the first thing the career counsellor said to me was "You don't look like an academic." I looked like a football player in those days. He continued something to the effect, "Athletes are usually goal oriented people. They can put themselves through a lot of pain because they are interest in reaching an end. Academics are usually process oriented people. They enjoy working a problem and seeing all the angles of it and they are not driven by finishing it."

Granted, this is a generalization and does not apply to all academics or athletes. One of my professors Lenny Susskind, a famous physicist, is also an athletic guy.

I don't think this changed the way I did anything but it was very insightful. You can find problems with both types of people and at the same time they both have their values. For computer programming, particularly in a startup, being goal oriented is very helpful. Someone process oriented would probably be much happier doing something else.


Reading the first paragraph of that "article" I only can respond to the title saying: True.

She might well be happier in a different development environment. The link [1] is to a 1996 article that describes organizational aspects of Space Shuttle flight software development. The priorities were understanding and perfection, which may resonate with the OP. Shuttle is history, of course, but I'm sure there are similar mission-critical coding environments today.

[1] https://www.fastcompany.com/28121/they-write-right-stuff


I do not belong. My values are not valued.

Well, I can understand the feeling, but the industry needs more programmers like the author.


The writer complains about the tech industry and anticipates any replies. Her tone is feisty. She cites general scenarios as proof, and by the end she is inconsolable. After years of experience, I think she is the kind of person who somehow attracts you to help her but who will stab you in the chest when you try.

It sounds like she has had a few experiences that wounded her deeply, and she has decided to protect herself by closing up. But I think her experience is limited. There are places you can work that let you craft great code. They typically are not in the tech industry as she defines it, "companies and professionals who view code as a core part of their business and their self-understanding, both internally and externally." And I'm not sure she will find a company that actually encourages good code, only one that gives her space to code how she wants --- not because they appreciate good code but because they don't understand it. Their programming team is a black box, and whatever estimate you give they have to just have to accept, like when your mechanic or your doctor tells you it will take such-and-such.

I would advise her to look for a job where tech is an ancillary part of the business, perhaps a programmer at a hospital, college, or niche-but-profitable industry. Or, as others here have suggested, working more on back end than web front end. No matter where, she still should ask lots and lots of questions of the company, preferably of the employees themselves if she can get a hold of them. There are pockets of good, but like anything in the world they are diamonds in the rough, and you have to do some digging to discover them.


Legal | privacy