Live data from Hacker News

Goodbye, and Thanks for All the Bikesheds

queue.acm.org

271–280 of 285 posts

Re: Goodbye, and Thanks for All the Bikesheds

#271
post #231

Earlier quoted context omitted.

Expecting that governments won't respond to software which is tailored to prevent them from investigating crimes (e.g. Signal's primary marketing is all about preventing government access to chats) was so utterly naive that only privileged techbros could make it up. Other people understand that picking a fight with someone will result in a fight.

How did the police in XIX and XX century even managed to investigate the crimes without having access to the records of criminals' communications, and with way worse forensics available? No, seriously, how? One of the things they did is they investigated metadata: you know, witnesses who saw what people walked around? Today we have way more of such data, readily available for them, plus ubiquitous CCTV and the like.…

Phone wiretaps, conversation wire taps and access to letters have been normal since those communication technologies existed.

So what the heck are you on about? Content of conversations, letters and phone calls was critical to many investigations - including famous ones like WaterGate and bringing down Al Capone.

Again, if you decide to attack the government's ability to do their work, expect a pushback. This isn't hard.

Re: Goodbye, and Thanks for All the Bikesheds

#272
post #182

Earlier quoted context omitted.

There seems to be some general pattern here that you can find pretty often in "dev war stories" contexts: (1) We're a small startup/new product team/etc, let's just build the MVP and keep everything simple! (2) Now we're not small anymore and suddenly have all kinds of nonfunctional requirements we never imagined before! But our simple architecture from before is making everything a pain now! The natural instinct is…

In addition to Second System Syndrome that has already been covered, I think there are several other things going on here that lead to the tug of war. In another reply I already mentioned a flavor of Sunk Cost, which is resistance to any change to the code that 'made us successful' because they consider they have already won and taking it away now is some sort of revisionist history effort instead of just Progress. H…

> I'm advocating for people having enough experience and foresight to understand which 20% of the code flow is Architecture from which is just feature factory work and making sure that 20% gets 80% of the design thinking and timely preventative maintenance.

This is true until you're at a company that is a feature factory and nearly exclusively hires out of universities and struggles to work industry hires into their culture. And these tend to make up a glut of the companies a rung or two below the FAANGs/MANGO.

Re: Goodbye, and Thanks for All the Bikesheds

#273
post #259
post #230

Earlier quoted context omitted.

This reminds me of my experience as a senior contractor joining teams that seem to enjoy endless discussion. For example, when implementing a new feature using an open-source library or framework they will want to make a prototype of all possible libraries, make a report about each of them, have some big discussions about which to choose, and only _then_ start the real implementation. My advice is always to just pick…

> If a decision is hard to make, its often because the differences are small, and therefore it doesn't matter much and you might as well decide by dice-roll. My life became soo much easier when I had that insight. I used to spend so much mental energy on decisions that most often were inconsequential.

I'd like to know where you're getting these decisions. All of my hard decisions are due to not knowing what technical obstacles we'll run into later.

Re: Goodbye, and Thanks for All the Bikesheds

#274
post #249

Earlier quoted context omitted.

I sort of agree. But I kind of think it misses the point. Bike shedding means no decision is made. That is the worst possible outcome as it provides absolutely zero value. Even a wrong decision provides at least some value even if it fails horribly. Maybe we paint the shed black and it burns down due to excessive heat, but it’s a bike shed so who actually cares if we need to rebuild the entire thing and paint it whit…

> Bike shedding means no decision is made. That is the worst possible outcome as it provides absolutely zero value. And "bike shedding" is now a term that people hyperbolically apply to any discussion of something the labelling-participant doesn't really care about. A lot of times doing nothing is actually the best business outcome. Waiting until you have more, better information is great. Lots of stakeholders ask fo…

Well you shifted the goal posts. Storing everything in EST vs UTC isn’t great, but isn’t some business ending level problem. It annoys engineers and causes inefficiency. Unlikely to even show up on a quarterly report if someone chose to write a mandate to fix it.

Once you get to the point of bolting on random systems that need to talk in whatever time zones is when you bite the bullet and change it. Yes, that is expensive.

The point I’m making is that if you spend a week dicking around with two junior devs while in your startup phase arguing about EST vs UTC you lose by default. Would much rather have my imaginary employee just choose EST in 14 seconds and move on at that stage. And I have dealt with systems that have done exactly this.

When it becomes a problem I can afford to fix it. Talking about it for more than 5 minutes at the bootstrap company stage is the definition of bike shedding to me. If those are discussions you are having in your weekly dev meetings you have already lost.

This will obviously depend on exactly what you are developing. Payment systems? Probably way more important to get this right vs. some social media app.

The ironic part to me is that this comment thread is basically bike shedding itself! Timestamps are an age old nerd snipe.

Re: Goodbye, and Thanks for All the Bikesheds

#275
post #259

Earlier quoted context omitted.

> If a decision is hard to make, its often because the differences are small, and therefore it doesn't matter much and you might as well decide by dice-roll. My life became soo much easier when I had that insight. I used to spend so much mental energy on decisions that most often were inconsequential.

I'd like to know where you're getting these decisions. All of my hard decisions are due to not knowing what technical obstacles we'll run into later.

That is often a different type of difficulties. I was thinking about decision like, should I buy car A or car B. I've done my research. Economy, safety, et c. are very similar. But it is a lot of money, and I don't know which is the "best", and of course I want the "best". I could spend weeks on a decision like this. Now I just acknowledge that they seem to be equal. Car B comes in a nice shade of red that I really like, so I buy car B.

Regarding your question, there's always going to be known and unknown unknowns down the line. My only advice in that case is to get to the unknowns as fast as possible. And from the start take into account that you most likely will have to rebuild a big part when you learn more. That is one of the reasons modularity and decoupling is so important. You want to be able to easily scrap and replace one part without it affecting everything. And keep it simple. Never try to build something that should be capable to handle all imaginable scenarios in the future. You'll be bitten by one of the unimaginable ones, and your complex "can handle everything" architecture will be too rigid to change.

Re: Goodbye, and Thanks for All the Bikesheds

#276

Earlier quoted context omitted.

This is what usually happens if you let incompetent people make design decision: they stay with the first and worst version forever. Right now I'm in the process of leaving a company where this happened over and over again. The company's product and design aspects were always neglected in this specific way: whenever a problem was discovered its solution was assigned to whoever would write the code to solve it. That's…

> This is what usually happens if you let incompetent people make design decision: they stay with the first and worst version forever. This is what usually happens when you confuse the decisions that mattered from the ones that didn't. It's like back before 'just use a linter' was the solution to code formatting. You'd start a project, you'd have the 'code style meeting' and everyone would bash themselves into the ro…

Well, I had to be more specific instead of trying to be dramatic...

The thing is, nothing in the suggested procedure addresses the problem of how you are supposed to distinguish the decisions that matter from those that don't. Whoever came up with this idea must've thought that it's trivial to the point it doesn't need solving, but it's the opposite, unfortunately.

Also, FYO, linters aren't responsible for code formatting. It's the formatter's role. Linters advise on style. I.e. the problem of bracket placement is not solved by using linters, an example of problem that is solved by linters is the maximum number of properties a class is allowed to have.

But the meetings about formatting or using / disabling linter rules still happen. Having tools to do that didn't make the problem go away. What did happen, however, is something more like natural selection. The increased volume of newcomers which the field saw up until maybe five or so years ago were mostly steered in a particular "winning" direction. So, today, naturally, you have most people agree on a set of rules to follow because the majority came from the same background. You need a bunch of old-cadgers to work together on a project for there to be a feud over styling rules.

Re: Goodbye, and Thanks for All the Bikesheds

#277

Earlier quoted context omitted.

This is what usually happens if you let incompetent people make design decision: they stay with the first and worst version forever. Right now I'm in the process of leaving a company where this happened over and over again. The company's product and design aspects were always neglected in this specific way: whenever a problem was discovered its solution was assigned to whoever would write the code to solve it. That's…

I would have assumed code reviews would have sussed out those issues earlier in the cycle?

To comment on my concrete (and quite miserable) situation, here's how it went (and does, even worse with the advent of AI, to this day):

* A report comes from the field (to the support team) that something is broken (or highly desired by the customer).

* The support team assigns the ticket to the lead engineer.

* The lead engineer writes the code and after a quick battle with CI pushes it all the way to the customer in need.

* Since it's the lead engineer, he has the authority to merge PRs w/o consulting anyone, which is what he does. You just pull the changes and marvel at them, or at the sunrise, whichever you like best. The "urgency" is used as a justification to skip the due process.

Now, when AI came into play, two horrible things were added into the mix:

* AI audit and code review. The audit is a 50/50 chance between finding a real problem vs misunderstanding of the purpose of the code or the context in which it is executed. The AI will also come up with a solution that is either completely wrong, unnecessary or touching too many things for a human to track. Code review acts in a similar way, except, technically it fills the role of a human reviewing the code, so it gives a sense of false security to anyone making changes.

* AI generating code that is hard for humans to follow. First and most obvious problem is the volume. In minutes AI generates changes that will take months of effort to review. But this is only the beginning of the problem. When reading code written by humans, another human builds a model of the author's approach, ability, intention and permissions. When it comes to AI, these... let's call them "dimensions" are all over the place. The generated code you read may seem very plausible for a while until you stumble into a crucial functionality that completely invalidates everything you've learned about the change so far. The change may make unnecessary segues into the territory it was never meant to touch.

So, even when there are code reviews, they now miss a lot more than they used to when only humans were writing code.

Also, and this is a pathologically bad, but a very common practice: the reviewer's name is missing from the record. You run git-blame and only see the author, not the reviewer. When things go down, the author takes the heat and the reviewer is nowhere to be found. Subsequently, reviewers don't feel like they need to care as much about the outcomes.

Oh, and one more thing. To be effective at reviewing anything you'd want to try things... as in to test them. Perhaps come up with some idea about what things must happen and what things absolutely must not. But where do you find those? Usually... in a design document, s.a. a PRD, but in the case where that design (allegedly) was solely in the head of the person writing the code, how do you even know if the behavior you conjecture the code has (because there are no tests) is the desired one?

Re: Goodbye, and Thanks for All the Bikesheds

#278

Earlier quoted context omitted.

We can agree to disagree on this. Even on this example you gave, I'm not entirely sure it's harmful to society. Having worked in the corporate world, there are just so many regulations that — from what I've seen — there is pervasive non-compliance and the covering up of the non-compliance. I suspect that if every single corporate regulation was effectively enforced, a significant fraction of economic activity would g…

People often say the same thing about environmental regulation too... I hope you realize what a poor argument (to lawmakers) that is, especially if your goal is to advocate for privacy.

Society needs non-political checks on government power. We cannot always depend on the right laws being passed. One of those non-political checks is privacy rights. We can't give the state total transparency into our private interactions.

Re: Goodbye, and Thanks for All the Bikesheds

#279

Earlier quoted context omitted.

This is what usually happens if you let incompetent people make design decision: they stay with the first and worst version forever. Right now I'm in the process of leaving a company where this happened over and over again. The company's product and design aspects were always neglected in this specific way: whenever a problem was discovered its solution was assigned to whoever would write the code to solve it. That's…

I would have assumed code reviews would have sussed out those issues earlier in the cycle?

Everyone has to learn how much feedback they can give in a code review without making an ass of themselves. The code isn’t right at the end of that, it’s just less wrong.

On the first project I had with routine code reviews I learned to wait for one or two others to file their reviews and then I would catch everything they missed.

It was an app with too many interactive components on top few pages so perf issues and footguns were both a priority. That generates a lot more comments on CRS. There were two of us doing all of that work and the other had English as a second language so he tended to point out one or two issues and let the rest slide.

Re: Goodbye, and Thanks for All the Bikesheds

#280

Earlier quoted context omitted.

Amazon's leadership principles are fantastic. They are applicable to anyone doing any job at any level.

... so were "HP Way", "Siebel Principles", "Hyperion Essbase ethics" and many others, collecting dust on library shelves while MBA students getting instant high from Jack Welch's "Winning".

Jack lived long enough to become the villain.

Motorola will tell you that they invented Six Sigma and Welch copied it. They also made Digital Six Sigma and that community was a cult.

Post reply on HN