Skip to content

October City

--:--

Austin

--:--

The distance · Ascend · 2025 to now

Eight hours away, and in the room anyway.

Ascend runs travel for people who fly business and first class and expect every detail handled. I joined in April 2025 as a senior frontend engineer, working from October City with a team in Austin, Texas.

One working day across two cities. The shaded hours are when both are awake and working.

13:00 October City

05:00 Austin

The title said frontend.

Two of us cover the frontend of every portal the company runs on, and I own my work end to end, from the first description of a feature to the day it ships. The work didn't stay in the frontend. I write the server code my screens depend on, the layer that sits between the interface and the core API, while a separate team owns the core itself. I run the deployments and the monitoring, with alerts that reach the team in Slack before a customer notices. I sit in the roadmap conversations, because someone needed to see the whole workflow, from a client's request to the concierge's screen.

Some of the features I'm proudest of were never asked for. I watched how the team worked, proposed what they were missing, and built it end to end.

When a colleague was out for two weeks, I picked up their areas as well, invoices, credits and refunds, and the assistant's conversations, and kept the releases going for the rest of the team.

What the title covered, and what the work covered
The title
Screens
Backend endpoints behind the screens
Deployments and releases
Monitoring and alerts
Roadmap conversations
The work

17:00 October City

09:00 Austin

Built for the people who plan the trips.

Most of my first year went into the tools the concierge team uses all day: a guided way to create a trip, pulling a trip's details straight from a screenshot, pairing flights across several cities, cancelling one booking without breaking the rest of the trip, checking a trip is ready before it goes out, and swapping a flight leg in a single move.

Then two things I owned from the first sketch to production: the workspace where the team plans every trip in one place, and the dashboard leadership reads the business through.

Trips workspace

Dashboard

Built from the first sketch to production.

A trip, before it goes out

  • Flights paired
  • Hotels confirmed
  • Ground transportNeeds attention
  • Dining
  • Documents
An illustration of the check that runs before a trip goes out.

Small things, traced all the way down.

The bugs I remember aren't the big ones. They're the small ones that turned out to be something else.

09:00 October City

The date that moved back a day.

A concierge noticed a flight showing one day early in a list, and correct everywhere else. The list was reading a plain date, September 7, as midnight in UTC. In every US time zone, that moment is still September 6. I didn't patch the list. I changed how every date without a time is read, as a calendar day where the reader is, and pinned the tests to New York time so the bug can't come back quietly.

UTC

00:00

Sep 6
Sep 7

New York

Sep 6
Sep 7

20:00

Read as a calendar day: Sep 7

11:00 October City

The date the model added.

Concierge staff create a trip by uploading a screenshot of the flights, and a model reads it. Some trips started coming out a day too long. I proved the screens, the math, and the saving were all right, and traced it to the model itself: it was giving next-day arrivals to same-day flights, mostly long westbound flights and short hops after an overnight leg. A model like that will never be right every time, so the team's review stays the real safeguard, and the screen now warns when a date looks like one the model tends to get wrong.

The flight

Departs 11:05, Sep 7

Arrives 14:20, Sep 7

Westbound

What the model read

Arrives Sep 8

Check this date
An illustration of the kind of flight the model misread.

15:00 October City

Five requests where there should be one.

While checking a new reporting screen, I watched the network panel and saw the same request go out five times on one page load. The report wasn't the problem. The shell that wraps every page in the portal changed its layout a moment after loading, so every page was being built twice. I fixed the shell, confirmed on the live site that five requests became one, and shipped it as its own change, because it touched every screen in the portal.

Before: 5 requests

ShellLayoutPagePage

layout changed after load

After: 1

19:00 October City

The check that could never fail.

A rule meant to keep parts of the code apart reported zero problems, every time. I don't trust a check I've never seen fail. It had a broken pattern inside it, so it couldn't fail, while more than seventy crossings it should have caught sat in the code. The same pass found over twelve hundred lines of duplicated code that nothing used.

0 reported

78+ actual

1,286 unused lines

21:00 October City

13:00 Austin

The numbers that didn't add up.

Leadership wanted reporting by partner: which companies send us clients, and how those clients do. The design assumed one field in the customer record already named the partner. Before building on it, I checked it against production, read-only. It was barely filled in.

The truth was spread across three places that had never been connected: the landing page each partner has, where the sign-up came from in the sales tool, and a free-text field in the customer record. So I built the reporting on the one source that was reliable, and wrote down, step by step, how to connect the three so it stays fixed.

  1. Partner landing pages
  2. Sign-up source
  3. Free-text field
One number
Three systems that had never met.
Two levels

All partners

One partner, in detail

How I ship.

Production releases here are built by hand-picking reviewed changes from staging, so nothing unreviewed rides along. Once, bringing main back into staging ran into conflicts. I stopped the merge instead of forcing it, and made it a rule: pick only what's new, and never merge back.

On a large refactor, I wrote the plan and every task in it. An AI agent carried it out phase by phase, one change per phase, and reported every check green. Then a separate, fresh session audited the result against the plan, and the audit changed how one of the tasks was done. That's why the audit is there.

I also run my own sprint system: a folder for every sprint, a stable name for every action, a board I can read at a glance, and a written definition of done. When something is finished, I can say which kind of finished it is.

StagingReleaseMain

Held: not reviewed yet

I write the plan
An agent builds it, phase by phase
A fresh session audits it

One task changed

What's next.

Right now I'm building open canvas mode, a new way to work inside the concierge portal. Nobody asked for it. I watched the team juggle ten tabs to plan one trip, so the screens they already use become windows on a single surface, connected to each other, with a trip, its bookings, and its invoice side by side. It's rolling out carefully, a few people at a time, next to the classic view, which stays exactly where it is.

Trip
Bookings
Invoice

18:00 October City

10:00 Austin

Twice, from the people I build for.

Ascend is a concierge company. Most of the people there plan trips, look after clients, and keep operations running. The engineers are a small team inside it, and most of what we do never shows up on anyone else's screen, except as a tool that works.

Each month the company names one person its star of the month. I was named twice: in October 2025, and again in August 2026. I don't know exactly what was counted, and I didn't ask. What I do know is that it came from a company whose days run through the tools I build.

The company's slide: FlyFlat Star of the Month, October 2025, with Mohamed Farahat's photo and title, Front End Developer.

October 2025

The company's slide: Star of the Month, August 2026, with a photo of Mohamed Farahat reading in a library.

August 2026

The slides shown at the company's monthly all-hands. The first carries Ascend's former name, FlyFlat.
The engineers
Not to scale. Most of the company works with clients, not code.

Distance stops mattering once people stop noticing it.