Monday, November 3, 2025

Week Summary: Making Software More Reliable and Less Frustrating

Photo of Paul
Paul (Founder)

Paul is a software architect and director at Phillip James Lettings, who have arranged thousands of tenancies over twenty years. LetAdmin is what happens when you know both sides.

Weekly Updates

The week nobody should notice

This week was all about making things work better without changing what they do.

No flashy new features. No exciting announcements. Just fixing frustrating problems that make software feel unreliable and slow.

Two main improvements:

  1. Real-time updates that preserve your work instead of deleting it mid-typing
  2. Property search that finds what you're looking for instead of showing alphabetical noise

Both are the kind of improvements you shouldn't notice—because software should just work. But you'll definitely notice the absence of frustration.

Problem 1: Real-time updates were deleting work

Last week I added real-time synchronization—when someone updates a property or inspection, everyone viewing it sees changes instantly. No manual refresh needed.

It worked. But it had a nasty side effect:

Your field agent is typing inspection observations on their phone. Office staff updates the inspection status. The field agent's screen refreshes. Half-typed observation vanishes.

This happened because the old system sent complete screen updates through WebSockets—replacing everything on your screen, including form inputs you're actively typing in.

Technically impressive. Practically frustrating.

This week I rebuilt the real-time update system to send only changed data, not entire screen replacements. Your field agent's observation stays intact. The status badge updates. Everything else on screen is untouched.

What changed for agencies:

  • Form inputs don't disappear mid-typing
  • Scroll positions stay put (no jumping to top of page)
  • Expanded sections stay expanded
  • Your work is preserved, updates still sync instantly

Time saved: ~12-20 hours per year per field agent (no more retyping lost observations)

Problem 2: Property search was alphabetically useless

If you manage 30 properties, alphabetical search works fine. Scroll through, spot your property, done.

At 150 properties? Alphabetical search becomes a time-wasting nightmare.

Example: Landlord calls asking about "that Victoria Road property we discussed last week." You search "Victoria Road." Fifty-three alphabetical results. The one you need? Buried on page 2.

This is ridiculous. Your software knows which properties match better (exact references, headline matches, recently updated), but it's sorting alphabetically anyway.

This week I rebuilt property search to rank results intelligently:

  1. Exact reference matches appear first (searching "VIC123" shows VIC123 immediately, not buried after 40 "Flat" properties)
  2. Headline matches rank higher than description matches ("Victoria Road" in headline > "near Victoria Road" in description)
  3. Recently updated properties get priority (property you worked on yesterday > property untouched for 6 months)
  4. Typo forgiveness ("Hig Street" finds "High Street", "streat" finds "street")

What changed for agencies:

  • Find properties in 12 seconds instead of 45 seconds
  • Top result is usually the property you want (no clicking through 3 wrong ones first)
  • Phone queries feel faster (landlord calls, you find property immediately, appear competent)

Time saved: ~35 hours per year per staff member (~105 hours per year for 3-person office)

Why this week matters

Neither improvement is sexy. Real-time updates already worked—just unreliably. Search already worked—just slowly.

But these "boring" improvements matter more than new features because they affect every single interaction with the software, hundreds of times per day.

Frustrating real-time updates × 20 times per day × 250 work days = 5,000 moments of frustration per year.

Slow search × 15 times per day × 250 work days = 3,750 wasted search experiences per year.

Fix the boring stuff, eliminate thousands of tiny frustrations, and suddenly the software feels dramatically better—even though it looks the same.

The technical honesty bit

Last week I used a framework feature (Turbo Streams) because it promised "real-time updates without writing JavaScript." Sounded great. Ship features fast.

It worked, but it was wrong.

Turbo Streams broadcasts HTML fragments through WebSockets. Clever in theory. Fragile in practice:

  • Loses client-side state (form inputs, scroll positions)
  • Hard to debug (HTML strings in WebSocket inspector)
  • Wasteful (8KB HTML fragments vs 2KB JSON messages)

This week I replaced it with a simpler approach: ActionCable broadcasts JSON describing what changed, Alpine.js components update themselves. More code. Less magic. Way more reliable.

Lesson learned: Early in a project, magic frameworks help ship features fast. Once you know what you're building, remove the magic and build proper architecture.

Also: rebuild things that "work but not well enough." Turbo Streams worked—updates happened. But unreliable is unacceptable for production software.

What agencies actually get

If you're running a letting agency, here's what this week's work means:

More reliable multi-staff coordination: Field agents and office staff can work simultaneously without losing each other's work.

Faster property search: Find properties in seconds, not minutes. Landlord calls feel snappier. Phone queries don't involve awkward holds while you hunt through alphabetical results.

Fewer weird software moments: Text inputs don't vanish. Scroll positions don't jump. Search results make sense. Things just work.

Better mobile experience: Smaller update payloads (70% reduction) mean faster sync on mobile connections.

Honestly, you shouldn't notice most of this—which is the point. Good software feels invisible.

The bugs that appeared (and got fixed)

Week 44 introduced bugs. There are always bugs.

Bug 1: PDF downloads failing in production

  • Worked in development, failed in production with multi-tenant subdomains
  • Root cause: signed S3 URLs using wrong domain
  • Fixed: proper subdomain handling in URL generation
  • Time to fix: 45 minutes

Bug 2: Email race conditions

  • Two staff sending emails simultaneously caused failures
  • Root cause: missing idempotency keys
  • Fixed: proper job ordering and duplicate prevention
  • Time to fix: 30 minutes

Bug 3: Pagination highlight weirdness

  • Alpine.js reusing DOM elements with duplicate keys
  • Wrong pages highlighted in pagination controls
  • Fixed: unique key generation per pagination instance
  • Time to fix: 20 minutes

Each bug taught me something about how staff actually use the system vs how I thought they'd use it.

Next week: hopefully new features

This week was infrastructure improvement. Necessary but not exciting.

Next week I'd like to build new features instead of refactoring old ones.

But at least the foundation is solid now. Real-time updates work reliably. Search is fast and accurate. Software feels stable.

Building new features on stable foundations is way easier than building on fragile ones.

We'd Love to Hear from You

How many staff at your agency work with properties/inspections simultaneously? Multi-staff coordination matters more as team size grows.

How much time do you waste searching for properties in your current system? Most agencies underestimate this—dozens of small delays daily adding up to hours monthly.

What software frustrations slow your agency down most? We're building LetAdmin based on real agency workflow needs.

Get in touch: paul@letadmin.com


LetAdmin is in active development, built by letting agents for letting agents. These reliability improvements are being used at Phillip James (370+ properties) with multiple field agents and office staff coordinating daily. If you're interested in seeing how it works or want to join the priority list, we'd love to hear from you.