It's a great time to be a software engineer in Seattle or the Bay Area. But it is much less fun when you're on the hiring side of the table. I wanted to share a few pieces of advice for all the smaller companies that don't have unlimited money or a Google reputation to work with.
The key is differentiation. If you do what everybody else is doing, then you're just another indistinguishable sheep.
Idea one: private offices. The open floor plan is the status quo, but it is a terrible experience for employees. With a pile of money spent on acoustics and visual clutter, it can be made a mediocre experience instead. The purported collaboration benefits just aren't there. Real estate is expensive, but not in comparison to developer salaries. I know more than a few great engineers who'd take a decent paycut to get a private office with their name on the door.
Idea two: hot languages. Some programming languages are passionately loved but scarce in terms of job openings. They may be inherently niche, like Haskell and Erlang, or relatively young, like Rust. Offering jobs for them puts you on the radar of some very talented engineers. We actually did this at Tune in the early days of Go. The downside is a limited library ecosystem; there was no official AWS SDK for Go back when we started.
Idea three: go remote. A mediocre Seattle or Bay Area salary puts you top-of-market in most parts of the world. Compensation packages in the tech hot spots are still going up, so it's only going to get worse. That's also increasing retention pressure for your existing engineers. I would strongly consider assembling a distributed team. Western Europe is my top pick for location. The salaries there are astonishingly low, English is widely spoken, time zone differences are manageable, and there are strong legal protections for IP.