case study
LinkedIn Coach
The AI career coach: making generative AI feel like a colleague, not a chatbot.
LinkedIn shipped an AI career coach. The interesting question wasn’t “can we get the model to give good advice” — model quality wasn’t the bottleneck. The question was: what does it feel like to ask an AI for career advice on a platform where your professional identity is the product?
Context
By 2023 most “AI inside the product” surfaces had collapsed into either a sidebar chatbot or a textbox-with-better-autocomplete. Both patterns punted on the harder question — what role does the AI play in the user’s session? On LinkedIn, the user is presenting themselves; the AI’s job had to be coaching, not co-piloting. A coach answers fewer questions but asks better ones.
Move
I was leading the UI/Frontend of the application, and the work split cleanly into two infrastructure problems sitting on top of each other: the surface the user sees, and the surface the model writes into. Most teams shipping AI features were treating those as one problem — render whatever the model returns — and getting back UIs that read as generic chatbots regardless of how thoughtful the model behind them was. I argued they were two distinct contracts.
The user-facing surface had to feel like part of LinkedIn, not bolted to the side. That meant an inline coach inside the user’s profile context — not a chat sidebar — with a message thread, typing indicators that didn’t lie, a citations pattern for when the model referenced something the user had written, and a graceful state for when the model decided it didn’t have enough context yet. The shapes are familiar; the work was making them cohere as one surface instead of three.
The LLM-output surface was the harder layer. The model couldn’t return arbitrary HTML and the UI couldn’t render arbitrary prose — both directions break the contract. We built a small structured-output schema the model wrote into and the UI rendered from: question blocks, follow-up prompts, citation references, escape hatches. Once the model knew the shapes it could compose with, the voice work — ask before you answer, never use the I’d be happy to help you with that phrases, surface what you don’t know — had somewhere to live. Coaches don’t ingratiate. The system prompt did most of that work; the schema made sure the UI could honor it.
Outcome
What I took away: advice surfaces and answer surfaces want different scaffolding. An answer surface optimizes for speed-to-resolution; an advice surface optimizes for quality of question asked back. The team carried that distinction into the next round of AI features, and the chat-sidebar instinct stopped winning by default.
The other thing that stuck: the AI surface earned its place inside the product chrome rather than tacked on next to it. Once the coach lived in the same surface as the user’s profile, it stopped being “the AI thing” and started being part of how the product works. That re-frame mattered more than any single interaction we shipped.
What I’d do differently
I’d push back harder on shipping the coach without an explicit escape hatch into “just give me the answer.” Some users — usually the ones with the most specific context — wanted the question loop short-circuited, and the surface didn’t let them. A small affordance (“skip the questions”) would have respected those users without compromising the coaching pattern for the rest.
I’d also start the conversation with the model team about voice in week one, not week six. Style isn’t a finishing pass on top of an accurate model — it’s a constraint that shapes which evals you run and which examples you train on. Treating it as a design problem instead of an editorial one would have saved a round of rework.