Bell-Curve Opinions on Engineering
matt-rickard.com
matt-rickard.com
A recent one that I found amusing.
IQ55: How much do they read?
IQ100: We evaluate people based on a comprehensive survey that aligns their skills and competencies with our needs.
IQ145: How much do they read?
Another one.
IQ 100: DO YOU HAVE A SOURCE FOR THAT?
IQ 145: It's perfectly rational to trust your deep instincts, since they passed through generations of evolutionary pressure
https://www.thoughtco.com/bell-curve-normal-distribution-def...
https://news.mit.edu/2012/explained-sigma-0209
One thing to keep in mind, when looking at complex topics like expert vs. beginner opinions and so on:
> "When You Shouldn't Use the Bell Curve: There are some types of data that don't follow a normal distribution pattern. These data sets shouldn't be forced to try to fit a bell curve. A classic example would be student grades, which often have two modes. Other types of data that don't follow the curve include income, population growth, and mechanical failures."
I did that when I was in my early 20s, got taught to use dedicated TST and UAT environments by more experienced engineers, and now in my 40s I'm telling everyone who's willing to listen that isolated testing is nearly worthless.
The amount of issues I can uncover by using telemetry from production is just insane. Any half-way decent APM will have a dashboard view that summarises errors by how often they occur, which is an automatic priority list.
Some teams I tell this to just blink at me slowly and say they only do testing in UAT, and that after "sign off" they don't see any further need for monitoring. It's signed off, you see! Done. Finished. Released. End. Of. Story.
It has a few powerful but niche use cases, particularly around mentorship (where I think asynchronous feedback is often too little, too late) and when two people are doing work that's closely intertwined.
Mostly, though, pair programming is my favorite way to get people up to speed with a project and to prevent information silos about critical functionality. My devs do them about once a quarter with each other for a week or as needed.
I would love to see someone successfully bridge the gap between spreadsheets and software. Just some version control and testing would be amazing
I'll use the OP's first item, Kubernetes, as an example because I'm familiar with it.
> [Common Practice]: You should always use Kubernetes and other
> "correct" infrastructure.
>
> Beginners/Experts: Don't Use Kubernetes, Yet. Use the simplest
> abstraction you need for now.
So, first, is that really common practice? Overwhelmingly I've seen Kubernetes struggle for adoption among intermediate-level engineers because they're familiar with local development but still getting used to the basics of running software "in the cloud", and find the complication around replicated distributed systems off-putting.Second, the reasons for "don't use Kubernetes" are often vastly different between the two "tails" of the bell-curve. A bad reason to reject universal Kubernetes is because the person wants to build everything out of Puppet and bash scripts, held together by human suffering (aka "on-call"). A good reason is to note that some bits of infra are adjacent to (or below) Kubernetes in the dependency graph; you don't necessarily want your distributed scheduler to be a hard dependency for log ingestion or certificate issuing.
Third, I'm suspicious of any sort of advice that can be inverted without being obviously incorrect. Let's try that here (and also split/elaborate the tails):
> [Common Practice]: Don't Use Kubernetes, Yet. Use the simplest
> abstraction you need for now.
>
> Beginners: You should always use Kubernetes and other
> "correct" infrastructure. Best practices exist and should be
> followed without wasting time on the "why".
>
> Experts: Kubernetes should be the standard API between product
> and infrastructure. The additional local complexity introduced
> by containers pays off by reducing global complexity and
> enforcing shared technical contracts between teams.
This more closely matches my experience in the industry (beginners and experts both pushing for Kubernetes, with rejection of it by the "middle"). But! Big but! Note that both versions could be a sample of the same bell curve, depending on where you sliced it. Trying to allocate positions to beginner/journeyman/expert contains an implicit parameter of the writer's own location on the global curve, and which portions of it they have visibility into. > WSL is good enough for most things.
WSL1 is good for maybe 50% of things I tried - as it has rudimentary or nonexistent support for some syscalls - eg more advanced ptrace() commands are not supported, similarly not all clone() options work. And it's just the beginning of problemsIt's good for stdio/net code, but code which makes use of more arcane OS functionalities will frequently break.
I haven't met an expert that would advocate for WSL like that.
Think of the futility of ex-FAANG engineers who try to implement similar technology (e.g., reproducible and declarative build systems) at a 10-person startup.
The expert probably goes deep on some problems and punts on others depending on how intractable or voidable they might be in future, but I wouldn't say there is a hard/fast rule they can apply. Also, I suspect they probably avoid the worse technical debts you get in weaker teams, so even if they appear to leave technical debt in some cases these are rarer or mitigatable. We can look at their actions instead of their words to see what side of the divide they are truly on...
1: Optimization takes time, so optimize the critical sections (by choosing appropriate algorithms + data structures) and don't worry about the rest.
2: Don't optimize anything, just write code naturally. The libraries your code calls into are already fast enough because they're written by experts.
3: Optimizing makes code more complicated, so only optimize the critical sections (e.g. with vector intrinsics or atomic memory operations).
4: Just write the code naturally and avoid writing any slow code.
You could create many Twitter-appropriate bell-curve images out of a single real-life distribution of skills/experience.
Also, the endearing label for those of you in the middle of the bell curve is "midwit".
This meme can mostly be boiled down to accepting the constraints of reality and working around them. The midwit component of the meme is often something like "nooo, but everything has to be perfect".
Midwit is a pejorative label coined by Vox Day: https://www.midwit.com/midwit/
There's nothing "endearing" about it.