init.ai2015 - 2017Co-Founder & Head of Product DesignAcquired by Apple

Teaching computers how to talk

In 2015, everyone was sure messaging would replace apps. The harder problem - the one nobody was really solving - was simpler than it sounded: how do you build a conversational app when there's no GPT to call? You have to teach the machine yourself.

The highlights

wealth.ai - the conversational banking app that came first
The Teach flow - roleplaying both sides, tagging slots and intents inline
Techstars Boulder, 2016 class
The init.ai console - training data view
Robot and human high-five - the customer-service pivot
The init.ai team outside 1 Infinite Loop, visitor badges on
01/06
2015Founded
2016Techstars, Boulder
2017Team joined Apple
01

The problem

Keith and I backed into init.ai. We'd been hacking on a conversational banking app when it became clear the infrastructure underneath was the real product - so we pivoted, brought on Kyle and Will, and officially formed the company in 2015, peak conversational-commerce hype. Chris Messina had just coined the term and Facebook was opening Messenger to bots. The interesting problem wasn't building bots - it was giving developers the tools to build good ones.

If you wanted your app to understand "I need to reschedule my flight to Thursday," you had to train a model to do that. And to train a model, you needed training data. And to get training data, someone had to sit down and write it - dozens of example conversations, annotated with intent and meaning.

That authoring problem - the interface between what humans mean and what machines understand - was the design problem. My job was to make that process fast, intuitive, and (ideally) not miserable fun.

init.ai brand illustration - a hand chatting with a phone
02

The markup language

At its core, we built tools that annotated and trained ML models. The first challenge we faced was how do we build an authoring tool for this? Building a UI back then was pretty difficult. We needed to annotate training data which, in UI, meant doing a lot of text selection and labelling intent definition. So we started with the underlying data structure instead. If the UI was going to take a long time to build, we needed a different way for people to create the data. So, instead of forcing them to write JSON, or YAML by hand we created a custom filetype called CML (Conversational Markup Language). It was a custom markdown flavor for writing multi-turn conversations as training data. You'd author full agent-human dialogues, select tokens, define slots, mark up intent.

Eventually, we built the UI. It was a chat interface where you'd essentially roleplay both sides of a conversation. My whole principle with it was "teaching computers how to speak". You'd write what the user says, then write how the agent should respond, tagging the important bits along the way. It sounds simple (and the interface was, intentionally) but the design challenge was real: you're not designing a conversation for a user to have. You're designing conversation itself. The training data isn't a means to an end - it is the interaction.

conversation.cml

user> Hi I have a question can you help me?

agent> Hey hey! Welcome to our friendly support chat. Of course I can. What do you need?

user> I placed an order last week.

user> it was number [4642653](order_number)

user> and it hasn't arrived yet. Can you tell me where it is?
check_status

agent> Sure!

agent> Your order [4642653](order_number) is scheduled to arrive [Thursday, October 26](delivery_date)
* provide_delivery_date

user> Cool thx
03

Six principles

While we were building everything it became clear to me that there was a gap in the way design was approaching these problems. So, I built a framework for myself. Which turned out to be helpful for the people building bots with our software and other folks doing this kind of work.

I distilled it into six principles for how these interactions should work. It was the best thinking I had at the time for how to design conversations that actually felt useful.

  1. 01EngageInvite the user in
  2. 02RecallRemember what was said
  3. 03AnticipateSee one step ahead
  4. 04AdaptRespond to context
  5. 05ReflectMirror the user back
  6. 06SteerGuide without leading

Most of those principles are solved problems now, or are just more or less baked into the LLM experience. The machine just does that.

init.ai brand illustration - the language machine
04

What happened

We were a six-person team with a decent product and not enough runway. By late 2016 we'd started pivoting from general chatbot tooling toward AI-supported customer service. The market was there, but we ran out of time before we could get to it.

The team joined Apple in October 2017. We shut down init.ai in December and went to work on Siri. I spent the next five years at Apple working on Siri and AI/ML.

There's no dramatic ending here. Small team, interesting idea, way too early. We spent two years teaching machines to talk, one example conversation at a time. A few years later, they learned on their own. And it was a great time to build: at the part where the technology doesn't have a playbook yet.