Live data from Hacker News

The Grug Brained Developer (2022)

grugbrain.dev

121–130 of 201 posts

Re: The Grug Brained Developer (2022)

#121
A lot resonates with this, particularly factoring code and carving out barriers later on when the project has settled.

I believe there are some antipatterns like singletons and globals that on the surface look grug-brained but are actually complexity multipliers.

Re: The Grug Brained Developer (2022)

#122

Earlier quoted context omitted.

I wouldn't call those "smart people". They're not much beyond mediocre, but see overcomplicating things (which in many cases they will dogmatically explain away as being a "best practice") as a way to make it appear like they're smart. The smartest are those who can make complex problems look simple, with simple solutions.

And they're never really appreciated, since those problems end up looking so simple in hindsight

Disagree. When you look at a "less is more" engineer next to a "I need to solve the general case with the perfect API and refactor the foobar" after 6-12 months you'll notice that the former has a clear pattern of delivering, and the latter... usually doesn't.

Re: The Grug Brained Developer (2022)

#124
post #105

OK, this was better than expected.

While I agree mostly, you can overdo the "grug". For example it is possible to underengineer (underabstract?) a software for years until realizing that simple things are still complicated, and you forget to built good abstractions once the patterns have emerged. If you build abstractions, you need a way to correct them anyway, making breaking changes to their contract.

Re: The Grug Brained Developer (2022)

#125

I love the section on tests. It really is exactly what I've come to learn over the years. Integration tests are the sweet spot for finding bugs. Mocks tend to over complicate things (I still use them sometimes but I avoid using them systematically) and unit tests are too brittle in face of refactoring whereas integration tests help with refactoring.

Strongly disagree. Integration tests work brilliantly until a certain size or complexity is hit and then they become really bad. Unit tests are harder to write and maintain, but they will serve you much better in the long run because when they fail it’s much easier to understand and debug.

The worst sort of tests are integration tests which secretly depend on another integration test having run first, which will be true 99% of the time, until a change you make changes the order.

Re: The Grug Brained Developer (2022)

#126

Earlier quoted context omitted.

In my experience most over-engineering can be explained by a lack of understanding. When we design it, we don't know what matters and our guesses are wrong; and when we modify it later, we don't have time to figure out how it really works. Both of those problems can be fixed by simply spending more time to understand, but time is money.

Not a lack of understanding, a misalignment of values. I had a team once implement the MediatR pattern for a When I asked them to remove it, it became a political fight that went to the VP because they were convinced that sort of flexibility was a good idea. Fast forward a year and they have a new technical leader and he thought I wanted that complexity until we had a conversation and when I mentioned I didn't like i…

> they were convinced that sort of flexibility was a good idea.

Believing flexibility is needed still suggests a lack of understanding.

Re: The Grug Brained Developer (2022)

#127

Earlier quoted context omitted.

There’s 2 reasons that can happen. 1. It’s not actually overcomplicated, but the people saying it is haven’t thought about it hard enough to realize this. 2. It is overcomplicated, but it’s such a tangle of complexity that fixing it would require the people pointing out the problems to basically do it over from scratch. #2 is usually the result of a very experienced developer being overwhelmed by the amount of comple…

There’s also a third reason: a form of anti-intellectualism where you think that designs that are hard to derive are intrinsically more complex than just doing the straightforwardly obvious thing.

why is this ”anti-intellectualism”? intuition is a strong quality to have in your code.

Re: The Grug Brained Developer (2022)

#128
post #96

Earlier quoted context omitted.

> The developer's incentive to maximize their own lock-in factor and billable hours are powerful forces. In my experience these are rarely, if ever, the reasons for over engineering.

My hobby projects are always over-engineered despite my best efforts. There's absolutely no monetary incentives here so anecdotally I agree with you.

You’re just practicing in your spare time, so your subconscious knows what to do when it gets to work on Monday. ;P

Re: The Grug Brained Developer (2022)

#129
post #6

It's weird how smart people are naturally attracted to complexity like moth to a flame. It takes years to learn to fight the urge to over-engineer. Once you learn to see it though, it's hard to ignore. Now I can tell instantly if code is over-engineered. Unfortunately It seems like maybe 99% of code is over-engineered. The developer's incentive to maximize their own lock-in factor and billable hours are powerful forc…

If you claim that 99% of code is over-engineered, you better provide a good definition of over-engineering and best practices for not over-engineering. Because with a claim like this, I assume your model or definition of over-engineering is probably wrong.

Re: The Grug Brained Developer (2022)

#130

Earlier quoted context omitted.

Not a lack of understanding, a misalignment of values. I had a team once implement the MediatR pattern for a When I asked them to remove it, it became a political fight that went to the VP because they were convinced that sort of flexibility was a good idea. Fast forward a year and they have a new technical leader and he thought I wanted that complexity until we had a conversation and when I mentioned I didn't like i…

> they were convinced that sort of flexibility was a good idea. Believing flexibility is needed still suggests a lack of understanding.

I've often say "design for deletion": Most of those long-term "flexibility someday" needs are best-met by making sure the inflexible modules or flows can be clearly identified and ripped out for replacement.

This leads to a certain kind of decoupling, although with a higher tolerance for coupling that can kept in check by static analysis.

Post reply on HN