My employer operates a hybrid working arrangement. Three days remote, two days in the office. This is, by most reasonable measures, a good deal. I am not commuting five days a week, I have a functional home working setup, and I am not completely isolated from other human beings. The two days in the office serve as a useful reminder that other people exist, occasionally have good ideas, and are sometimes a reasonable alternative to talking to myself. I own noise-cancelling headphones for the days when that assessment turns out to be optimistic.

The office itself has a theoretical capacity of around 750 staff, roughly 500 desks, and 300 parking spaces. The arithmetic does not add up, which is why there is a booking system. You book a desk. You book a parking space. You book meeting rooms. You do this through a web interface that is only accessible on the company network — either on-site or through the VPN. This is a reasonable security posture and an inconvenience I would not think twice about under normal circumstances.

My first two weeks were managed for me. My line manager booked my desk and parking space in advance and handed me a post-it note. This was genuinely helpful. My onboarding was the usual collection of new laptop, home working equipment, BitLocker PIN, and a small square of paper with locations on it. I arrived at the car park each morning, glanced at the post-it, found my space, got on with the day. Simple.

Week three. I am responsible for my own bookings. Day one of this arrangement I drive to the car park and reach the entrance before the obvious problem becomes apparent. I have not written anything down. The booking was made on a computer. The computer is in a bag. The information I need is inside a web application that requires a VPN that requires the computer to be open and connected. I am sitting in a car with the hazard lights on.

What followed was a small humiliation. I found a spot to temporarily stop, pulled out the laptop, entered the BitLocker PIN, waited for it to come back from hibernation, logged in, connected to the VPN, navigated to the booking system, and found my space. The whole process took several minutes. Other people drove past. I do not know if any of them saw me. I told myself they didn’t.

I thought: never again.

That evening I started building a solution. Now, the correct solution — and I can see this clearly as I write it — was to continue using a post-it note, or to write the booking in my phone’s notes app, or to send myself an email, or to do any number of things that would have taken approximately thirty seconds and required no code whatsoever.

I am a builder. I built an app.

The requirements were simple enough. I wanted to open something on my phone, see the desk and parking space for a given day, and not have to think about it any further.

I built it in Flutter with Firebase handling authentication and storage. Google Sign-In provides a one-time login, and bookings are stored against a user ID with a simple date-based structure. Open the app, sign in once, see a list.

The data model is uncomplicated. You pick a date from a calendar picker, type a parking space number, type a desk reference, save it.

The desk reference format at my office follows a pattern along the lines of floor, zone, number — separated by hyphens — which is clear on a desk sticker but annoying to type on a phone keyboard because it requires switching between numbers, letters, and symbols.

I noticed this on day one of using it and changed the input so you could type the components without the separators. The app formats the display correctly regardless. Small change, but it removed just enough friction to make the whole thing feel smoother to use.

The list view shows upcoming bookings in green, today’s in yellow, past ones in grey. You can swipe left to delete, swipe right to edit. It does everything I needed and nothing I didn’t.

The APK went to GitHub. I sideloaded it onto my phone. It worked.

The facilities team changed the game

I used it twice a week for about four months. Then the facilities team made a change.

Car park bookings were causing a specific problem: the booking system was showing the car park as full, but a physical walk around found empty spaces. The issue was abandoned bookings. The desk booking system addressed this by releasing desks back to available if you didn’t check in within an hour of your start time. The car park couldn’t do the same — visitors wouldn’t have system access to confirm arrival — so the facilities team did the obvious thing and disabled car park bookings entirely. You can now just turn up and take a space.

They called it a trial. I am writing this some sixteen months later. I think the trial has become the default.

At the time I thought it might end, so I didn’t remove the car park booking functionality. I just made it optional — a checkbox that says no parking space required, which bypasses any validation on that field. That took about ten minutes.

The app is still installed on my phone. I use it for desk bookings. It continues to work correctly. Nobody else has ever asked for a copy.

Solving problems the hard way

This was not a necessary project. The post-it note was adequate. A notes app would have been adequate.

What it was, was a way to take a small, slightly annoying problem and turn it into something I could build and finish quickly. The scope was contained, the feedback loop was immediate, and the result was something I actually used.

The app works. I used it. I learned from it.

That’s enough.

Tags