359 karma · joined February 4, 2012
I'm saying that given N developers, if they all type code faster, you get more code. From the linked text: "Will this translate into a net increase of actual value or just an accumulation of slop and technical debt? Regardless of the answer, there will be more raw code."
The argument I'm making is based on more volume of code. Not on quality, value, etc. of whatever that code is doing.
On your point about nobody having thought "my problem is that can't type fast enough". The problem "shit, I'd know what I want, I'd rather spend 10 minutes typing than 1 hour" is real. An LLM allows you to say "I want a piece of code that does X" and it hydrates that into the 500 lines of code. You materialize the thing faster.
Now. Yes we can go back to your point. Was that idea good? Is the code good enough? etc. Those are valid questions, but orthogonal to my point. My point is not about the quality of outputs etc. It's about "this thing helps you churn more code, and throw it to the systems that digest code".
Submitted yesterday, but no luck :D
IME, this will be more "learned" than "reminded". Many many people set up pipelines to build artefacts based on tags (e.g. a common practise being "on tag with some pattern, then build artefact:$tag") and are just surprised if you call out the flaws.
It's one of many practises adopted because everyone does it but without basic awareness of the tradeoffs. Semver is another similar case of inherited practise, where surprisingly many people seem to believe that labelling software with a particular string magically translates into hard guarantees about its behaviour.
I think of those platforms more as distribution / syndication mediums, using them for stuff like throwing it out there and reach others (which I somewhat care about because the topics I write about are those I like to exchange opinions about with others, but not obsess in terms of needing validation) and keep some degree of isolation from their policies, relative importance vs others, algorithms, UI/UX choices etc.
We wanted the metrics to create the right set of incentives to make people improve the right parts of the system.
For example, we did present deploy frequency prominently. This gets people to see it, managers to want their team to be in the upper percentiles, etc. which drives a set of practises that, in general, and backed by research, are beneficial.
One of my favourite features was putting two graphs together: size of PRs vs. time to review. Time to review went up more or less linearly to size of PRs, but past a certain threshold (different per team!) time to review dropped sharply with larger size of PRs. This made for a good conversation to topic with teams that sets the right incentives for smaller PRs, iterative development, etc. (and it happens to correlate with deploy frequency).
Nah, you don't need to assume malice :)
Most times it was managers with good intentions, not realizing that those metrics were either pointless (e.g. how much code / commits does $person do), or toxic, in the sense that it leads the team to game metrics, that it prevents the manager to actually understand why the values are what they are, that it opens the risk to link them to promotions and perf reviews etc.
Explaining them all this was generally enough!
> And, cynically, I would say that senior managers don't care... because to them, most hands-on engineers/devs are fungible. What is your view about why the upper levels never ask for it?
Actually that wasn't the case. AFAIK (I left at some point, but kept a bit in touch with former colleagues) upper management started using some of those metrics to set organizational objectives.
Again, same argument. You don't need to assume malice. Management has a legit interest in engineering productivity. What happens most of the time is that they don't know how to measure it in an effective way, or how to use it to drive organizational change. Providing guidance is part of your job as a Platform eng.
We had the technical means to track everything from commits to reviews, jiras, deploys, etc. Some of our most celebrated and impactful features were reporting on Accelerate metrics and related. E.g. deploy frequency, size of changes, duration of stages in the dev cycle and such.
I set a very inflexible red line: we don’t expose data more granular than at team level. Ever. No excuse.
Quite a few line managers would come to me asking for “personal metrics”, and even engineers in the team were super interested in building that (“with all this data we could…”).
My argument was that these metrics are toxic and invite misuse. A second factor was that this misuse would generate mistrust from engs against the platform and damage adoption.
Instrumenting an organization thought of as a system is fine. You want to see where are bottlenecks, you want to have measurable targets for how technical work is done and how it correlates to business goals/KPIs.
You want to offer teams metrics of their delivery my process so they can take the info and implement improvements whenever they see fit, and have a data driven conversation with the business (e.g. about the right setting for the carefulness knob)
But teams are the minimum unit of ownership, we stop the instrumentation there. Sure, a team’s performance ultimately links to individuals, but that is the manager’s job to figure out.
Interestingly:
* only line managers asked for this info, nobody in a director/vp/cxo role * the most annoyed by me saying no were engineers in the team who wanted to do these features
Is basically the summary for most mono/multi repo discussions, and a bunch of other related ones.
Quote from Will Larson found in another HN post (https://review.firstround.com/unexpected-anti-patterns-for-e...) right after checking out this one.
This is a great point! I should have mentioned in the article, but in the examples mentioned part of the nuisance was that people involved could envision alternative solutions that would have also been effective without causing most of the long lasting trouble.
But, sometimes that's not possible (I do mention that they are not always avoidable)
Yeah, although encryption is basically a way of hiding semantics from the external world (or, everyone else but whoever generates them) no?
Just curious, how long did the API extension approval take? (been waiting for almost 3 months on mine)
But this is not the same for every tool. The thread author focuses on examples that fall in this second category like Redis, Terraform, AWS, etc. Unlike with IDEs, sprawl resulting from individual decisions in databases, infra management or cloud infra becomes a problem. For both! The company has to maintain a heterogeneous stack. The seller can’t make a meaningful enterprise deal just because some team chose Redis. This means that you will want to do some standardisation. At that point the impact of the choice and the size of the license become big enough that, in the same way as eng leads will want a say, finance will too, for good reason.
And needless to say, the moment finance is in the picture you will have to justify the choice in a language that is challenging for most engineers.
The parent reply has an important point: a good % of headcount reductions tend to affect r&d and the type of projects where cutting investment doesn’t have a negative short or even medium term effect on the company. Sometimes it can even be positive for operations (e.g. infra teams have to support less product teams). This is mostly why it’s very uncommon to see headcount reductions lead to instability, etc.
Long term effects (e.g. stagnation, no innovation..) may manifest, but are harder to see clearly in advance, and when they do happen the connection to those layoffs from N years ago is not obvious/even remembered
A similar effect happens to me on Twitter. I sometimes click on a video / dumb meme account, etc. just to take a break or whatever (Twitter does a much worse job at creating the attention vortex, so it's easy for me to literally make it a 2m break). BUT, some hours later the algo digests my click and turns my feed into absolute garbage repeating an endless firehose of dumb meme content. (In Twitter's case this is actually helping me: I really avoid clicking on dumb content so the algo doesn't go nuts.)
It's a pity the YT PMs insist on designing the app like a Vegas casino, I'd really like to use the YT app for healthy usage, but well.
The problem on this topic is that they cargo cult getters/setters by inertia, usually because more experienced engs pass it on as good practice.
It’s not an inherent problem to the language.
Indeed. The thing is, I was replying to a comment that referred _explicitly_ to a bad actor. The situation @ponector describes (team's coverage indicator is rendered useless because have a bad actor games it), THEN the cause is not coverage. It says nothing about coverage beyond "a tool only works in certain conditions".
You bring 2 more cases that break the indicator, and I agree with both (there are more!). We have (1): We all make mistakes and write dumb tests. (2): Coverage is not useful for _some_ practises / scopes of testing.
I agree on both. But we're back on the same place. I'm not saying those problems don't exist. I'm saying that those are not problems coverage ever claimed to solve. Making a sweeping dismissal of a tool because it doesn't solve problems it never claimed to solve is throwing away the baby with the dirty water.
* Coverage does not claim to be a tool to fix bad actor, (1) or (2)! There are other tools to cover those risks (e.g. managers, code reviews, pair programming, etc.).
* Discussions about those tools (code reviews, etc.) tend to make the same mistake. Find problems the tool doesn't claim to solve to dismiss the tool.
* This all happens because people pretend to treat tools like coverage, tests, DORA metrics, as silver bullets. They are not. They are all meant to be a toolbox that engineers evaluate and use where they yield value.
And this is why yes, a lot of the "$tool is useless because $situation_where_it_doesnt_work" conversations are fundamentally about cultural issues. If your team uses a tool without knowing what problem is trying to solve, you have a cultural issue. If your tool has an actual purpose, and yet engineers are intentionally working around it, you have a cultural issue. Etc.