All work

MHVillage

Senior Software Engineer · May – Oct 2022

Contract
PHP Symfony Angular NgRx PostgreSQL Redis TypeScript

Context

MHVillage is the largest manufactured and mobile home marketplace in the United States — around 25 million annual shoppers, tens of thousands of listings and communities, and several billion dollars in transactions flowing through the platform each year. It’s a vertical marketplace in the mold of Zillow, but for a category of housing that Zillow doesn’t model well: factory-built homes, often placed on leased land inside managed communities, with financing and ownership structures that don’t look like traditional real estate.

That domain complexity is invisible to a casual shopper, but it reaches into every layer of the codebase. A “listing” isn’t a house and a plot of land — it’s a home, which might or might not be tied to a lot, which might or might not be inside a community, under any of several ownership models. Multiply that by search, lead routing, seller tooling, and SEO-critical page generation, and you get an engineering surface area larger than it looks.

I joined as a solo contract hire for a six-month engagement — brought in to ship features across the product, work on performance and developer experience, and mentor the existing in-house engineering team.

What I Did

Feature work across the product. Shipped user-facing features across buyer, seller, community operator, and dealer workflows — listing management, search, notifications, account tooling. Work wasn’t scoped to one area; I moved wherever the roadmap needed weight, which meant touching most of the surface area of the application.

Performance on a read-heavy platform. Most MHVillage traffic is shoppers browsing — search pages, listing pages, community pages. Read performance is the product. I focused on the paths that carried the most traffic: Postgres query profiling and index work, Redis caching for hot listing and search endpoints, payload reduction on image-heavy responses, and cleaning up NgRx state patterns that were re-rendering more than they needed to. Gains on a read-heavy platform compound quickly — small wins on a single endpoint multiply across tens of millions of requests.

Developer experience. Put sustained effort into the day-to-day ergonomics that the in-house team felt on every PR. Cleaner review patterns, better local development setup, tighter feedback loops between writing code and seeing it run. DX improvements don’t show up on a roadmap but they change the rate at which everything else ships.

CI/CD modernization. The existing pipeline was slow and partially manual. I rebuilt it for speed and reliability — cut build times materially, added test automation where coverage was thin, tightened the deploy path, and introduced checks that caught regressions before production. The goal was to make shipping feel boring so the team could focus on building instead of babysitting releases.

Team leadership and mentorship. Worked alongside the existing developers as a technical lead — unblocking, pairing on harder work, raising the team’s overall velocity. A lot of the lasting value of the engagement landed here. Features ship once; a team that levels up keeps shipping after the contractor leaves.

Technical Details

The stack is a PHP/Symfony backend with PostgreSQL for primary storage and Redis for caching. The frontend is Angular with NgRx for state management. It’s a mature, serious codebase serving serious traffic — which means most of the interesting engineering problems are in the seams: query patterns against a domain model that doesn’t fit standard real estate assumptions, cache invalidation across listing updates, NgRx store discipline on pages with dozens of interacting components, and build tooling that has to keep up with all of it.

Shipping meaningful wins on a system that size is less about dramatic rewrites and more about surgical instincts. Find the slow thing, understand why it’s slow, fix it without breaking adjacent code, repeat. The domain rewards engineers who slow down enough to understand why something is modeled the way it is before refactoring it.

Outcome

Delivered feature work across buyer, seller, and operator surfaces, landed measurable performance improvements on the read paths that carry the most traffic, and rebuilt CI/CD to ship faster and more reliably. The team was in better shape at the end of the engagement than at the start — both in the codebase and in the engineers maintaining it.