News for hackers. Stuff that matters.
Re:I don’t belong in tech by rm999 on Saturday November 26, 2016 @12:35PM (#13044820)
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.

Re:I don’t belong in tech by woah on Saturday November 26, 2016 @12:52PM (#13044922)
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.

Re:I don’t belong in tech by TheOtherHobbes on Saturday November 26, 2016 @03:10PM (#13045592)
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.

Re:I don’t belong in tech by rm999 on Saturday November 26, 2016 @01:08PM (#13045018)
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.

Re:I don’t belong in tech by barrkel on Saturday November 26, 2016 @01:28PM (#13045132)
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.

Re:I don’t belong in tech by enraged_camel on Saturday November 26, 2016 @01:50PM (#13045247)
>> 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.

Re:I don’t belong in tech by carsie on Saturday November 26, 2016 @01:06PM (#13045000)
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.

Re:I don’t belong in tech by fram on Saturday November 26, 2016 @03:41PM (#13045735)
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.

Re:I don’t belong in tech by DannyBee on Saturday November 26, 2016 @01:02PM (#13044979)
" 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.

Re:I don’t belong in tech by rokhayakebe on Saturday November 26, 2016 @01:09PM (#13045021)
Instead, you sat on a mountain and meditated upon your code, until you understood it well enough to fix the problem and try again.

:)

Re:I don’t belong in tech by user5994461 on Saturday November 26, 2016 @01:22PM (#13045096)
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 =)
Re:I don’t belong in tech by DannyBee on Sunday November 27, 2016 @11:37PM (#13053432)
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).

Re:I don’t belong in tech by matt_wulfeck on Saturday November 26, 2016 @02:08PM (#13045335)
And the snow-white sheet of paper did remain pure and chaste for ever -- pure and chaste -- and empty.
Re:I don’t belong in tech by user5994461 on Saturday November 26, 2016 @03:01PM (#13045561)
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
Re:I don’t belong in tech by jghn on Saturday November 26, 2016 @12:41PM (#13044858)
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.
Re:I don’t belong in tech by Eridrus on Saturday November 26, 2016 @03:55PM (#13045799)
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.

Re:I don’t belong in tech by kabes on Saturday November 26, 2016 @01:07PM (#13045005)
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.

Re:I don’t belong in tech by thwarted on Saturday November 26, 2016 @06:12PM (#13046563)
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.

Re:I don’t belong in tech by user5994461 on Saturday November 26, 2016 @12:53PM (#13044925)
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.

Re:I don’t belong in tech by slowmovintarget on Saturday November 26, 2016 @02:49PM (#13045522)
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%.

Re:I don’t belong in tech by enraged_camel on Saturday November 26, 2016 @01:59PM (#13045290)
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.

Re:I don’t belong in tech by morgante on Saturday November 26, 2016 @12:39PM (#13044851)
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.

Re:I don’t belong in tech by jameshart on Saturday November 26, 2016 @12:45PM (#13044885)
Today's "quick MVP we can incrementally improve" is tomorrow's "unmaintainable legacy codebase."

But sure, it'll be different this time.

Re:I don’t belong in tech by morgante on Saturday November 26, 2016 @12:49PM (#13044902)
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.

Re:I don’t belong in tech by onion2k on Saturday November 26, 2016 @01:00PM (#13044965)
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.

Re:I don’t belong in tech by matt_wulfeck on Saturday November 26, 2016 @02:10PM (#13045353)
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.
Re:I don’t belong in tech by jasonthevillain on Saturday November 26, 2016 @01:22PM (#13045100)
> 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.

Re:I don’t belong in tech by khedoros1 on Sunday November 27, 2016 @01:06AM (#13047977)
> 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.

Re:I don’t belong in tech by onion2k on Saturday November 26, 2016 @12:54PM (#13044930)
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.

Re:I don’t belong in tech by morgante on Saturday November 26, 2016 @12:59PM (#13044959)
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.

Re:I don’t belong in tech by onion2k on Saturday November 26, 2016 @01:02PM (#13044975)
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.

Re:I don’t belong in tech by bsg75 on Saturday November 26, 2016 @12:54PM (#13044938)
"Just ship it, we can iron out the bugs later" - later never comes because that cycle repeats ad nauseam.