News for hackers. Stuff that matters.
Re:Fear of over-engineering has killed engineering altogether by klodolph on Friday July 26, 2024 @12:25PM (#41079916)
> Before the 2000s, academics ruled computer science. They tried to understand what "engineering" meant for programming. They borrowed practices from other fields. Like dividing architects from practitioners and managing waterfall projects with rigorous planning.

I don’t think this is anywhere close to an accurate account of history.

If you look at the history of “waterfall model” then you find Royce (1970), and if you dig back farther you find Bennington (1956). From their writings, it sounds like people understood how bad the waterfall model was, even back then. The waterfall model primarily shows up as an example of what to avoid.

> Developers must ship, ship, and ship, but, sir, please don’t bother them; let them cook!

My explanation for this is that corporations are just really bad at building incentives for long-term thinking. The developers who ship, ship, and ship get promoted and move up, and now they’re part of the leadership culture at the company. The right incentives are not in place because the right incentives are too difficult—we want nice, easy-to-measure metrics to judge employee performance. Shipping features is a nice metric, and if your features move the needle on other metrics (engagement), then so much the better. You get retained, you get promoted, because you gave management a nice little present full of data on why you’re a good employee, wrapped up with a bow.

The reason that managers want nice metrics is because they want to avoid being blamed. Managers want to avoid being blamed for the wrong decision more than they want to make the right decision.

The way to counteract it is to cultivate trust. With trust, you can work on other things besides avoiding blame. When you’re working on other things besides avoiding blame, you can take the long-term view. When you take the long-term view, you can advocate for employees that fix problems and give them resources.

Re:Fear of over-engineering has killed engineering altogether by turtle_heck on Friday July 26, 2024 @01:22PM (#41080426)
> corporations are just really bad at building incentives for long-term thinking.

Most corporations are really bad at long-term anything. CEOs want every quarter to be more profitable than the last, mostly everything else is irrelevant.

Re:Fear of over-engineering has killed engineering altogether by fny on Friday July 26, 2024 @01:47PM (#41080617)
This reminds me of a post[0] where 3 junior devs had written a spaghetti monster that generated 20 million dollars annually, and OP was crying for a rewrite while everyone on HN chuckled.

"Long-term thinking"--often times, you ain't gonna need it. "Engineering" also rhymes with "bike shedding".

[0]: https://news.ycombinator.com/item?id=32883596

Re:Fear of over-engineering has killed engineering altogether by ramoneguru on Friday July 26, 2024 @01:40PM (#41080571)
100% agree with the "building for trust". The only problem is we tend to hire based solely on technical skill. I don't recall an interviewer ever asking me something like, "how do you build a team that values trust and what does trust mean to you?"

Even when I joined the team, we never discussed trust and what we can do to be a more trustworthy team. It was always centered around how can we be more efficient in our deliverables.

This is the video I usually reference: https://www.youtube.com/watch?v=kJdXjtSnZTI

Re:Fear of over-engineering has killed engineering altogether by supportengineer on Friday July 26, 2024 @01:36PM (#41080529)
The pay for developers is also decidedly non-linear compared to ability levels. Promotions are famously non-deterministic.

Hordes of $300k developers trying to become $500k developers who are trying to become $1M developers.

Re:Fear of over-engineering has killed engineering altogether by colechristensen on Friday July 26, 2024 @12:33PM (#41079968)
"waterfall" is just a pejorative term for the kind of planning represented by a Gantt chart, which kinda looks like a waterfall.

This kind of planning is _necessary_ for traditional engineering projects where certain steps of the process can take months or years and requires scheduling of many resources.

Purely software projects usually don't need that because if your tools are good you can ship a completely new version in minutes to hours instead of months to years. You also get very easy do-overs if there are mistakes which you don't get if you're building a bridge or a factory.

Re:Fear of over-engineering has killed engineering altogether by weinzierl on Friday July 26, 2024 @01:16PM (#41080389)
That you can ship quickly is not really relevant though. Case in point is that you most often cannot change the architecture midways without permanent damage. That's why many software projects architecture looks like a building where the architect completely changed their mind after every floor, why everyone complains about technical debt and projects are often thrown away after a couuple of years and rewritten from scratch.

I'm not saying agile has no place, just that many projects would benefit from a little bit more foresight.

Also, I think successful agile projects are often those where the long term planning is there, even if it is not obvious or talked about a lot.

Re:Fear of over-engineering has killed engineering altogether by colechristensen on Friday July 26, 2024 @02:42PM (#41081126)
>I'm not saying agile has no place, just that many projects would benefit from a little bit more foresight.

There is really a spectrum of choices for how much you plan and tradeoffs with each level.

Success is finding the right balance for you, your team, and your product.

Re:Fear of over-engineering has killed engineering altogether by ethbr1 on Friday July 26, 2024 @12:57PM (#41080193)
The phrasing I once heard (source sadly lost to my memory)

"If the physical properties of concrete changed every 6 months, then structural engineering practices would look very different."

But that's the world most software is developed and lives in.

Re:Fear of over-engineering has killed engineering altogether by kabdib on Friday July 26, 2024 @01:05PM (#41080259)
"This avionics firmware is absolutely terrible."

"Well, last week it was driving a bus."

Re:Fear of over-engineering has killed engineering altogether by erik_seaberg on Friday July 26, 2024 @01:30PM (#41080476)
I'm reminded of a build break in Google web search because of a dependency on the self-driving car project. And that's how Bazel rules were given visibility lists.
Re:Fear of over-engineering has killed engineering altogether by janpieterz on Friday July 26, 2024 @12:57PM (#41080192)
Waterfall in software development was different than a Gantt chart based "project that was managed" like the construction of a bridge (an example close to my house). They added new requirements to this bridge (like they wanted the surrounding grounds to be maintained nicely, so added irrigation and gardening etc). But no new requirements were added to the foundational "here's a bridge and it needs to cross this stream from this point to that point" (high level).

Waterfall in software was continuously changing those fundamental parts. You'd be fine tuning the irrigation and needed to destruct the whole bridge because some new requirements came up. That's where the anti-Gantt and "bad waterfall" comes from, the reality is the software world as a whole moves way quicker and requirements are way more malleable, subjective than building a bridge.

Re:Fear of over-engineering has killed engineering altogether by colechristensen on Friday July 26, 2024 @01:07PM (#41080282)
>Waterfall in software was continuously changing those fundamental parts. You'd be fine tuning the irrigation and needed to destruct the whole bridge because some new requirements came up.

Exactly this same thing also happens in non-software "waterfall" projects as well. Mid-project fundamental requirements changes which result in having to re-engineer large parts of the project. This is one of the reasons military acquisitions are so expensive, there's a huge problem with requirements changes.

Re:Fear of over-engineering has killed engineering altogether by com on Friday July 26, 2024 @02:02PM (#41080768)
And thus us why large-scale construction companies can bid so low, because most of their revenue and profit come from the inevitable scope and requirements changes later in the projects.
Re:Fear of over-engineering has killed engineering altogether by janpieterz on Saturday July 27, 2024 @12:29AM (#41084465)
Perhaps to some degree, but I've never seen a skyscraper that was almost done being torn down to be re-architected and rebuilt.
Re:Fear of over-engineering has killed engineering altogether by marcosdumay on Friday July 26, 2024 @01:34PM (#41080511)
> This kind of planning is _necessary_ for traditional engineering projects

People keep repeating that, without any empirical evidence at all. If it were only software developers justifying a body of knowledge, it would be ok, but all kinds of people keep repeating that.

Yet, that kind of planning predictably fails every single time in every single engineering practice.

I can guarantee you, if an engineer designs the structure of a bridge, send it to a crew to construct, and go away to only test after it's done, the bridge will fall down before it's even built.

Re:Fear of over-engineering has killed engineering altogether by bluGill on Friday July 26, 2024 @01:41PM (#41080578)
the fault is not allowing time to test and fix in the right places not in wanting a schedule.
Re:Fear of over-engineering has killed engineering altogether by marcosdumay on Friday July 26, 2024 @02:35PM (#41081050)
The schedule also does never work anyway.

Passing a design down and going away doesn't work. Scheduling tasks before you star them doesn't work. Testing only at the end doesn't work.

The one thing civil engineering has that resembles PMBoK is designing things beforehand. And only civil engineering does that, only because they can't prototype.

Re:Fear of over-engineering has killed engineering altogether by colechristensen on Friday July 26, 2024 @02:45PM (#41081157)
The benefit of a Gantt chart isn't meeting deadlines, it is organizing work. You have all of the steps and what each of them depends on and a timeline. If something slips you know how to update your estimates for everything downstream. If several things are at risk you can see which ones have more critical time constraints and allocate resources effectively.
Re:Fear of over-engineering has killed engineering altogether by marcosdumay on Friday July 26, 2024 @03:14PM (#41081393)
> If several things are at risk you can see which ones have more critical time constraints and allocate resources effectively

Hum... Have you used them that way? And have you needed a project design to actually discover risks and estimate that you need to act on them?

Or better, have you found any unexpected risk on a project design, and seen it materialize on practice?

> If something slips you know how to update your estimates for everything downstream.

And then your renewed estimates will be wrong again. No idea if more or less wrong than before your revision though. It can go either way.

Re:Fear of over-engineering has killed engineering altogether by colechristensen on Friday July 26, 2024 @03:29PM (#41081507)
>Hum... Have you used them that way? And have you needed a project design to actually discover risks and estimate that you need to act on them?

Yes. These things are all over the place in defense.

One of the most important exercises in doing a Gantt chart is finding the "critical path" which is the set of tasks which can't slip without effecting the final timeline. If step two has two separate tasks that step 3 depends on, the longer task is on the critical path, the shorter is not because the shorter task can be delayed at least some without affecting when step 3 starts.

As the project continues you update the chart with what actually happened vs. your plans. The goal is to minimize changes, sometimes you can, sometimes you can't, but when there are changes you can see how the whole flow is affected and you can easily communicate the change in deadlines, changes in budgets, you can pull people off of one task and put them on another, etc.

In agile you do way less of this planning and the path is usually much more simple so you don't _need_ these tools to be successful.

Re:Fear of over-engineering has killed engineering altogether by bluGill on Friday July 26, 2024 @06:32PM (#41082915)
civial engineerin, is often small variation on every other structrure. as suchiit is easy to estimate as things didn't change. when things are very different is when they overrun schedules.
Re:Fear of over-engineering has killed engineering altogether by supportengineer on Friday July 26, 2024 @01:39PM (#41080559)
> "you can ship a completely new version in minutes to hours"

Not all that long ago, software was distributed on physical media such as floppy discs and CD-ROMS.

Re:Fear of over-engineering has killed engineering altogether by eastbound on Friday July 26, 2024 @12:44PM (#41080061)
In my startup, for all the future devspeed promised by developers who pretend to know how to plan, after 4 years we sure lack to see their features.

I don’t know, it feels like customers buy our product because has features, but who doesn’t like a good K8s stack.

The market never seems to end producing those developers who spend their life refactoring and never shipping anything, nor taking responsibility for the fact that their pile of technologies SLOWS DOWN the other developers while never solving the problems they were implemented for.

It’s not a manager problem. Developers don’t like taking responsibility for their mistakes.

Re:Fear of over-engineering has killed engineering altogether by ethbr1 on Friday July 26, 2024 @01:01PM (#41080230)
Related: I don't know why software estimation doesn't spend more time on risk and less time on estimation.

How much risk (to delivery) is left out there? What can we do to reduce that risk?

It's a known thing, but seems rarely used in software shops. https://en.m.wikipedia.org/wiki/Spiral_model

Who cares if 97% of the code is complete, but the remaining 3% is a critical feature, with unclear requirements, that's never been prototyped, and has no test data?

Re:Fear of over-engineering has killed engineering altogether by lemonwaterlime on Friday July 26, 2024 @01:53PM (#41080672)
The challenge is the mindset in most software shops of "We're not building a space ship". Because of the ability to rapidly iterate, there's a sense of invincibility. As we've seen, however, some aspects of the product should in fact be treated like building a space ship. For instance, with something like properly managing data (so you don't get breached), a detailed risk assessment and robust strategy should be more highly prioritized. For displaying a UI to end users, perhaps not so much, but even then there are accessibility concerns that a good product would address.
Re:Fear of over-engineering has killed engineering altogether by ethbr1 on Friday July 26, 2024 @04:48PM (#41082152)
Safety/security risk is important too, but I was suggesting development keep an eye on delivery risk.

I.e. the risk that a project won't be delivered with the expected features and by the expected end date

Fundamentally, time estimates are useless without a coupled risk/certainty metric.

If you ask me how long something is going to take, and I believe it'll take somewhere between 3 months (worst case) and 2 weeks (best case), what number do I reply to you with? And how do you interpret that number?

And how does my reporting change as we get closer to delivery?

Reducing the size of work being estimated band-aids the problem, by shrinking the absolute magnitude of the bounds, but doesn't fundamentally solve it.

Common heuristics like "double how long you think it's going to take" are other ways this appears.

Re:Fear of over-engineering has killed engineering altogether by lemonwaterlime on Friday July 26, 2024 @07:45PM (#41083336)
I think we’re in agreement. In my mind, you can even get delivery risk from a safety/security standpoint. As in, the product should be developed on time while accounting for the security/safety stuff. And you get there by placing risk front and center for the entire system from the beginning.
Re:Fear of over-engineering has killed engineering altogether by klodolph on Friday July 26, 2024 @01:00PM (#41080220)
> It’s not a manager problem. Developers don’t like taking responsibility for their mistakes.

I’m glad you agree on both of these points. Like I said, it’s a problem with building the right incentives, and a problem with people who are trying to avoid blame.

A developer with a good, long-term view has a light touch. On one side, you have reckless developers who ship out buggy products that cause problems for operations and customer trust. On the other side, you have fastidious developers who just keep refactoring everything and never ship features.

Sometimes, you find a team that can do both. When I’ve seen this, the team has been made of both types of developers. A mix of skill sets, and a high level of trust that they won’t be blamed for failures (outages, missed deadlines). Your developers who move fast and break things will take the time to write a few tests and break things less. Your fastidious developers will relax their standards a little bit and push out code faster, knowing that their contributions are still valued.

Re:Fear of over-engineering has killed engineering altogether by advael on Friday July 26, 2024 @01:16PM (#41080387)
Of course prioritizing shipping more features is going to ship more features. The whole point of prioritizing engineering is to trade off some speed for other things, like your shit not breaking. The incentives in most companies produce catastrophic failures because the mechanisms for punishing individual failure on speed metrics (the easiest metrics and thus the only metrics most organizations know how to or care to measure) are powerful and numerous but the organization-level incentives don't adequately punish the kind of catastrophic failure we are seeing constantly. That cost is externalized from the organization that failed. Their customers and those customers' customers and anyone affected by the whole world being made of brittle nonsense pay the price and have meager recourse if any. If your reason for prioritizing correctness over speed is because you believe that this will eventually produce more speed, I don't know what to tell you. That's possible and a really nice outcome when it happens, but it's not the point of doing it and it's not the typical benefit
Re:Fear of over-engineering has killed engineering altogether by klodolph on Friday July 26, 2024 @01:30PM (#41080474)
Here’s how I’ve seen this play out at some larger, more bureaucratic companies. (This is just an example, it doesn’t have to play out this way.)

You start by moving fast and putting out features. Then something breaks in a high-profile way and the hammer comes down. The environment changes and people start avoiding blame. Some of the effects I’ve seen:

- You bring more people into meetings (diffuses the blame when something goes wrong, but slows everything down)

- You demand more detailed requirements (makes development more predictable, but good designs tend to evolve and do a lot of discovery)

- Tedious work doesn’t get automated, and your headcount requirements go up (because tedious work is predictable, and automation is a risky project)

Eventually, somebody in senior leadership (hey, I said “larger company”) notices that the entire org has basically slowed to a crawl and is constantly demanding more headcount, and they have to go in and fix things. Or they decide to axe a bunch of projects, or reorg, or something else.

I want to emphasize that this is a possible way that the story plays out, not that the story always plays out this way.

Re:Fear of over-engineering has killed engineering altogether by MereInterest on Friday July 26, 2024 @01:35PM (#41080522)
> Of course prioritizing shipping more features is going to ship more features

I mean, I'm not entirely sure on that. Prioritizing shipping features may make a codebase be impossible to understand, so that any additional features take longer and longer to implement. Prioritizing design may make a codebase be easier to understand, such that each new feature can be added with breaking existing functionality.

There's a quote I like from Jonathan Livingston Seagull: "It's strange. The gulls who scorn perfection for the sake of travel go nowhere, slowly. Those who put aside travel for the sake of perfection go anywhere, instantly."

Re:Fear of over-engineering has killed engineering altogether by llm_trw on Friday July 26, 2024 @01:09PM (#41080302)
>The market never seems to end producing those developers who spend their life refactoring and never shipping anything, nor taking responsibility for the fact that their pile of technologies SLOWS DOWN the other developers while never solving the problems they were implemented for.

The market absolutely produces those developers, it's just that their salaries start at 7 figures and go up from there.

Re:Fear of over-engineering has killed engineering altogether by RaftPeople on Friday July 26, 2024 @07:23PM (#41083198)
> I don’t think this is anywhere close to an accurate account of history.

This was my thought also. I've been building software systems since the early 80's and I've never been part of a project that looked like waterfall, but I've also been in small to midsize companies, not large.

The approach on projects has been somewhat consistent for my entire career which is just a pragmatic look at the project and approach the problem based on the nature of the specific project. There are some projects or parts of projects that really require up front design and planning (e.g. when coordinating changes in multiple external systems that must all play nicely together) and some other parts of projects where the best approach is to iterate (e.g. we've never done something like this before and can't use our experience to guide us very much so we need to try some stuff). Projects are typically a combination of all of the above and more.

When I originally read the agile manifesto my thought was "ugh, ya, this is all pretty normal common sense, sounds like these guys must be working in some large corporations where the bureaucracy has taken over and they are trying to push back."