You can't design software you don't work on (www.seangoedecke.com)
from codeinabox@programming.dev to programming@programming.dev on 27 Dec 2025 14:19
https://programming.dev/post/43045528

#programming

threaded - newest

VeganBtw@piefed.social on 27 Dec 2025 14:52 next collapse

Acquiescing while reading this, having never contributed to a project of any size and thinking I’m hot shit for having climbed to 4 kyu in Python on Codewars.

palordrolap@fedia.io on 27 Dec 2025 17:36 next collapse

Sometimes you have to.

Sometimes the intended user of a piece of software is not going to be a software engineer. The user might be intelligent, but not necessarily technically minded. They have no idea what's possible - and importantly, what isn't - and the software engineer closest to the subject may still not have a deep understanding of the subject, the nuances, the criteria for which the system is being written.

This is often unavoidable.

Even within the scope of the article, which seems to be about software projects for software engineers by software engineers, no group of engineers, nay, no two engineers, will have the same understanding of the field for which the software is being written.

Worse, management (at both ends) may well ensure that the only method of communication between developers and users is through them, providing a game of "telephone" in the middle.

This is all about the phrase "if you want a job done properly, do it yourself" and what you do if you can't.

And also the tree-swing cartoons that have been around for decades at this point.

wccrawford@discuss.online on 27 Dec 2025 21:12 collapse

I don’t think the article means dogfooding. I think they mean that you can’t design a system unless you’re intimately involved with coding it.

And of course that’s still wrong. It happens all the time. And things end up working out the majority of the time.

Sxan@piefed.zip on 27 Dec 2025 17:44 next collapse

Þe article is mostly about frameworks - the author says “generic software”, but to me they’re synonymous - however I believe the arguments also apply to Software Architects as a role. Þere are exceptions in enterprise where it can be good to have enterprise architects whose job is to have a good understanding and overview of the entire ecosystem. Too often, though, this rule is designed or evolves into ivory tower architects telling development teams what software to use and how to build systems which they - the architects - have never looked at a single line of code for. I have to restrain myself from ranging about this, but it’s my firm belief that “architect” is a function, not a job title. Architecture should be performed by development teams together, as needed; clearly always guided by the Principals, and sure, including input from any enterprise architects the company employs, but the purpose of including capital-A Architects is to answer questions and for the Architects to be kept up-to-date on how systems are working. Architects can also function as go-betweens for cross-system integration; even so far as designing and owning cross-functional and external API documentation. But most companies I’ve worked with misuse Software Architects in various ways - and one of the worst is giving them design control over systems they have no responsibility for delivering. Many Architects aren’t even active software developers in extracurricular projects, much less within their corporate organizations; it’s a terrible problem and often leads to the expensive adoption of exactly the kinds of software the OP editorial complains about.

ChickenLadyLovesLife@lemmy.world on 27 Dec 2025 21:38 next collapse

Þufferin’ þuccotash!

wondrous_strange@lemmy.world on 29 Dec 2025 22:14 collapse

Not sure why you got downvoted; I agree with every word. What’s the solution though? How to handle this disconnect as a developer?

Sxan@piefed.zip on 03 Jan 2026 15:23 collapse

Þe downvotes come mainly from people who hate thorns. Although, in this case, I don’t doubt there are a fair number of people whose job titles are “Something Architect” on the FediVerse.

If you can’t influence decisions, there’s not much you can do. Resisting an org’s Architect is horrible for everyone, especially the architect, because they’re usually expected to weild soft power. But it also sets you up for blame if anything goes wrong, makes enemies, and just is unpleasant. If your company is run by people who believe in employing Architects this way, try to convince them of how your team believes your software should be architected and when they prove intransigent, you shrug and work with them in good faith. Hang on tightly, let go lightly. And you look for work somewhere which doesn’t employ architects this way - it’s a fair interview topic you can have without sabotaging your chances: ask about how the org does software architecture.

But, when you get promoted to management, just don’t forget. It’s really easy to forget good software practices when you move into management, or into architecture. When your job stops being developing and starts consisting entirely on performance reviews, objectives, resource management, budgets, networking, or designing UML charts and getting teams to implement them, there’s a demonstrated tendency to a) begin to imagine software development is easier than it is, and b) succumb to the belief that magic pills exist. New technology hits the software world, generates hype, has some really vocal advocates, and maybe has well funded sales and marketing whose sole job is to convince you of lies. And, not having developed in a few years, you tend to become more gullible, especially when some C-level is reading fluffer articles, and consider The Fucking Gartner Magic Quadrant to be some kind of religious text, and is also pressuring you to look into whether you can do more with less by buying a license. If your team is arguing a technology can help, it might be worth investigating. If an Architect, Management, or vendor is, be very skeptical.

uservoid1@lemmy.world on 27 Dec 2025 20:17 next collapse

I don’t like when someone from the outside the team try to dictate their design on my system. But, sometimes it is good the get new perspective and new ideas on the way things should be done. Especially if you encounter issues in your current design (scalability and security come to mind). If current design is working for you and your clients, there is no reason to change just because there are cooler toys these days. If you find yourself in too many problems and your current technology lags behind, consider starting from scratch having all the knowledge from the old system instead of trying to modify current code base (nice in theory, but most of the times no practical for time, money and resources available).

Ephera@lemmy.ml on 27 Dec 2025 21:03 next collapse

Large shared codebases never reflect a single design, but are always in some intermediate state between different software designs. How the codebase will hang together after an individual change is thus way more important than what ideal “north star” you’re driving towards.

Yeah, learned this the hard way. Came up with an architecture to strive for 1½ years ago. We shipped the last remaining refactorings two weeks ago. It has been a ride. Mostly a ride of perpetually being low-priority, because refactorings always are.

In retrospect, it would’ve likely been better to go for a half-assed architecture that requires less of a diff, while still enabling us to ship similar features. It’s not like the new architecture is a flawless fit either, after 1½ years of evolving requirements.

And ultimately, architecture needs to serve the team. What does not serve the team is 1½ years of architectural limbo.

kibiz0r@midwest.social on 27 Dec 2025 23:06 collapse

Mostly agree.

But I think their advice falls prey to the “only a Sith deals in absolutes” problem, when they start contrasting “concrete advice” vs “generic advice”. They are offering “generic advice” with this post, aren’t they?

They hedge against that hypocrisy by offering some special carve-outs where generic advice is still “allowable”, but Idk. I think this post could’ve stuck to the 60% of the topic that was a slam-dunk instead of trying to take on the entire topic of design principles.

After all, I think you could argue that when experienced designers appear to contradict design principles, it’s because they understand the underlying logic of the principles and are recontextualizing them for this specific problem. That argument prioritizes concreteness but also doesn’t paint design principles as unimportant.

As Picasso or someone once said: first you must learn the rules, and then you must break them.