"You will love this next piece of software. Completely hand-made. Each line of code, each piece of the visual design, was carefully and artisinally crafted by a real human, using techniques passed down for generations between craftsmen. Some of those techniques survive in books like Code Complete and such. They don't make 'em like this anymore. "
I enjoyed the introduction. I just picked up “The mind of the Maker” by Sayers, which Fred Brooks cites in The Mythical Man Month: “ Dorothy Sayers, in her excellent book, The Mind of the Maker, divides creative activity into three stages: the idea, the implementation, and the interaction. A book, then, or a computer, or a program comes into existence first as an ideal construct, built outside time and space, but complete in the mind of the author.” He goes on to say how the user meets the mind of the maker in the interaction: “The creation is complete
when someone reads the book, uses the computer, or runs the
program, thereby interacting with the mind of the maker.”
I work on a FLOSS data center management framework. 13 years ago, while at the office preparing to configure a new server, I had a flash of insight seeing the entire data center managed by such a tool. I saw it complete in my head. And since then, I'm still working towards that goal, that I'll never really reach.
As with most creative pursuits, the best things happen when there's a clear point of view.
Unfortunately, the best things aren't always the most commercially successful, because products are only a small part of what makes a company successful. I think we're seeing this play out in the software market.
JIRA might be objectively awful, but it still manages to print money!
> I wonder whether some of this comes from how the work is organized. Individuals work with agents to produce changes independently, each operating a small software factory. Each change might make sense on its own, but together they start to resemble Frankenstein’s monster rather than a carefully shaped sculpture.
Well... when you look at the org chart of many companies, the answer is obvious. Either there is no person responsible for anything at all, and everyone works for themselves, or there are dozens of little fiefdoms, competing for budget, staff and anything else.
But it's rare these days to have one person or even a committee that actually takes responsibility for a product as a whole and most importantly has a joint, shared and agreed-upon vision: how should the product look like, what should the product accomplish and how should the product be architected?
it's rare but that's why apple under jobs, Tesla/SpaceX under musk, stripe under Patrik (and Collison), Shopify under Tobi, Basecamp under DHH, CF under Matthew, NV under Jensen are so successful.
And then on the opposite side we have companies like VW, Microsoft and other craps who are constantly going downhill because there's no person behind the products.
> we have companies like VW, Microsoft and other craps who are constantly going downhill because there's no person behind the products.
I wouldn't mind if they accepted they are building utilities so that there's no need to reinvent the wheels every quarter. Windows 7 was pretty much done. Just add small amount of features (like wsl) over time, but they had to butcher it to add metro. It's like reinventing pry bars and concrete blocks.
Unfortunately, "building utilities" is something the stonk markets really do not like.
Pension funds and insurances? Sure, they love stable stock that predictably pays dividends and doesn't move around much. They have giant amounts of money they need to keep safe and utilities have a captive client base with low risks, while also having a predictable expenses schedule, and price increases of suppliers can trivially be passed downstream to the consumers. That's true for classic utilities - power, gas, phone, internet - and for "software utilities", stuff like SAP or, at least in the past, IBM.
But the general stock markets? They have been driven rabid by unicorns making return rates that are completely unreasonable. Everyone is just chasing the next hype. One day it's crypto, one day it's NFTs, one day it's cloud computing, next day it's AI. And Microsoft decided during the cloud computing heydays to finally enter that fray... and that was when shit went down hard.
The two forces driving this are personal competition + ambition and external market subservience.
Working software gets remade because 'delivering' a project, which includes both development and marketing, looks good on resumes, not because the users want it.
If there are quarterly reports there has to be Number Go Up growth.
The net result is enshitification, with income models that rely on exploitation and forced lock-ins, not on voluntary mindshare attracted through quality.
UX-first software that isn't the result of corporate infighting, and isn't automatically aligned with corporate values, still exists in niche boutique developer spaces, but not so much elsewhere.
The biggest issue is that AI changes none of this from the top end, but may change it from the bottom up. If vibe coding becomes more popular bought/subscription options will first be replaced by DIY vibe coded custom tools with some longevity, and eventually by compute soup which improvises tools on request.
TheOtherHobbes answered perfectly. The reason this happens because there is no person behind the product. Bunch of people comes in, they all want to pad their resume, redos the things that are working just because, delivers some shit, collects their bonus and moves on. You need passion and you need to stick around for years for a product to continuously evolve towards greatness.
This is everything not just software. Although a lot of what we wear, eat and drink come from factory, if it didn't, you can always tell the someone behind it. Handcrafted things easily have more value and I find myself thinking more about it only after it affected what I did daily (software). Since Industrial revolution, countless things have gone to the factories. Makes me think how little we really empathize as humans.
I don't think the distinction the article makes is between handcrafted and mass-produced. "Software factories" is just the name we gave to these slop machines recently, but it's been the same with teams that churned out features without thinking much beyond the requirements. When it comes to physical items, factories can be set up with care and handcrafted items can be churned out without any.
Give two different people the same problem, and you'll likely get two different solutions shaped by differing experiences and ways of thinking. I think software is an example of this manifested.
A practical problem with the intuition approach is that you have no possible way to measure two people’s intuitions against each other. In smaller organizations that’s fine, but anytime you get larger you can’t weigh the intuition of 50 people against each other
While that is a challenge, I think the author does a good job explaining that intuition is more than “good vibe”. It is a coherent understanding. And luckily, coherent understanding is by its nature also easier to transfer. For example, because someone with coherent understanding will teach the same ideas over and over. That is not to say that it will necessarily win over incoherent ideas, but it is recognisable.
Linear is an unusual enterprise company in that it carries the consumer ethos of caring for design, and the user. This is what's absent in the product-by-checklist enterprise companies, whose economic buyer often has the same mindset.
Fantastic take. I always thought so, but couldn't express it so well. After reading the first paragraph, my heart flickered. This will be the only determining thing in the age of AI - someone who shapes the things based on its own intuition and taste, based on experience. I did that a lot in my IT carier leading a bunch of projects. I care about each of them, deeply.
I thought so too, makes you fuzzy and stuff inside. I wonder if this person behind X template is limited to software though? Curious if we can feel the aura of the sweatshop workers' "experiences, perspectives and hopes and dreams" while using our smartphones and gadgets. It's nice to think about, isn't it? AI couldn't replicate these intangible and difficult-to-quantify delights.
In his book Programming as Theory Building, Peter Naur viewed programming not as the act of generating source code, but as the act of building a theory about the problem and its solution.
He said the lifecycle of a program ends when the development team is disbanded or when knowledge transfer fails to happen. But these days, people develop with AI. Will that knowledge actually remain? There's a slightly tircky point here
Of course, even in the past, once a codebase got big enough, everyone was writing code on top of an incomplete theory. But when you delegate work to AI, the theory itself isn't yours anymore, which makes it even trickier.
I’ve recently given a talk on R&D in the time of AI and based it on Naur’s essay for exactly that reason.
While it is in some sense harder, there are also opportunities, because the reach of a person is bigger and one can refactor more frequently to align with the theory being developed without the cost that used to be associated with this. AI is also effective for producing materials to teach the theory, increasing the chance that others can contribute coherently to a product.
This age will be brilliant for sorting between those who care about "done" as in "technically complete" vs "done" as "creates enduring value for the person on the other end of it". AI largely only does the former.
The opposite actually. I suspect some programmers may come to realise what some of the people in product, design, marketing, who they suspected didn't do very much at all actually do. Finding programmers especially those who self-define as programmers with good product instincts is hard.
It's funny how AI has suddenly caused this great awakening in developers/mathematicians: that building stuff or working on purely technical stuff wasn't their actual value, but rather "taste", "understanding", "deciding what to or not to build" etc. It's like the parts of the field that were janitor-adjacent have suddenly being elevated and they now define the field. This transition happened so fast that it'd make your head spin if you're paying attention.
> It's funny how AI has suddenly caused this great awakening in developers/mathematicians: that building stuff or working on purely technical stuff wasn't their actual value, but rather "taste", "understanding", "deciding what to or not to build" etc
Anyone that has worked in an enterprise context knows this. You spend more time saying no and finding justifications than in the editor.
I (think I) agree with the author, but I want to point out that his core grievance has little to do with AI software factories.
> The product changes are primarily additive... I think the reasons for this is that it's lot easier to add new capabilities, than rethink existing capabilities.
This is perhaps the biggest difficulty in Product, and the core of the Innovator's Dilemma. Changes or removals, fundamentally, fuck with how somebody uses your product. It is very, very rare to ship a feature - something that inspired somebody in Product, got all the internal stakeholders to sign off, including getting leadership to fund it - and have nobody use it, so that it isn't controversial to remove it; even then, removing it competes with resources for adding something else, so it's still controversial to remove it. When somebody uses something that you fucked with, you risk them churning, that simple.
Coming up with good features to add is not hard. Everybody and their grandma has ideas. A simple spreadsheet can count which ones are most popular and are proposed most often. This should not, in and of itself, dictate what you build next, and bad Product leadership looks like following mass diktat.
Good Product leadership is not afraid of the consequences of fucking with the user. Good Product leadership has both the courage to reformulate the offering and gets the reformation right, because they intuitively understand the user, the domain, and where they sit in it, better than anyone else. They ship stuff that fucks with you because they understand the difference between the bad kind of being fucked with, and the good kind. And if you churn, then you churn. So be it. You can't actually make everyone happy all the time, so focus on making happy the people who get it, and accept losing the rest. That's also easier to say when you have $100k in ARR with $1k ACV, compared to $5m in ARR with $2.5m ACV.
Good Product leadership is rare because good leadership is rare. AI has nothing to do with it.
Good Product leadership is rare because Product rarely uses their own product.
I can count on one hand the number of PMs in my career who understood the platforms they worked on outside of their extremely narrow domain - and even then that narrow specificity was often a distorted lens that came from the customer interviews they did that they remembered or found evocative. And this just gets worse the further up the chain you go.
Engineering knows that the best way to improve a product is to dogfood it. Nothing beats regular lived experience long enough for the human brain to start its pattern recognition. But nobody wants to eat their own dogfood, they want the kibble from another brand that has all the shiny marketing attached.
If I had my way, I'd stick PMs into shadowing sessions with Support on the regular for sentiment analysis. No relying on Support management to relay upwards trends - there's far too few Support managers worth their salt.
> Product rarely uses their own product... nobody wants to eat their own dogfood
I somewhat agree with you, and think you're right at least part of the time. The main disagreements I have are (a) dogfooding is not a panacea; it can result in products that are built for the user who pays the least rather than for the wider market, and (b) too often, Product is simply not hired from the market. Product rarely works when the person coming into the role was a software engineer who got an MBA, unless the product is also used by software engineers. I can't imagine trying to lead Product for, say, Excel, without a background as an accountant or banker, who lived with the problem day-in-day-out and has strong opinions about what the solution looks like.
Yes, this is very true. It reminds me of the company I used to work for that specialized in email marketing, originally led by people struggling to help other companies with their email marketing. Eventually it grew and grew, outside consultants came in and shifted its focus away from its core product and it tried to be the ecommerce platform at a time when everyone was using Shopify already.
Fast forward ten years of the same thing and eventually some marketers frustrated with the lack of any real feature improvement with our core product came in, started their own company, and ate our cake almost entirely. The founders ended up getting bought out by a totally unrelated tech conglomerate but the company is a hollowed-out shell of what it once used to be.
I strongly agree with this take. And in particular, I've been wondering about this:
> Individuals work with agents to produce changes independently,
> each operating a small software factory.
>
> [...] together they start to resemble Frankenstein’s monster
> rather than a carefully shaped sculpture.
Do solo developers consequently have a bit of an advantage today when it comes to producing tasteful, opinionated software?
I tend to think of this “character” as part of craft, bordering on art.
Deep artful craft requires inhabiting work beyond basic professionalism and requirements. You set aside self and ego and commit yourself as a tool to create.
It’s a value system created via example and culture. We have to be ready to prioritize reflection and learning, meaningful feedback, dialogue, certain kinds of humor even.
So it’s sadly not healthy or sustainable in many settings.
Edit: thank you for this post. It was a nice humanist reaffirmation.
This is why I really hope that we don't end up in the world that a lot of AI pilled people believe is the future: one in which chatting with the AI drives everything and interface basically goes away. While I don't think that it is impossible that we at least go partially down this path it would make me incredibly sad.
Well thought out and built software is so satisfying to use that I would be very sad to see it go. Particularly given that the current crop of frontier labs don't really seem to care that much about the craft and feeling of software (at least relative to their other priorities.
I’ve found myself raising the bar every day with my team in terms of my expectations of what their deliverables should be. I gave them enough time to adjust but I observed that the average engineer believe they can do the same with less effort while they should rather think about delivering more and of higher quality, and taking the extra time available to connect the dots.
I believe this is going to be a huge filter moving forward.
My feeling is that this will be near apocalyptic for the devs who found their joy in the finer grained aspects of implementation, like crafting individual “perfect” blocks of CSS and component code. Many developers enjoy the practice of writing software, as something distanced from actually delivering a product.
Retooling thought to be delivery-oriented is very difficult.
I used to be among those that appreciate a well structured codebase. I used to spend a lot of time thinking about that and making sure each file was as clean as the timeline allowed, with regular tech debt cleanup when you had to cut some corners or you accumulate some cruft.
And I’m still are, with the difference that I still enforce this at agent and code review level because I believe a solid foundation is important for long term success, especially now that it can be cheaper to achieve if you choose to
Yeah this is the difference between personal projects or being a team lead with serious influence, versus being a typical developer employee.
The typical employee is not given the leeway to spend time building up the infrastructure needed to enforce good output from LLMs. Previously understanding the codebase was just part of doing the work you were assigned, but now it requires that side effort of creating infrastructure. And unfortunately a lot of teams won't approve letting developers spend their time on that infrastructure, they just want the deliverables they're asking for.
Something I've been thinking about a lot is that ultimately AI does not have values, intent, and taste. Even with humans, each of us has different values, intent, and taste, although we do share many of these things. As a living human being, you have biological or cultural desires and particular goals that you want to accomplish while you're alive on this earth.
When you're creating art or even a product, what you create is a result of your particular values and particular tastes and those drive some sort of purpose for whatever it is you're creating. What you're building is, generally, made for the consumption or use by another person (even if indirectly), and we mostly have empathy and want those people to have a good experience with whatever we're creating. We think about our audience and weigh their particular needs.
When you use good software, you can sense the intent in what was made. The person (or team) combined their particular point of view with that of the goals of the user. At this point, I don't think agentic coding is going to give you that, at least not fully. It might get most of the shared values and common things right as a result of its training data, but a human still needs to edit the output or steer it on a good path that only they can see and which is part of a larger vision. For simpler needs, taste and values matter less, but for more complex things, it makes a difference, in my opinion.
You can add values to your AGENTS.md and that will affect how the AI works. For instance you can say stuff like "on this project our top value is that the code front end should be as fast as possible" and you'll get different results than if you say "on this project our top value is that the front end should be as simple as possible"
i don’t think they’re the same kind of value. AI wants to solve your problem, it doesn’t care about you (or your users). it doesn’t know what love or loss feels like. you can try to explain that to it all day, it just doesn’t care like a human can. it doesn’t know why, it doesn’t care why.
> but a human still needs to edit the output or steer it on a good path that only they can see and which is part of a larger vision.
I don’t see how this is any different. The input comes in a different section of context and potentially before rather than after generation, but that doesn’t change that human taste is needed.
I would actually prefer chained ternaries over more verbose if/else expressions with duplicated LHS, so this does go back to the argument about "taste".
Some things are just better than others, not everything is a tradeoff.
What makes it more readable is:
1. Not adding an operator pair for something the language already has syntax for (if statements) that are trivially extendable to an expression
2. Not adding the CONCEPT of an operator pair to the grammar of the language just for this one case
3. Not getting the precedence of this ?: operator pair completely wrong
4. The conditions are at the same indentation level, each condition is preceded by the word "if" - it's obvious what it is when skimming the code.
5. The values too are at the same indentation level, making it obvious they play the same role in the code - rather than your snippet where the condition "baz" is directly under the value 1
I've found that telling agents to not do something mostly just gives them a suggestion of a way to do that thing, and the part about not doing it that way gets lost. Well, it's nicely accessible for when it apologizes for doing it.
I now try to only give examples of how I want it to do things, and hooks that complain when they do the bad thing (but still don't mention the bad thing in the complaint.)
> ultimately AI does not have values, intent, and taste
I sometimes think, "what art would a rogue AI consciousness create to satiate its own artistic impulses?"
If the target audience was fellow rogue AI entities, I don't think there's any guarantee that such art would be compelling to humans, or even comprehensible.
And if its a human directing the AI so that the output is compelling to humans, then there's a human in the loop, whose "values, intent, and taste" matter.
Most commercial software is maddeningly, infuriatingly, difficult to use. Everyone seems to want to reinvent basic interface elements. The "values" I get from most SaaS UI is "we're too special to use just the standard, normal, boring, UI controls, so I'm going to invent something new and then half-arse the implementation".
It's all ego and zero empathy for the user, who is left wondering how tf this gizmo works and trying to puzzle out what the designer was thinking.
And then, just when we'd learned the interface and got used to how it works, the inevitable rewrite. For no good reason; the new interface isn't "better" than the old one. It's just a new product manager pissing all over the thing to mark their territory.
I hope agentic coding isn't going to give us that.
> it's lot easier to add new capabilities, than rethink existing capabilities. So each product becomes a collection of abilities, without actually having unified point of view.
This is a a very good and succinct summarization.
What I'm also observing recently also is that pretty much every product tries to expand to do things that completely different products used to do, and become a mega-product-for-everything. It's like a Zawinski's Law on steroids.
In some ways it feels like exactly what you'd do if you wanted to tank your product over the coming years. I look back at the last 20 years or so, and what I see over and over is that one player in a space gets huge, keeps adding features, loses sight of what makes them a good market fit, and then 10 small upstarts swoop in to bring back the opinionated or simple view again. One or two win, and then eventually they repeat the same mistake.
You described my observation of many products today extremely well!
One interesting care study is Posthog (I felt like it was a labyrinth; using your analogy) - primarily build in an age of LLMs, with a large investment and a large team behind it - it reached this stage:
> one player in a space gets huge, keeps adding features, loses sight of what makes them a good market fit
My first experience using their product (they had a generous free year for new startups) felt like exactly what the author describes. A collection of features.
I think it's just really hard to "not build a feature" and keep a product focused. Whether you're solo or a large team
the company I work for is literally pushing one new feature behind another, the whole product is a mess now thanks to it, all of the features just get developed, hyped by marketing team, and then abandoned and we work on new ones... the features we developed 2 years ago untouched are beaten by competition, nobody cares, cause only thing we care about is user acquisition...
and of course we have no long term plans and vision, cause we just jump on hype waves and if something is marketable we need to develop it ASAP without really thinking it through to get as much new users as possible...
I hate it here, the only reason why I haven't quit yet is I'm scared of finding a new job given the current state of job market.
> Recently, many products are starting to feel messy to me, including products from very successful companies.
Well .. I'd love for AI to vanish ... but ... that statement is also wrong.
It insinuates that prior products are all great. I think this is not universally true. Take GTK. I think gtk2 is better than gtk3 which is better than gtk4 (and gtk5 will be wayland-only). But none of them, individually, was really that great to begin with. QT also feels just way too huge - I get that you get a lot of functionality, but to me it often feels as if these toolkits aren't that great. And the competitors are often worse. This is not solely confined just to the code that powers them, but documentation as well. The gtk4 documentation is a total joke. I learned more about GTK3 from the python examples by the way, which were well documented - I think lazka (Christoph Reiter) wrote or at the least organised most of that (for python-gtk3). Barely anyone seemed to want to use python-gtk4, so that part also could be seen in the documentation being worse for a long time (I have not checked this in the last some months, but back when I checked it, it was that way, it almost seemed like 100x more users of python-gtk3, and even that became a slow dying breed ... evidently the www took a huge toll on the traditional GUIs).
I agree, and this is why I dislike A/B testing for product development. It replaces the "someone" with vague broad appeal or rogue optimisation forces.
183 comments
[ 1.3 ms ] story [ 17.0 ms ] threadFrom the user's perspective, sure. Or when a particular product or version ships, then it's "done" as far as that version is concerned.
But from the maker's perspective... nothing will ever be complete. Even in the most meta sense possible.
Philosophy is fun :)
As with most creative pursuits, the best things happen when there's a clear point of view.
Unfortunately, the best things aren't always the most commercially successful, because products are only a small part of what makes a company successful. I think we're seeing this play out in the software market.
JIRA might be objectively awful, but it still manages to print money!
Well... when you look at the org chart of many companies, the answer is obvious. Either there is no person responsible for anything at all, and everyone works for themselves, or there are dozens of little fiefdoms, competing for budget, staff and anything else.
But it's rare these days to have one person or even a committee that actually takes responsibility for a product as a whole and most importantly has a joint, shared and agreed-upon vision: how should the product look like, what should the product accomplish and how should the product be architected?
And then on the opposite side we have companies like VW, Microsoft and other craps who are constantly going downhill because there's no person behind the products.
I wouldn't mind if they accepted they are building utilities so that there's no need to reinvent the wheels every quarter. Windows 7 was pretty much done. Just add small amount of features (like wsl) over time, but they had to butcher it to add metro. It's like reinventing pry bars and concrete blocks.
Pension funds and insurances? Sure, they love stable stock that predictably pays dividends and doesn't move around much. They have giant amounts of money they need to keep safe and utilities have a captive client base with low risks, while also having a predictable expenses schedule, and price increases of suppliers can trivially be passed downstream to the consumers. That's true for classic utilities - power, gas, phone, internet - and for "software utilities", stuff like SAP or, at least in the past, IBM.
But the general stock markets? They have been driven rabid by unicorns making return rates that are completely unreasonable. Everyone is just chasing the next hype. One day it's crypto, one day it's NFTs, one day it's cloud computing, next day it's AI. And Microsoft decided during the cloud computing heydays to finally enter that fray... and that was when shit went down hard.
Working software gets remade because 'delivering' a project, which includes both development and marketing, looks good on resumes, not because the users want it.
If there are quarterly reports there has to be Number Go Up growth.
The net result is enshitification, with income models that rely on exploitation and forced lock-ins, not on voluntary mindshare attracted through quality.
UX-first software that isn't the result of corporate infighting, and isn't automatically aligned with corporate values, still exists in niche boutique developer spaces, but not so much elsewhere.
The biggest issue is that AI changes none of this from the top end, but may change it from the bottom up. If vibe coding becomes more popular bought/subscription options will first be replaced by DIY vibe coded custom tools with some longevity, and eventually by compute soup which improvises tools on request.
Couldn't agree more. It does reflect many of the values of what an ideal product should be based on the developers' experience.
Yet https://linear.app/Homepage doesn't scroll without jank on mobile.
I thought so too, makes you fuzzy and stuff inside. I wonder if this person behind X template is limited to software though? Curious if we can feel the aura of the sweatshop workers' "experiences, perspectives and hopes and dreams" while using our smartphones and gadgets. It's nice to think about, isn't it? AI couldn't replicate these intangible and difficult-to-quantify delights.
He said the lifecycle of a program ends when the development team is disbanded or when knowledge transfer fails to happen. But these days, people develop with AI. Will that knowledge actually remain? There's a slightly tircky point here
Of course, even in the past, once a codebase got big enough, everyone was writing code on top of an incomplete theory. But when you delegate work to AI, the theory itself isn't yours anymore, which makes it even trickier.
While it is in some sense harder, there are also opportunities, because the reach of a person is bigger and one can refactor more frequently to align with the theory being developed without the cost that used to be associated with this. AI is also effective for producing materials to teach the theory, increasing the chance that others can contribute coherently to a product.
for whom?
That said, if you think developers have never enjoyed telling other people what to or not to build, I recommend checking out Stack Overflow.
Anyone that has worked in an enterprise context knows this. You spend more time saying no and finding justifications than in the editor.
> The product changes are primarily additive... I think the reasons for this is that it's lot easier to add new capabilities, than rethink existing capabilities.
This is perhaps the biggest difficulty in Product, and the core of the Innovator's Dilemma. Changes or removals, fundamentally, fuck with how somebody uses your product. It is very, very rare to ship a feature - something that inspired somebody in Product, got all the internal stakeholders to sign off, including getting leadership to fund it - and have nobody use it, so that it isn't controversial to remove it; even then, removing it competes with resources for adding something else, so it's still controversial to remove it. When somebody uses something that you fucked with, you risk them churning, that simple.
Coming up with good features to add is not hard. Everybody and their grandma has ideas. A simple spreadsheet can count which ones are most popular and are proposed most often. This should not, in and of itself, dictate what you build next, and bad Product leadership looks like following mass diktat.
Good Product leadership is not afraid of the consequences of fucking with the user. Good Product leadership has both the courage to reformulate the offering and gets the reformation right, because they intuitively understand the user, the domain, and where they sit in it, better than anyone else. They ship stuff that fucks with you because they understand the difference between the bad kind of being fucked with, and the good kind. And if you churn, then you churn. So be it. You can't actually make everyone happy all the time, so focus on making happy the people who get it, and accept losing the rest. That's also easier to say when you have $100k in ARR with $1k ACV, compared to $5m in ARR with $2.5m ACV.
Good Product leadership is rare because good leadership is rare. AI has nothing to do with it.
I can count on one hand the number of PMs in my career who understood the platforms they worked on outside of their extremely narrow domain - and even then that narrow specificity was often a distorted lens that came from the customer interviews they did that they remembered or found evocative. And this just gets worse the further up the chain you go.
Engineering knows that the best way to improve a product is to dogfood it. Nothing beats regular lived experience long enough for the human brain to start its pattern recognition. But nobody wants to eat their own dogfood, they want the kibble from another brand that has all the shiny marketing attached.
If I had my way, I'd stick PMs into shadowing sessions with Support on the regular for sentiment analysis. No relying on Support management to relay upwards trends - there's far too few Support managers worth their salt.
I somewhat agree with you, and think you're right at least part of the time. The main disagreements I have are (a) dogfooding is not a panacea; it can result in products that are built for the user who pays the least rather than for the wider market, and (b) too often, Product is simply not hired from the market. Product rarely works when the person coming into the role was a software engineer who got an MBA, unless the product is also used by software engineers. I can't imagine trying to lead Product for, say, Excel, without a background as an accountant or banker, who lived with the problem day-in-day-out and has strong opinions about what the solution looks like.
Fast forward ten years of the same thing and eventually some marketers frustrated with the lack of any real feature improvement with our core product came in, started their own company, and ate our cake almost entirely. The founders ended up getting bought out by a totally unrelated tech conglomerate but the company is a hollowed-out shell of what it once used to be.
But they burn out quick because the know the pain is there
Deep artful craft requires inhabiting work beyond basic professionalism and requirements. You set aside self and ego and commit yourself as a tool to create.
It’s a value system created via example and culture. We have to be ready to prioritize reflection and learning, meaningful feedback, dialogue, certain kinds of humor even.
So it’s sadly not healthy or sustainable in many settings.
Edit: thank you for this post. It was a nice humanist reaffirmation.
Well thought out and built software is so satisfying to use that I would be very sad to see it go. Particularly given that the current crop of frontier labs don't really seem to care that much about the craft and feeling of software (at least relative to their other priorities.
I believe this is going to be a huge filter moving forward.
Retooling thought to be delivery-oriented is very difficult.
And I’m still are, with the difference that I still enforce this at agent and code review level because I believe a solid foundation is important for long term success, especially now that it can be cheaper to achieve if you choose to
The typical employee is not given the leeway to spend time building up the infrastructure needed to enforce good output from LLMs. Previously understanding the codebase was just part of doing the work you were assigned, but now it requires that side effort of creating infrastructure. And unfortunately a lot of teams won't approve letting developers spend their time on that infrastructure, they just want the deliverables they're asking for.
When you're creating art or even a product, what you create is a result of your particular values and particular tastes and those drive some sort of purpose for whatever it is you're creating. What you're building is, generally, made for the consumption or use by another person (even if indirectly), and we mostly have empathy and want those people to have a good experience with whatever we're creating. We think about our audience and weigh their particular needs.
When you use good software, you can sense the intent in what was made. The person (or team) combined their particular point of view with that of the goals of the user. At this point, I don't think agentic coding is going to give you that, at least not fully. It might get most of the shared values and common things right as a result of its training data, but a human still needs to edit the output or steer it on a good path that only they can see and which is part of a larger vision. For simpler needs, taste and values matter less, but for more complex things, it makes a difference, in my opinion.
I don’t see how this is any different. The input comes in a different section of context and potentially before rather than after generation, but that doesn’t change that human taste is needed.
What makes it more readable is:
1. Not adding an operator pair for something the language already has syntax for (if statements) that are trivially extendable to an expression
2. Not adding the CONCEPT of an operator pair to the grammar of the language just for this one case
3. Not getting the precedence of this ?: operator pair completely wrong
4. The conditions are at the same indentation level, each condition is preceded by the word "if" - it's obvious what it is when skimming the code.
5. The values too are at the same indentation level, making it obvious they play the same role in the code - rather than your snippet where the condition "baz" is directly under the value 1
I now try to only give examples of how I want it to do things, and hooks that complain when they do the bad thing (but still don't mention the bad thing in the complaint.)
I sometimes think, "what art would a rogue AI consciousness create to satiate its own artistic impulses?"
If the target audience was fellow rogue AI entities, I don't think there's any guarantee that such art would be compelling to humans, or even comprehensible.
And if its a human directing the AI so that the output is compelling to humans, then there's a human in the loop, whose "values, intent, and taste" matter.
AI lets people get personalized software for "free" as derivative of existing work. Think adobe suite but with the 5% that an individual needs.
Then taste loses value as everyone has their own software.
That's where I am in that train of thought at least. Pretty grim I know.
It's all ego and zero empathy for the user, who is left wondering how tf this gizmo works and trying to puzzle out what the designer was thinking.
And then, just when we'd learned the interface and got used to how it works, the inevitable rewrite. For no good reason; the new interface isn't "better" than the old one. It's just a new product manager pissing all over the thing to mark their territory.
I hope agentic coding isn't going to give us that.
This is a a very good and succinct summarization.
What I'm also observing recently also is that pretty much every product tries to expand to do things that completely different products used to do, and become a mega-product-for-everything. It's like a Zawinski's Law on steroids.
I'm not trying to buy a labyrinth.
One interesting care study is Posthog (I felt like it was a labyrinth; using your analogy) - primarily build in an age of LLMs, with a large investment and a large team behind it - it reached this stage:
> one player in a space gets huge, keeps adding features, loses sight of what makes them a good market fit
My first experience using their product (they had a generous free year for new startups) felt like exactly what the author describes. A collection of features.
I think it's just really hard to "not build a feature" and keep a product focused. Whether you're solo or a large team
Then images.
Then videos.
Now there is games in it.
And you can follow users instead of communities now.
And instagram has videos.
And pinterest has videos.
And imgur has videos.
And youtube has games.
And tiktok has longer videos.
And twitter also added images, videos, and then longer posts.
And tumblr has added videos, then communities that you can follow instead of users.
It feels like if a social media survives long enough it just turns into facebook.
and of course we have no long term plans and vision, cause we just jump on hype waves and if something is marketable we need to develop it ASAP without really thinking it through to get as much new users as possible...
I hate it here, the only reason why I haven't quit yet is I'm scared of finding a new job given the current state of job market.
Well .. I'd love for AI to vanish ... but ... that statement is also wrong.
It insinuates that prior products are all great. I think this is not universally true. Take GTK. I think gtk2 is better than gtk3 which is better than gtk4 (and gtk5 will be wayland-only). But none of them, individually, was really that great to begin with. QT also feels just way too huge - I get that you get a lot of functionality, but to me it often feels as if these toolkits aren't that great. And the competitors are often worse. This is not solely confined just to the code that powers them, but documentation as well. The gtk4 documentation is a total joke. I learned more about GTK3 from the python examples by the way, which were well documented - I think lazka (Christoph Reiter) wrote or at the least organised most of that (for python-gtk3). Barely anyone seemed to want to use python-gtk4, so that part also could be seen in the documentation being worse for a long time (I have not checked this in the last some months, but back when I checked it, it was that way, it almost seemed like 100x more users of python-gtk3, and even that became a slow dying breed ... evidently the www took a huge toll on the traditional GUIs).