I have a pet peeve, and it’s badly designed software. Ugly software, for a start: in this day and age, there’s no excuse for ugly. But worse than ugly is software that makes the people using it pay for the shortcuts of the people who built it.
And while I’m at it: why is software sold to governments and institutions so reliably crap? I have a theory. The people who choose it are almost never the people who have to use it, the contract runs for a decade whether it’s any good or not, and the people stuck with it every day don’t get a vote. Nobody who signed the contract has ever had to use it to sign a field-trip form.
The tax on bad software
Every confusing label is a few seconds of someone squinting. Every extra click is a few more. Every “just remember to do this first” in a training session is a mistake waiting for someone who wasn’t in the room. Bad design is a tax, and it’s never paid by the people who designed it. It’s paid by the parent at the kitchen table at 9:30 at night, the school secretary on the first day back, the teacher entering marks on a Sunday.
Good engineering costs the builder something once. Bad engineering costs every user something every day, forever. I find that deeply irritating, in the way only something that’s both avoidable and widespread can be.
The parent portal
In British Columbia, every public school, and a lot of independent ones, runs on a system called MyEducation BC. Parents see it through a web portal: report cards, attendance, permission forms, schedules. I see it as a parent. And I saw the problems. Oh yes, I did.

- The top third of the home page is a stock-photo banner, over the heading “Welcome to MyEducation BC Production”. Production is the name of the server. It’s been shown to every parent in the province.
- Below that, three empty tables, each saying “No assignments scheduled.”
- The thing I actually needed to do, sign a stack of permission forms, was in a four-column table in the lower right, with a typo: “Recieve Form”. Opening the first form took five clicks.
- The Family tab opens an administrator’s data grid, with columns headed
LegalLastandLegalFirst. Even with one child, you click on a surname to get in. - Grades are labelled
Clssrm,TdyandDsm. The table scrolls sideways on a desktop monitor. One filter is labelled “4 Term 10-12 2023 English %-LG”. - Attendance shows “0 of 0 selected” above “No matching records”.
- Emergency contacts are sorted by a number called Priority, from 1 to 99.
- Nearly everything opens in a popup window, including the calendar you use to pick a date.


Clssrm, Abs, Tdy, Dsm: classroom, absences, tardies and dismissals, if you know the code. Sample data.None of these is a disaster on its own. Together they’re the tax: a portal that works, technically, while asking every parent to learn to read a database.
Refresh
So, that evening, I wrote a browser extension to fix what I could from my side of the screen. I called it Refresh for MyEducation BC. It runs only on the MyEducation BC site, and only in your browser, and it redraws the parent portal: what needs doing goes first, labels are in plain language, names are written first name first, and the popups open in a panel on the page instead.

The rule I set for it was rebuild, don’t patch. Refresh draws its own interface, but it keeps the site’s real forms on the page, hidden, and its buttons drive them. It never invents a submission, and it never moves a control out of the form it belongs to. If a page doesn’t look the way it expects, it leaves the page alone. Being clever about someone else’s permission forms is how you end up consenting to a field trip you didn’t mean to.

It came to about 3,350 lines of JavaScript and CSS. It asks for one browser permission (to remember whether it’s switched on), it has no server, and nothing you see on MyEducation BC leaves your computer. It was on the Chrome Web Store by the next morning.

What’s underneath
Restyling a website from the outside teaches you a lot about it. Some of what I found was cosmetic. Some of it wasn’t. The report card was published on the Home page while the Documents tab, where you’d look for it, was empty: two places for one thing. Legal and preferred names were mixed from page to page. The system was clearly built around the people who administer it, and the parent view was a thin coat of paint on top.
You can only fix so much with paint. The things that bothered me most, the ones that cost teachers and office staff real time, weren’t on any page I could restyle. They were in how the system works.
The next afternoon, between updates to the extension, I started planning a student information system. It seemed like an obvious question at the time.
How hard can it be?