In the first half of 2019, my commit graph for Elements shows 401,047 lines added and 365,198 deleted, by hand. This required a special exercise routine, and a lot of ice. It's hard to imagine now, but in these olden days, a rite of passage to becoming a master programmer was learning to deftly move huge amounts of symbolic text around an advanced editor like vim. To achieve this text editing glory would take deliberate practice over many thousands of hours, over many years. To fail meant relegation to mathematics and symbolic proofs, not working systems.
In that year, I was still the CTO of Lively HSA, a health savings account company, where the first production version of Elements was built and battle tested, under HIPAA and hundreds of millions of dollars of financial transactions. I had joined Lively in 2017, but my first sketches of Elements actually started five years prior, in 2012.
The sketches began as a new reactive html language and runtime, and the build tooling around that. Back then I felt not much different than I do now: that building for the web had become impossibly difficult. A mishmash of a thousand different decisions to get even a basic application working. Constant compromises like amazing, reactive UIs versus SEO; routing versus one big single page app; type checking versus fast build emits. This list goes on and on. I eventually concluded that the only way forward was to start from the bottom of the stack and work my way up, from the file watcher up to the html language, brick by brick.
In 2017, one of the cofounders of Lively, and an old friend, called and said they needed a CTO. I figured it was the perfect way to build a production version of Elements in a real business. Rather than build in public, or as a side project, I had an opportunity to build it for a real company, with real customers, where it absolutely, 100%, no customer money lost at all, not even a little, had to work.
With a production version of Elements completed, and a few more gray hairs, I spun Elements out into its own company in 2019. Early the following year, I raised a seed round, of a few million dollars, led by IA Ventures with participation from a handful of angels. After the fundraise, it would take another six years of quiet, deliberate work, to make Elements into a completely integrated system that was ready for customers. The investors now have a few more gray hairs as well, I suspect. But the type of engineering required for a product like this is not possible without years of work, and real investment. I'll forever be grateful.
Today is a very different world from 2019. I'm now a dad with two wonderful children, asking me who Claude is, and why I spend so much time talking to this fellow. I don't write code by hand in the same way anymore. On one hand, I feel a sense of loss, where these skills, built deliberately over thousands of hours of practice, don't seem as relevant today. On the other hand, I require substantially less ice to get through the day. Like many people, I did go through a phase of concern. But after working with AI tools for the past few years, I've realized the new world is indeed different, but filled with new opportunity.
I started this journey building tools for people. And when AI became mainstream, I realized two things: I don't see any reason why AI agents should have to work with poor tooling. And I think there's more opportunity for building than ever before. I believe people will ultimately be at the center of that, with agents working at their behest. More code must be written; more human judgement must be involved, at a faster pace, than ever before. More small businesses, previously unreachable, can benefit from incredibly sophisticated software. Large businesses can finally move from legacy systems where the cost would have hitherto been too great.
I believe the future for humans looks bright. And I'm honored to have the opportunity to build a tooling company for the people building software in this new era. It's time to start building the next generation of software.
Chris Mather