Tag Archives: design

Software design critique: dnf

I just posted the following comment on a Reddit thread entitled “Strange/confusing dnf and package management quirks”:

Possibly related: I just spun up an old Fedora (27) box I hadn’t used in several years, and went through the process of reacclimating myself to dnf to upgrade things, etc.

In general, I think the “porcelain” for dnf is not very good. It feels like there is no designer (in the Fred Brooks sense) in charge of its development.

It would be nice if the hypothetical chief dnf designer could limit themselves to like 5-7 commands (aka human working memory) with a “flags budget” of 1-2 flags per command. The current situation feels very messy, like people are just hacking on stuff (which is probably what is happening, since this is software).

All i really need from a dnf user porcelain is:

  • dnf update: update all packages on the system to latest versions
  • dnf search $string : show all packages matching $string
  • dnf upgrade $version: just do all the crap to upgrade me to version $version. Especially don’t nag me about stupid intermediate states (‘did you run “dnf upgrade –verify”?’ or whatever is, frankly, a sign of bad design – if the software knows about the intermediate state, then it should handle it)
  • dnf install $pkg: install $pkg
  • dnf uninstall $pkg: uninstall $pkg

Everything else IMO should be punted to RPM and custom scripts, for people who have weird needs.

I’m probably dropping a bunch of use cases on the floor that are “really important” to that one dnf hacker or enterprise customer. But the design above would be perfect for my (end-user) needs. Current situation is very “google random commands, copypasta, and pray”. Current design has way too many bolts and knobs sticking out.

In general, I feel that most software design eventually falls victim to the “thousand hackers making their little semi-random PRs that make sense individually” approach unless there is a big meanie design chief standing at the bridge saying “YOU SHALL NOT PASS”. Which there approximately never is.

Thoughts on Rewrites

As a user, when I hear engineers start talking about doing a rewrite of an application or an API that I depend on, I get nervous. A rewrite almost never results in something better for me.

Based on personal experience, I have some (possibly unfair) opinions:

  • Rewrites are almost always about the engineering organization
  • They are almost never about the end users
  • Inside any given organization, it’s very difficult for people to understand this because their salary depends on them not understanding it
  • Attempts at rewriting really large apps rarely get to a state of “fully done”, so the engineers may end up with a Lava Layer anyway
  • Except now users are angry because features they depended on are gone

Why am I writing this? Because I’m still mad they took away my Opera.

Until recently, I’d been using Opera for over a decade. By the time Opera 12 came out, it was amazing. It had everything I needed. It was lightweight, and could run on computers with less than a gig of RAM. With all of the keyboard shortcuts enabled, I could slice and dice my way through any website. I could browse the web for hours without removing my hands from the keyboard, popping open tabs, saving pages for later reference, downloading files. It was amazing.

Oh, and Opera also had a good email client built in. It was, like the browser part, lightweight and fast, with keyboard shortcuts for almost everything. It also read RSS feeds. Oh, and newsgroups too. It had great tagging and search, so you could really organize the information coming into your world.

Then they decided to take it all away. They didn’t want to maintain their own rendering engine anymore. They let go of most of the core rendering engine developers and decided to focus on making Yet Another Chromium Skin ™. No mail reader. Most of the keyboard shortcuts gone. Runs like shit (or not at all) in computers with 1 gig of RAM.

I realize I got exactly what I paid for. But if you are wondering why users get twitchy when engineers and PMs start talking about rewrites, wonder no longer.

After Opera stopped getting maintenance, I switched back to Firefox, and fell in love with Pentadactyl, the greatest “make my browser act like Vim” addon that ever was.

Can you guess what happened next? Yep, they decided to rewrite everything and break the addon APIs. I know they had some good reasons, but those reasons meant the end of my beloved Penta. Now I am back to using Firefox with Vimium (like an animal), and I suppose I should be grateful to have even that.

And don’t get me started on my experiences with “REST APIs”, especially in a B2B environment.

Related: