Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Our recruiters ship software now

This page is also available in Deutsch, Español, Français, Italiano, 日本語, and Português.

By Vadim SoloveyJul 28, 20268 min read
Vadim Solovey

About Vadim Solovey

Founded DoiT in 2011 and have been here ever since — in every flavor of CTO, co-CEO, and now CEO. I started my career in 1999 building data centers before anyone called it "the cloud," and I've spent the two decades since trying to deliver on what the cloud was actually supposed to be. I still write code most weeks.

My personal page

A year ago, careers.doit.com was a HubSpot page with filters that didn't work. If you clicked "Customer Experience" category, you'd see maybe a third of the open roles, because jobs in Greenhouse are tagged with child departments and the site never walked the hierarchy. Candidates were applying through an embedded iframe that looked like it was designed in 2014, because it was.

Today the same team that used to file tickets about that page owns a production Next.js application running on Google Cloud Run. It serves the public careers site, and behind a login it runs an AI job description builder, a candidate sourcing tool, an application screener, a compensation review workflow with approvals, a blog editor for employee stories, and a Slack bot that announces new roles. The talent acquisition team didn't hire an agency. They didn't wait in the engineering backlog. They built it, with one engineer and a lot of Claude.

I want to share how this works, because I think the model is repeatable and most companies are overcomplicating it.

PerfectScale™ for Kubernetes

Ready to optimize?

Get your free Kubernetes savings analysis

The Applied AI engineer

The core of it is a role we call the Applied AI engineer. It's a software engineer whose full-time job is to be embedded inside one business team. Not a consultant who takes requirements and disappears for a quarter, and not a platform team building "AI enablement" for everyone and no one. One engineer, one team (our People Ops team, in this case), sitting in their meetings, feeling their annoyances.

Our talent acquisition team, which sits inside People org, got one. The engineer's mandate was simple: automate what's boring, build what's missing, and teach the team to do more of it themselves over time.

That last part matters most. We measure the engineer by how much the team can ship without them, not by their own output.

Specs turned out to be the real work

The careers site rebuild started with a document, not code. We wrote a long markdown spec describing everything: the Greenhouse department hierarchy and exactly how filters must traverse it, the application form fields, the redirects from old URLs, the accessibility bar, even the mistakes the old site made that must not be repeated. That file went into the repo as CLAUDE.md, and Claude Code built the site against it.

What I didn't expect was that the recruiters could read the spec. They corrected it. "The recruiter screen is 30 minutes, not 45." "Jobs get tagged with the child department, that's why the filters break." Domain knowledge that would normally get lost in a game of telephone between a PM and a contractor went straight into the source of truth.

We now write a spec like that for every internal tool. The JD builder spec runs about ten pages and includes the exact prompts, the scoring rubric, and open questions for stakeholders. Writing it took days. The working tool took less time than the spec did. That ratio still feels strange to me, and I've stopped expecting it to flip back.

What they actually built

The public site is the visible part: custom application form talking directly to the Greenhouse API, a hiring map, job alerts, proper SEO and AEO, and a branded confirmation email the moment you apply. Nice, but that's table stakes.

The internal tools are what actually changed the team's week:

JD Builder. Anyone at DoiT can generate or rewrite a job description. AI writes it in our voice, and while you edit, AI also re-scores the draft every second or so across five dimensions: inclusion, tone, completeness, readability, and whether a strong candidate would actually stop scrolling. Import an open role from Greenhouse, fix it, push it back. The target we set: from "I need a JD" to published in under 15 minutes, with an inclusion score of 85 or better. Hiring managers stopped sending drafts to TA for rewriting. They self-serve.

JD Builder

Our internal job description builder system

Candidate Sourcing. A recruiter picks an open role and the tool reads the job description, has AI write a search query plus verification criteria, and hands those to a web research API that finds around 250 matching people and digs up their professional emails. The criteria encode what we've learned about who thrives here, like candidates coming from companies that sell to platform and DevOps teams. Outreach happens from the same screen, over LinkedIn and email, with starred leads, notes, and contact tracking. Sourcers stopped juggling browser tabs and spreadsheets.

Candidate Sourcing

Candidate sourcing UI

Candidate Screener. Volume is where hiring breaks humans, so this one matters most. A recent opening drew about 2,200 applications; Greenhouse's own filters got that down to roughly 1,100 active candidates. The screener pulled each one's resume, screening answers, and profile from Greenhouse and had AI score them against eight universal traits plus the role's specific requirements. Every candidate gets a written assessment, and I mean every one: a summary, strengths with evidence quoted from the resume, concerns worth probing in an interview, and trait scores, with a link back to their Greenhouse profile. We set the threshold at 96 and ended up with 61 strong candidates. That's a shortlist a hiring team can actually sit down and review together, and export to CSV when they do. The role we ran it on? Our next Applied AI engineer. It felt fitting.

Candidate Screener

Screening candidates with AI classifier

Comp Review. When a Doer applies to an internal role in Greenhouse, a webhook builds the compensation review draft before anyone asks for it: current salary, bonus, equity, and promotion history from Rippling API (our HR systen), plus a salary band computed from peers in the same role and region. Then it notifies the recruiter, the manager, the skip-level, the HRBP, and the department head on Slack. What used to be a week of spreadsheet archaeology and email chases is now an approval flow with reminders.

Comp Review

Compensation review system

Slack announcements. New roles get posted to Slack the moment they open, with the recruiter and hiring manager tagged, the internal applications deadline attached. Doers are made aware of new roles immediately and can consider internal mobility if it fits their career aspirations.

Slack announcements

Internal Slack notifications

None of these would have cleared the bar for engineering roadmap time. Together they changed how the team operates.

Your cloud bill shouldn't be a mystery

Optimization, automation, expertise. In one platform.

The part that deserves caution

Screening is the most consequential place we've pointed AI at, and I want to be honest about both sides of it.

The case for it is strong. The screener reads candidate number 1,100 with the same attention and the same criteria as candidate number 1. Humans can't do that. We get tired, we anchor on the last resume we read, and by late afternoon we're pattern-matching on the wrong things. A person buried at position 900 in the pile gets a fair read from the machine that they were never going to get from an exhausted reviewer. I'm a strong advocate for AI in exactly this spot.

But AI carries its own biases, and a consistent bias applied to 1,100 people at once is a different kind of problem than an inconsistent human one. So the screener produces a shortlist and a list of concerns to probe; people make every decision after that. And before this graduates from experiment to established internal tooling, we owe ourselves an open conversation about fairness, transparency, and guardrails. We're having that conversation now, out loud, and I'd encourage any company doing this to have it before the tool works well enough that nobody wants to.

What I'd tell another CEO

Start from a broken thing, not an AI strategy. We didn't set out to "adopt AI in HR." We set out to fix a careers site with broken filters. The rest compounded from there, one annoyance at a time.

One repo, shared plumbing. Every tool lives in the careers repo and reuses the same Greenhouse and Rippling integration and auth. The second tool took a fraction of the effort of the first. The fifth was almost free.

Non-engineers review outcomes, not code. Our recruiters can't read TypeScript and don't need to. They can tell you in seconds whether a generated JD sounds like us, and the quality dashboard gives them a shared language for what's off. Trust the domain expert to judge the output, let the agent and the engineer worry about the diff.

The costs are boring. A fast, cheap model for real-time scoring, a strong model for generation, a container that scales to zero when nobody's hiring at 3am. This is not a big line item. The expensive part is the engineer's salary, and one engineer per team is the whole point.

The unglamorous truth is that most of the value came from a person who cared, sitting close to the work, with a coding agent that removed the excuse of "we don't have engineering capacity." That combination is available to almost any company right now.

And if the kind of place where recruiters ship production software and the CEO writes specs sounds like your kind of place, the careers site the team built is at careers.doit.com. The filters work now; I checked.