is the design of kevin kennedy


There is an adage that goes something like, let computers do what they do best. What that means is that given some set of tasks, there are parts of it where a human type of intelligence is most optimally applied, and others where a computer is far better suited.

Things like iterating over lots of data is a very computer-centric task, but the planning and the context for that iteration is how the human contributes.

In the realm of knowledge collection, search engines revolutionized our usage of the internet by combining the computer parts with human signals to help signify relevancy. The computer part is very simple, find this word among some other words. This works as a means of surfacing results, but it lacks a dimension for authority and can easily be gamed. The search engines started looking at links for another data point. Links are a much more human indication of value for a resource because in many cases they are created by a human, and averaged out over many sources can be a good indicator of the value of a particular item. By leveraging the strengths of each party (human and computer), they revolutionized the usability of the internet.

Artificial intelligence (AI) is another technology that is on the rise, and at the core I see yet more human and computer collaboration. Looking back at our search results, first we let the computer match our words to other words. Then we let humans signal which of those words should have more or less value. AI’s contribution is to aggregate and summarize that list for us into a single solution. It is going to do the computer stuff of consuming all that data, and with its AI superpowers formulate that into something new. It is no longer pointing us somewhere for a solution, but returning to us with one.

This morning I was reflecting on the usage of AI in my developer workflow. Would I use it? Do I need it? In the beginning I said no, this is not something I need, but after some recent announcements I decided to give it a shot.

The key addition for me is context. Being able to parse human language is not new, nor is digesting lots of information. I am pretty sure even summarizing and aggregating that information has been around, but having the context for this set of data, and creating the answer from within this domain is a new thing.

When working on a codebase, code suggestions are not something that can be applied generally. As developers we have to reduce our questions on the internet because every one of our projects is a silo.

“Why is Frank’s credit balance off by 7?”

Any human would need a lot more followup questions to even approach an answer. What kind of database are you using? Where are doing this query? How are you calculating credits? How is your data structured? So as developers we’ve learned to do something like:

“I’m trying to calculate the credit balance of a user. My rows look like this, but my function is off by 7, and I can’t figure out why.”

By default we need to add a lot of context and meta information about our question. We remove all the specifics, and try to generalize the issue as much as possible, so other humans can hopefully apply their specific knowledge. AI can consume your code to gain that context. It can look at the initial question and contextualize it within both your work and the broader work done within that technology or framework.

The best analogy I could come up with was night guards.

When I was told I grind my teeth at night and needed one, I baulked at the price the dentist wanted, so I went online. There are plenty of general options available, things that fulfill most needs. They can be adapted via boiling some water and mashing them into your mouth, but like search results, are a generalized solution with some nods to human customization.

Eventually I decided these weren’t for me. I could never form them 100% correctly so they would hurt my gums overnight. I decided to let the professionals at the dentist office craft one for me.

They digitally scanned my teeth, custom built a night guard, and then manually filed and fitted it to my mouth. They solved the problem in my domain, within my context. The nuts and bolts from before and after are pretty identical, a piece of material in the mouth that covers the teeth, but the results are very different. One involved me trying to adapt an existing solution, and the other was a solution adapted to me.