Live data from Hacker News

I'm a good engineer but I suck at building stuff

lionelbarrow.com

111–120 of 128 posts

Re: I'm a good engineer but I suck at building stuff

#112

Earlier quoted context omitted.

I have a simple mantra that helps me remember this. "Its clay, not stone".

More like tar...

In that line of thinking, I would have to say it's more like dough. At the beginning good dough is very wet and sticky. If you are not decisive with your actions it will stick to your hands, your board, your table, your hair... As you work with it, it creates a workable ball that is dry and elastic. You can shape it with ease, it stretches paper thin without breaking, it rises high and light. The more skilful you are, the faster you can go from gloop that threatens to devour the world to something that is smooth as silk and almost feels alive. Those with little skill and experience never actually get there. They believe that beautiful well formed dough is a myth. They compensate by adding more and more flour so that the dough doesn't stick to their hands, in the end baking literal bricks. They pretend that the resulting bread is good.

Yes. Code is like dough.

Re: I'm a good engineer but I suck at building stuff

#113
post #3

> When I try to build something new, I find myself instantly criticizing my technique, to the point of paralysis. This function is hard to test; this object's dependencies need to be injected rather than initialized internally; that module needs an integration test; and so on and so forth. Even when writing spike or proof of concept code, I find myself revisiting the same lines over and over again, looking for the be…

+1 on this. I personally had a similar issue where I'd start a project then go off on some huge overengineered diversion.

You Ain't Gonna Need It. Let that be your mantra. And always promise yourself that you'll refactor (and actually do it!)

Re: I'm a good engineer but I suck at building stuff

#115
post #58

Earlier quoted context omitted.

I'm naturally a perfectionist, so I fall into this trap often, though I've gotten better over time. I rely on a few simple tricks (ugh, the buzzfeed headline practically writes itself): 1. If I'm stuck and can't decide which path to take, it's usually because I don't have enough data to tell which path is better. The fastest way to get that data is to pick one path arbitrarily and start walking down it. Pretty soon,…

I frequently use TODOs and I don't get crazy if I don't go back and do all the TODOs. Some seem important at the time and become less so with age. Others become more important.

I feel like this leads down a dangerous path of no signal-to-noise ratio and destroys your hope of finding relevant TODOs. Better to, as part of revisiting them, rewrite the comment to explain the de facto behaviour for yourself (and others) in future. If you're not going to do them, anyhow.

Re: I'm a good engineer but I suck at building stuff

#117

There is a quote from Louis Nizer that applies here: "He who works with his hands is a laborer. He who works with his hands and his head is a craftsman. He who works with his hands and his head and his heart is an artist." Its that last part that is hard to bridge for a lot of engineers. The thing that did it for me was sitting through a LOT of formal usability studies. Seeing folks actually use an application you ma…

I started my career in a small software company that wrote Mac software (in the System 6.5, System 7 days). We had no dedicated support staff, so support calls were either handled by the sales staff or development. Talking directly to customers, hearing where they were having trouble, and learning what they wanted to do, was probably the single most valuable experience in my career. My first thought with any work became "How can I completely eliminate the possibility that I will end up having to support this?"

Of course, this backfired spectacularly a few years later at a different company, when a customer stopped paying a lucrative support contract because the software always "just works". I have decidedly mixed feelings about that!

Re: I'm a good engineer but I suck at building stuff

#118

There is a quote from Louis Nizer that applies here: "He who works with his hands is a laborer. He who works with his hands and his head is a craftsman. He who works with his hands and his head and his heart is an artist." Its that last part that is hard to bridge for a lot of engineers. The thing that did it for me was sitting through a LOT of formal usability studies. Seeing folks actually use an application you ma…

I started my career in a small software company that wrote Mac software (in the System 6.5, System 7 days). We had no dedicated support staff, so support calls were either handled by the sales staff or development. Talking directly to customers, hearing where they were having trouble, and learning what they wanted to do, was probably the single most valuable experience in my career. My first thought with any work bec…

That isn't such a problem nowadays as you could move the business model from outright purchase plus support to a software as a service model with monthly fees and minimal support costs.

Re: I'm a good engineer but I suck at building stuff

#119
I like this post because it captures some way in which my perspective has changed over time. Engineering was something I saw as a way to perhaps "cheat" at product problems because if I made a good enough/fast enough/automated enough/generic enough solution, I would be able to iterate on it really fast and so somehow come out ahead of people who went directly towards the simple solution. This mentality was clearly inspired by years of homework being a task that would never go away and that I desperately wanted to get out of my life as fast as possible in the way that consumer products advertise their elimination of household tasks - ergo my goal as a student was to wish I could automate away all aspects of my studies. I would look for any kind of secret trick or forgotten technique that would get me closer to that goal at minimum effort. All the while I would build very little that was finished and get lost in maximizing my use of silver-bullet abstraction.

I've eventually come around to flipping this idea on its head, though. If I design not just some kind of product or solution, but a whole process, starting basically with how I want to run my life and then drilling into specific details from there, the technical knowledge stands on more even ground with other forms of knowledge, and with seeing life itself in a more precious sense.

With that mindset, good scheduling of every day as an end in itself grows vastly more important, and abstraction-for-its-own-sake falls away: All programming problems start by assuming they are solved first with "code that looks like breadboard wiring" [0] and then working up the abstraction ladder from there. Automating the technical parts of the solution won't guarantee that it's right in any other way, but it will ease the pain of changing the specification. Acknowledging that the problem is messy, that breadboard coding is messy, and that I won't know how to solve everything immediately and cannot depend on a silver bullet, all constitute crucial first steps.

Now I always look for really basic groundwork to be laid out early on - typically, transforming the breadboard code into something that uses a new data structure, or generating the code flow from a stack or a list or a tree - and that no shortcut is possible without compromising the ability of a potential future abstraction - that it just takes a lot of layers to get where I want to go. Breadboard code is assumed to be ideal until demonstrated otherwise, while "x in y lines" hype is to be avoided under the assumption that the solution is brittle and over-modeled towards the demo code. I cannot assume that my valuable production code will need x or work in y lines. I don't abstain from adding dependencies, but I will preference towards copy-paste-own when I find a reason to reuse code.

[0] http://www.instructables.com/id/How-to-Build-an-8-Bit-Comput...

Re: I'm a good engineer but I suck at building stuff

#120
post #110
post #3

> When I try to build something new, I find myself instantly criticizing my technique, to the point of paralysis. This function is hard to test; this object's dependencies need to be injected rather than initialized internally; that module needs an integration test; and so on and so forth. Even when writing spike or proof of concept code, I find myself revisiting the same lines over and over again, looking for the be…

Another useful idea is to be not interested (except maybe theoretically) in achieving the best, and concentrating on the good enough. Sometimes the best is overkill, and a good enough is significantly cheaper (shorter, easier, available already). Sometimes the best is not good enough, and you have to rethink your strategy.

Perfect is the enemy of good.
Post reply on HN