Good Articles

Good Articles

110 bookmarks
Custom sorting
Two types of software engineers
Two types of software engineers
One assumes it's easy because it's a non-technical problem, the other assumes that's why it's hard
·registerspill.thorstenball.com·
Two types of software engineers
GitHub - ClickHouse/NoiSQL: NoiSQL — Generating Music With SQL Queries
GitHub - ClickHouse/NoiSQL: NoiSQL — Generating Music With SQL Queries
NoiSQL — Generating Music With SQL Queries. Contribute to ClickHouse/NoiSQL development by creating an account on GitHub.
This is a fun project and neither a good nor convenient solution to a problem. Better solutions exist. There is not much sense in this project, although it can facilitate testing ClickHouse. You could argue that modern AI, for example, Riffusion, can do a better job. The counterargument is - if you enjoy what you are doing, it's better not to care if someone does it better but with less pleasure.
·github.com·
GitHub - ClickHouse/NoiSQL: NoiSQL — Generating Music With SQL Queries
Juice
Juice
What is Juice in software development. What is Game Feel & how it can it be used in non-game software. How software can fulfil emotional requirements. How to create software with soul. Examples of Juice on the web.
·garden.bradwoods.io·
Juice
I’m a very slow thinker | Derek Sivers
I’m a very slow thinker | Derek Sivers
Then a few days later, after thinking about it a lot, I have a response.
People say that your first reaction is the most honest, but I disagree. Your first reaction is usually outdated. Either it’s an answer you came up with long ago and now use instead of thinking, or it’s a knee-jerk emotional response to something in your past.
·sive.rs·
I’m a very slow thinker | Derek Sivers
PAGNIs: Probably Are Gonna Need Its
PAGNIs: Probably Are Gonna Need Its
Luke Page has a great post up with his list of YAGNI exceptions. YAGNI—You Ain’t Gonna Need It—is a rule that says you shouldn’t add a feature just because it …
·simonwillison.net·
PAGNIs: Probably Are Gonna Need Its
Preemptive Pluralization is (Probably) Not Evil
Preemptive Pluralization is (Probably) Not Evil
What if we just assumed we might have two of everything?
Before you write any code — ask if you could ever possibly want multiple kinds of the thing you are coding. If yes, just do it. Now, not later.
Pagination. To quote Simon Willison, co-creator of Django, “Refactoring an existing non-paginated API to support pagination will break everything. Better to fake pagination but only ever return a single page, just in case”.
I’ve done this refactoring a million times. I’ll be like, I thought there would only ever be one subscription team, user plan, name, address , and it always ends up being like, “Oh, actually there’s more.” I almost never go the other way. What if you just paid the upfront cost of thinking “This is just always a collection”?
It is a LOT easier to scale code from a cardinality of 2 to 3 than it is to refactor from a cardinality of 1 to 2. This is a fundamentally under-appreciated nonlinearity. In other words, Preemptive Pluralization can make the difference between “sure, I’ll add that today” and “this is going to take us 2 months and we’ll introduce merge conflicts with every other in-progress feature.”
If a small, typical feature request can throw your whole design out of whack, then you have fragile code. Clearly you want the opposite of fragile — I am tempted to call it “Antifragile” because that gets clicks — but really the best you can hope for is code that mostly doesn’t fall apart due to 1-2 standard deviation changes in requirements. In other words: robust code. Robust code is optimized for change (more in a future blogpost).
More awkward things to pluralize: Single tenant open source -> Multi tenant hosted service Versions -> from no version to v1/v2, or going from “legacy”/“new” to “new new” (hence Stripe just uses dates) Number of independently shipping frontends in your company (hence module federation) Number of clouds in your company (you think you will avoid this… until you can’t, per the Hashimoto lemma)
More from @nivertech on Twitter: in-memory→persistent single node→cluster single language→i18n no pagination→pagination single user→multi-user single tenant→multi-tenant single branding→white-labeled free→paid hard-coded configs→separate config from code hard-coded features→feature flags online-first→offline-first web-first→mobile-first no 3rd party API→API-first DB-specific→ORM local desktop SW→Client/Server Client/Server→P2P Centralized→Decentralized Static→Dynamic SSG→SPA
·swyx.io·
Preemptive Pluralization is (Probably) Not Evil
Only Debate The Non-Linear
Only Debate The Non-Linear
I sometimes feel like the course of my career has been one long vacillation1 between being too argumentative and too deferential. I’ve often struggled specifically in work contexts to discern when …
In fairness to myself, I’ve also come into contact with many other people who struggle with this. I can’t count how many people I’ve worked with who casually made requests for significant changes to other peoples’ work, often for spurious benefit and with horribly inopportune timing. Funnily enough, those are the exact people who I’ve historically avoided debating with, either due to a (often mistaken) belief that they simply knew better, or due to an (often correct) understanding that these people are just not worth debating. I hope that someday my career rewards me for at least thinking about whether it’s worth having certain debates, because it would break my heart to find out that what society really values are those sorts of inconsiderate boor.
I’ve just as frequently seen unthinking accession to other peoples’ decisions go just as poorly. I’ve seen this referred to as “false harmony” in management articles, and it can mean that teams fall into bad patterns just for the sake of collegiality.
People who try to present as supremely confident3 will often seek conflict (or at least domination) in trivial matters. People who outwardly present as low in confidence will often avoid open disagreement, even when they have meritorious doubts about an issue. This can, over time, destabilize organizations.
At some point in their careers, most engineers come to a realization: we are not rewarded for linear outputs. Most engineers will tell you that the transition from a junior engineer to a senior engineer, or the truly transformational work in our careers, does not come from just crushing tickets non-stop for extended periods of time. Similarly, these transitions don’t come from implementing some n+1 product feature that you’re told is very important. Instead, engineers are most valued6, and therefore most rewarded, for non-linear impacts.
As a concrete example, I would rather implement a self-service e-commerce platform for a company’s merchandising team, rather than make it easier for engineers to service a ticket to build a /products/hat/:id endpoint every 6 weeks.
Non-linear Drag is a term I use to describe factors that lead to exponentially decaying productivity over time. Most folks would probably lump this in with “tech debt”, a term I doubt ever really had a lucid definition. I think precision matters when you’re offering people a razor, so I want to differentiate this form of tech debt, which generally involves bad architecture or fundamental technology mismatches, versus things like an increasing support surface8
Linear impacts and drags exist, and they’re generally the majority of what we encounter Non-linear impacts and drags exist, and the opportunity to create them is definitionally rare Engineers receive outsized rewards for the non-linear impacts they create9
Only debate the non-linear. If there is a strong case to be made that a proposal will create some non-linear impact, then it is worth debating at some length.
·thelog.farm·
Only Debate The Non-Linear
How to Create Luck
How to Create Luck
Your entire worldview changes when you realize you can *create luck*.
·swyx.io·
How to Create Luck
They're rebuilding the Death Star of complexity
They're rebuilding the Death Star of complexity
I started my career in programming during heydays of Java Enterprise Edition (J2EE). This was late 90s/early 00s, and there was a rich ecosystem of enterprise vendors hawking application servers, monitoring tools, and boxes upon boxes of other fancy solutions. These tools were difficult to learn, expensive to license, and required an a...
Beware carnies dressed as storm troopers. The circus empire is always coming to town. Keep a safe distance, a skeptical mind, and one hand on your wallet.
·world.hey.com·
They're rebuilding the Death Star of complexity
The Four Interfaces of SaaS product suites
The Four Interfaces of SaaS product suites
There needs to be a handbook for anyone turning a monolithic application into a service-oriented SaaS product suite. The same things keep…
·medium.com·
The Four Interfaces of SaaS product suites
The Sage's Garden - by Simon Sarris
The Sage's Garden - by Simon Sarris
Once an austere philosopher left his home in search of the path to a sweeter life. He traveled through lands of great antiquity, and before long was told of a sage. Not only was this sage greatly respected, compared to gods and kings, and untroubled by the world, he was also said to maintain a happy disposition and tranquil nature. The source of the sage’s happiness rested in his garden, where he often dwelled.
·simonsarris.substack.com·
The Sage's Garden - by Simon Sarris
What the Mouse Knows - by Simon Sarris
What the Mouse Knows - by Simon Sarris
It is not down in any map; true places never are. — Ishmael, Moby Dick I am fond of the mouse. Everywhere beset by larger powers, he succeeds with a wisdom of his own. He prospers by careful study of the world, and his profit is the knowledge overlooked by the bigger creatures. Humans may have built the house, but it is the mouse who knows all its passages. There is forever an unknown world within the known, forever more to uncover, and here is a creature dedicated to finding the cracks in reality. We would do well to learn from him, to cultivate
·simonsarris.substack.com·
What the Mouse Knows - by Simon Sarris
XY problem - Wikipedia
XY problem - Wikipedia
The XY problem is a communication problem encountered in help desk, technical support, software engineering, or customer service situations where the question is about an end user's attempted solution (Y) rather than the root problem itself (X).[1]
·en.wikipedia.org·
XY problem - Wikipedia
Why long-term plans don't work and how to fix them
Why long-term plans don't work and how to fix them
Yearly software development plans are my favourite genre of fiction. In the fabulous world of yearly plans, product developers assume they know exactly what ...
·lucasfcosta.com·
Why long-term plans don't work and how to fix them
Type III error - Wikipedia
Type III error - Wikipedia
In statistical hypothesis testing, there are various notions of so-called type III errors (or errors of the third kind), and sometimes type IV errors or higher, by analogy with the type I and type II errors of Jerzy Neyman and Egon Pearson. Fundamentally, type III errors occur when researchers provide the right answer to the wrong question, i.e. when the correct hypothesis is rejected but for the wrong reason.
·en.wikipedia.org·
Type III error - Wikipedia
The Most Precious Resource is Agency - by Simon Sarris
The Most Precious Resource is Agency - by Simon Sarris
The world is a very malleable place. When I read biographies, early lives leap out the most. Leonardo da Vinci was a studio apprentice to Verrocchio at 14. Walt Disney took on a number of jobs, chiefly delivering papers, from 11 years old. Vladimir Nabokov published his first book (a collection of poems) at 16, while still in school. Andrew Carnegie
·simonsarris.substack.com·
The Most Precious Resource is Agency - by Simon Sarris