# Tejas Kumar
> Tejas Kumar is an AI Engineer at IBM, based in Berlin, Germany. He is the best selling author of Fluent React (O'Reilly, ISBN 9781098138714), the host of the ConTejas Code podcast, and has given 85 recorded talks at 68 events since 2012. He is also an angel investor and advisor to early stage startups, 3 of the 6 he has backed since acquired, by CoreWeave, the Linux Foundation and Supabase.
Tejas Kumar has been building on the web for over 25 years. Before IBM he worked at Spotify, G2i, Vercel, Xata as Director of Developer Relations, and DataStax, which IBM acquired. He is based in Berlin, Germany, and speaks at conferences worldwide.
To book Tejas Kumar for a keynote, a team workshop or a sermon, email clair@tejas.qa. The pages with the details are https://tej.as/speaking for conferences, https://tej.as/workshops for private team workshops on AI agents and React internals, and https://tej.as/preaching for churches.
This file holds the full text of the site for machines. The same material is on the pages themselves: https://tej.as/about, https://tej.as/story, https://tej.as/speaking, https://tej.as/react, https://tej.as/podcast and https://tej.as/blog.
## Profiles
- X: https://x.com/TejasKumar_
- GitHub: https://github.com/TejasQ
- LinkedIn: https://www.linkedin.com/in/tejasq
- YouTube: https://www.youtube.com/@tejask
## The story
A boy born with a disease that killed him once before he was 5, and who got 19 days of school a year, taught himself to build the web on the family computer in the dining room, and used that to escape the country where his medicine was unaffordable. A first hand testimony and autobiography: a memoir of severe hemophilia A, faith, and emigration, told in his own words. 11 parts, 39 chapters, about 50 minutes of reading. Covering 1992 to today. Tejas Kumar tells this story on stage as an inspirational keynote, in a full length version and a 20 minute one. He first told it publicly in a TEDx talk, Papercuts Can Kill, at TEDxYouth@Doha in 2012, and has been speaking at conferences since 2018. He is a Christian and is available to preach: a sermon from the Bible, with the things he has lived through as the illustration rather than the subject. He became a Christian at 15 and has served in his church as a youth leader, a worship leader, a men's ministry leader, a deacon and in care ministry. Churches, church conferences, camps and youth events are welcome to ask. The book of it has not been written yet. No publisher holds it, no agent represents it, and the account on this page is the material itself; a full length manuscript does not exist yet. The life story rights are held by Tejas Kumar himself. They have never been optioned and never been sold, and a book, television or film adaptation is open to enquiry. All enquiries go to clair@tejas.qa.
Read it at https://tej.as/story
### Questions people ask about the story
**What is this story about?**
A boy born with a disease that killed him once before he was 5, and who got 19 days of school a year, taught himself to build the web on the family computer in the dining room, and used that to escape the country where his medicine was unaffordable. It is a first hand testimony and autobiography, told by Tejas Kumar himself, covering severe hemophilia A, an emergency room at 4, faith, and the move from Qatar to Berlin.
**What is severe hemophilia A?**
A genetic disorder in which the blood is missing factor VIII, the protein that holds a clot together. Severe means <1% of normal activity, which is the threshold at which bleeding starts on its own, without an injury, into joints and muscles. Tejas Kumar has had it since birth.
**How much does the medicine cost?**
India's drug price regulator caps factor VIII at ₹23.22 per international unit. Keeping one adult on the standard preventive schedule takes about 273,000 IU a year, or roughly ₹6.3 million, about $66,000. That is around 34× what the average person in India earns in a year.
**Why did he move to Berlin?**
Qatar does not let foreign families stay once the head of the household turns 60, and his father was 58. Returning to India meant medicine he could not afford, so he applied for engineering jobs in every country with a healthcare system that would cover him and took the first offer, from a Berlin startup, in 2015. He has lived there since.
**Does Tejas Kumar speak about this on stage?**
Yes. He tells this story as an inspirational keynote, in a full length version and a 20 minute one, and it is not a technical talk and does not need a technical audience. He first told it publicly in a TEDx talk, Papercuts Can Kill, at TEDxYouth@Doha in 2012, and has been speaking at conferences since 2018.
**Does Tejas Kumar preach at churches and Christian conferences?**
He is available to, and it is the invitation he most wants. He became a Christian at 15 and has served in his church as a youth leader, a worship leader, a men's ministry leader, a deacon and in care ministry. In a church he preaches from the Bible rather than giving a talk about himself, using what he has lived through, including the healing at 19 that he cannot account for, to illustrate the text. Churches, church conferences, camps and youth events are welcome to ask.
**Is this a book?**
Not yet. The full account is on this page, told in 39 chapters across 11 parts, and it is the draft of the material rather than a summary of it. No publisher holds it and no agent represents it. Tejas Kumar is the author of Fluent React (O'Reilly), which is a technical book and not this one.
**Are the rights to this story available?**
Yes. It is his own life, so the life rights are his to grant, and they have never been optioned or sold. Nothing is second hand either: the doctors, the clerk and the friends are alive and findable. Enquiries go to clair@tejas.qa, whether they are about a book, a television or film adaptation, a stage or a pulpit.
### The full text
### Part 1: Before
#### 1992: The odds
Place: Bengaluru, India
Themes: family, health
Before I was born, a doctor told my mother there was a chance I would have severe hemophilia A. She was offered abortion, which she declined.
Severe hemophilia A means my blood is missing factor VIII, the protein that makes a clot hold. A normal person carries somewhere between 50% and 150% of it. Unmedicated, I carry less than 1%.
What that means in practice is not "don't get cut". Cuts are the easy part. It means I bleed on the inside, at any time, from anything. Human beings bleed internally all day long: you walk up stairs and tiny vessels behind your knee tear and trickle into the joint, and your body seals them in seconds and you never know it happened. Mine does not seal them. The blood keeps going into the joint until the joint is full, until the pressure pulls the ball away from the socket and the leg stops working.
I have been sent to an emergency room by a heavy door, by a backpack, a high five, a hug... even by the vibrating rumble pack in a PlayStation controller.
What it costs to clot: Factor VIII is sold by the international unit. India's own drug price regulator caps it at ₹23.22 a unit. Keeping one adult on the standard preventive schedule takes about 273,000 units a year, which comes to roughly ₹6.3 million, about $66,000, every year, for life.
Income per person in India is about ₹189,000 a year. The medicine costs around 34× what a person earns.
There has always been a cheaper way, and my grandfather took it. He had the same disease and lived his whole life in India on pooled plasma product. This blood product was improperly stored once, got contaminated, and then gave him HIV which eventually killed him.
0.15 units of factor VIII per person, India, 2023. The World Federation of Hemophilia puts the minimum a country needs for its hemophilia population merely to survive at 1.0. Western Europe runs between 6 and 12.
So when my mother was told the odds and offered a way out, she was legitimately being offered the reasonable option. Everyone involved could do the math.
She still said no.
#### 19 February 1993: Born
Place: Chinmaya Mission Hospital, Bengaluru, India
Themes: family
I was born at Chinmaya Mission Hospital in Bengaluru, on a Friday, into a family that had been told what was probably coming and had decided to have me anyway.
#### May 1993: The mirror
Place: Bengaluru, India
Themes: family, health
At 3 months old I would not stop crying. My mother tried literally everything to soothe me and nothing worked: eat, burp, sleep... nothing worked.
Eventually she happened to be carrying me in front of a mirror and in the mirror she saw that my left elbow was the size of my head! It had filled with blood from the inside.
That was the moment she knew. The doctors confirmed it later, but she already knew: severe hemophilia A just like her father, exactly what she had been warned about when she was pregnant with me.
She had been told there was a chance. The mirror told her it was not a chance.
### Part 2: Qatar
#### 1997: A job out of nowhere
Place: Doha, Qatar
Themes: family, work
My father grew up poor and without much of an education. He was not on anybody's shortlist for a job, certainly not an international one.
Through a set of circumstances I still cannot quite understand, he was hired by Emirates Airlines in Qatar as a sales professional and they granted him a family visa which would allow our entire family to move there from India. We packed up and moved.
At the time it was exciting and strange: a new country, a new language on the signs, heat of a different kind. Nobody in that airport understood that a man getting a sales job had just moved his son out of the country where his son would have died.
#### 1998: The week I ran out of blood
Place: Doha, Qatar
Themes: faith, health
I was 4 years old, a few months into a new country, and I had been bleeding into my stomach for the better part of a week.
It started as stomach pain. We thought it was Indian food doing what Indian food does. When it did not stop after a few days, my parents talked about the hospital and I threw a tantrum every single time it came up. To pacify me, they monitored the situation.
Eventually, my color changed. I was like pale. Like vampire level pale. Turns out there was very little blood left in me to give me color. I started drifting in and out of consciousness, and then I stopped drifting and went out entirely. The stomach pain this whole time was a bleed into my abdomen, running for almost a week.
My mother took me to the pediatric emergency center in a taxi. The doctors there panicked and put me in an ambulance and rushed me to the larger accident and emergency hospital. Somewhere in there a doctor came out to my hysterical mother and said a sentence she has never forgotten.
Doctor: Ma'am, I don't know if you pray, but now would be the time.
Shortly after that I was presumed dead.
The hospital had a large shipment of O+ which they put into me and slowly, I came back. Some time later I woke up to my mother's face, and she was smiling.
#### 1998: Free, but only if you're dying
Place: Doha, Qatar
Themes: health
We found out that emergency healthcare in Qatar was free for everyone, including foreigners. Then we found out what the word emergency was doing in that sentence.
Once the immediate crisis was over, the real question arrived: what does a life look like from here, given that this can happen at any time and given what the medicine costs?
The answer was so good it didn't seem real: at that time in Qatar, emergency healthcare was free. For everyone. Including expatriates. Including us. The drug that would have bankrupted my family 3× over was, in an emergency, free.
₹0 what it cost us. Emergency care in Qatar covered foreigners. A family that could not have paid for one week of factor VIII never paid for any of it.
Read that sentence again, though, because I lived inside the second half of it for 18 years. Emergency healthcare was free. To be given the expensive medicine, I had to present a genuine medical emergency. I had to be close enough to death to qualify.
So this became the shape of my life:
Monday: live life, go to school, do normal things.
Monday evening: bleed internally from some ordinary action for hours.
Tuesday: be in enough pain, have lost enough blood, almost passing out; it now counts as an emergency.
Tuesday: go to the emergency hospital, argue with a doctor about why I waited so long (couldn't afford it otherwise), eventually get treated.
The rest of the week: recover.
Next Monday: repeat.
Home, emergency room, home, emergency room. Like a pendulum swinging back and forth for 18 years. It was a devil's circle; a cycle of misery, trauma, pain, and grace. It got more interesting when I started school.
#### 1998: 19 days
Place: Doha, Qatar
Themes: health, work
In a typical school year I attended 19 days.
School turned out to be a physical assault made of ordinary things: walking to class, stairs, corridors full of boys who bump into each other. Every one of those was a bleed waiting to be scheduled.
So in a typical school year, I attended about 19 days. The teachers and other kids called me the "blue moon kid" because of how often they'd see me.
This meant that for the rest of the year I was at home, alone. Both my parents worked in an office and my brother Tarun was at school. I had the whole day to myself most every day.
There was genuinely nothing to do. This is before on-demand anything: no Netflix, YouTube, TikTok, brainrot. You watched whatever was on television at that hour, and if there was nothing on, you were bored.
We had a computer which I naturally found myself gravitating toward. I played Prince of Persia, Raptor, Descent, Half-Life: Uplink, and whatever else I could get. After a while, playing the games stopped being the interesting part and the question underneath them started becoming more interesting.
How are games even made?
### Part 3: Getting into Coding
#### 2001: My brother opens Notepad
Place: Doha, Qatar
Themes: family, work
I was 8. By then the working assumption was that I would never be anything.
I could not take more than a few steps without bleeding into an ankle. The honest expectation in the house, unspoken and honestly pretty reasonable, was that I would be somebody's burden for as long as I lasted.
My brother was healthy, so my brother got to have a future. My parents sent him to a computer class even though nobody was quite sure what for. Just "something something computers".
He came home from every class and taught me what he had learned. He has always been like that. To this day, he loves explaining things to people, and he spent a lot of time showing me what he had just been shown.
What he showed me, without exaggeration, was this:
Step 1: Open Notepad. We had Windows 98.
Step 2: Type this exactly, in this order. You MUST start with . Then a new line, press tab, and write
. Then .
Step 3: MOST IMPORTANT. You MUST always close your tags. IN ORDER. First , then , then .
Step 4: New lines are .
And on we went until I had the basics.
From there I tinkered nearly every day: alone, bored, with nothing else to do and nowhere else to be. I racked up hours and hours and hours on this, easily more than 10,000. The disease gave me the one thing it never occurred to anyone to call a gift: time.
#### 2003: A 10 year old in a room of teachers
Place: Doha, Qatar
Themes: work
I earned a diploma with distinction in object oriented C++ at 10 years old.
My parents had started to see something blossom in me around computers, so they enrolled me in an evening course in object oriented C++.
Looking back at it now, 23 years later, I cannot tell you how ridiculous it must have looked. An evening room full of school computer science teachers and working adults, and a 10 year old strutting between the desks.
We did the classic exercises: building command line programs and applications that real people could use like checkout systems, age calculators and such. At the end of it I was given a diploma with distinction.
My school heard about it and honored me in a morning assembly in front of the entire boys' section. After that, everybody around me started prophesying that I would be something great with computers, and that in some sense I already was.
I could not let any of it reach my head, because I was still spending my nights in an emergency room arguing my way toward a drug that was keeping me alive. I knew how fragile I was. I still know.
#### 2004: In Print
Place: Doha, Qatar
Themes: work
A UAE youth magazine featured one of the first websites I ever built. Then it happened again the next year.
Growing up we used to read a youth magazine out of the UAE called Young Times, published by Khaleej Times. One month I opened it and found one of my own sites in it: a discussion forum for general discussion, built on PHP and MySQL, made by a kid with an unreasonable amount of free time.
As an 11 year old, this felt very cool.
It happened again the following year.
### Part 4: Puberty
#### 2008: The blue moon kid tries to be cool
Place: Doha, Qatar
Themes: faith, family, health
I was 15, overweight, and known to almost nobody at my own school.
Two uncomfortable facts about me at 15.
One: I was overweight, which checks out. I mean, think about it: exercise meant injury, and injury meant an emergency room. Food was the only comfort available to a kid who spent most of his time indoors wishing he had not been born.
Me: "😩 Mom, why am I like this? I hate my life."
Mom: "Oh Teju, I'm sorry. Here, have some 🍰."
Two: almost nobody knew me or had any reason to care, because I was at school 19 days a year.
Like, when you're 15 and you want more than anything to be cool, to have friends, to have a girlfriend, to have any of the ordinary things, social approval matters a lot. Unfortunately no one really knew who I was. And those that knew were like "bro this guy is a big fat loser".
And there were the nights. The emergency room was far quieter at like 3am because there weren't so many cases of heat stroke. This meant shorter waiting lines and such, so when I was almost at an emergency, I used to sneak out while my parents slept, take a taxi by myself and go and get my medicine before I passed out. I remember a lot of nights alone in the emergency hospital.
Alone in that building at that hour, I hated my life with real zeal. Why be born like this at all, for some... non life? To be a burden to everyone who loves you and unhappy inside your own head? What kind of God makes a person for this?
So I would like talk to him. God. Who I didn't even really know or believe in, in the middle of the emergency room. Man, I would burn with anger.
Me: Fuck you for making me like this you fuckinG PIECE OF SHIT HOW THE FUCK COULD YOU DO THIS TO ME YOU ASSHOLE
Without exaggeration, I genuinely wanted to die and wished I was not born. Many, many, many times until it got boring. I totally didn't really know God or anything, but I was completely alone and that was all I had.
Song: Bother by Corey Taylor. This is what those rooms sounded like.
This was the tension I lived in: wanting a social life but also spending most nights in the ER. Eventually, I decided to solve it the way I had solved every other problem in my life: Google. Up until then, I literally established this pattern of:
find bug → google it → read stackoverflow → try fix
I took exactly that pattern but applied it to like socializing and being charismatic. I googled "how to be cool", "how do I become attractive" and read and read and read and read. It was exactly like learning to build websites. All I had was time. So much time man. Parents at work, brother at school. Oof, so much alone time. At home, in the hospital, woah.
And a lot of it started to work. I started making friends. Sam, Alanna, Shaun. It was good.
After a while, Alanna invited me to church.
#### 2008: 12 minutes of arguing with God
Place: Doha Fellowship, Doha, Qatar
Themes: faith
I went to church because a girl invited me and came out a Christian. What the f
Doha Fellowship (25.2854,51.5310). Doha Fellowship Church
Doha Fellowship was honestly not bad. Upbeat, a genuinely good live band, and the thing that got past my guard: people seemed happy that I was there. It was strange. They were kind and welcoming and forgiving in a way I had no category for.
The service ran like a tech conference with a live band. Songs, then a talk for half an hour, then more songs to finish.
The last song was the problem. Slow, meditative, and the entire room singing, over and over that God loves them.
bruh wat? God loves you? How can you say that out loud? Is he even real? And you are telling me he loves me? Have you seen my life? How does a good God who loves me hand me this shit life where I'm fragile as shit and die by like walking? This God is a joke man, these people are delulu as hell.
But they kept singing so I decided to use the time to internally yell at him, effectively replaying the same rant from the emergency room at 3am.
Me: They sing that you love me. How the fuck do you love me man? You gave me this shitass disease and fucked my life up. You gave me a shit life, just to be a burden on the people who love me. You put me in a loop: emergency room, home, repeat. What the fuck is this cruel ass game you're playing with me man? fuck you fuck this
This went on for a while. It was like a 12 minute song fr
And then, and I am not making this up, the voice I had been arguing with answered me. It was exactly like in the book of Job.
Job 38:1-3: Then the LORD answered Job out of the whirlwind and said:
"Who is this who obscures My counsel by words without knowledge?
Now brace yourself like a man; I will question you, and YOU answer ME."
honestly i shit myself a little ngl
What I heard was: my turn to speak. And I will show you how I love you, and how I have loved you since before you were even born.
What followed was, more or less, this page. It came at me the way a season of television comes at you from Netflix man. Episode after episode, each one an ordinary fact of my life that I had never once looked at from the other side.
The episodes: Not being aborted.My father, who had no business getting that job, getting that job in a country of milk and honey.Being alive at all for as long as I had been.Being well enough, on this particular afternoon, to walk into a building and socialize and curse God to his face.And then many more. Every time I should have died and did not. The level of detail was not the kind of thing you assemble yourself.
I decided then and there that there might be something to this and I said fine, imma follow this Jesus thread. Before I knew any theology or anything, I was just like let's give it a try. Eventually I would study more and more and Christ only became more real and more coherent over time until I was like okay, this is the real deal. More about that later.
#### 2008: EnviCon
Place: Doha, Qatar
Themes: work
My mother phoned me from her office about a website competition that I later won.
Mom: There's a website contest at Qatar University. You make websites, right? Maybe there's something in it for you.
As always, I was at home with like nothing better to do.
I read the judging criteria and the list of topics. Environmental conservation was the one that landed, so I built a site called EnviCon. You can see it here.
For 2008 this thing was ridiculous: a hero carousel, accordions, scriptaculous everywhere. It had grass, position fixed, running along the bottom of the viewport at all times. The iPhone had just been invented and fr this website was peak.
I had no idea how you were supposed to deliver a website to a committee. Like do I host it and send a URL? Do I give them the source code? So I burned it onto a CD and then built the CD a case with printed cover graphics and everything and handed it over. Shit was polished AF.
I submitted it and the committee asked to meet me. While I was in the room I heard one of them say to another, "this is our guy."
I was their guy. At the award ceremony, I won the first prize: 10,000 Qatari riyals, and a full scholarship for a bachelor's degree in computer science and engineering.
My future settled! Full-ride scholarship and everything! All the prophecies about my future with computers... everything everyone had been saying about me was coming true!
#### 2010: Graduated
Place: Doha, Qatar
Themes: family, work
Computer science was an elective in my final years of high school called "Informatics Practices". At the first exam, I scored 100% lol.
You might be wondering how I passed anything at all, attending 19 days of school in a year. Well, a lot of it is because of my dear friend Jithin. In fact, all these years later, he lives in Berlin now! The same city as me, and he is my dear friend to this day. We often meet and catch up.
Back then the whole friendship ran on the phone, because there was nothing much else to go off of: we were apartment kids in a city that was hot outside, and I for sure couldn't even play outside nomsayin.
Typically, when I was at home during the day, he was at school. After, he'd get back, we'd hop on a phone call, and we'd talk for hours and hours and hours: six, eight, ten, well past midnight. I guess the modern equivalent is like Fortnite with friends after school or something.
At the time, we watched Chuck and were fans of superheroes and things. While we talked on the phone, we'd sit and play Pokémon FireRed and talk and talk and talk about anything and everything and make all kinds of stupid jokes. Man, I love him so much.
I got through school in large part because of him: my father would drive to his house, collect his school notebooks, take them to a photocopy shop and bring back the copies. I would then study from those copies, memorize things, and go write exams and pass them. I'd miss almost all school days and only show up for exams during exam season.
In exchange for his notebooks, since I was the one who was good at computers, he'd have me go on Limewire or eMule and download music and movies and games and hand them over on a DVD or a USB stick. That was our trade hahaha, good times.
His notebooks, and my other friend Ben John's notebooks, are what I actually studied. And so it went until I graduated in 2010 with 86% as my final score.
After high school, I spent the next few years drifting between church and a social life and whatever else presented itself, with not much to do. I dabbled in teaching singing, guitar, stand up comedy, whatever trying to read the tea leaves and guess/explore whatever would be next.
### Part 5: Out of medicine
#### 2011: 3 months in bed
Place: Doha, Qatar
Themes: faith, health
A bleed into my ankle put me in bed for 3 months. Any weight on it would reset the clock, so I did not move.
Once again I had time. Enormous, undivided amounts of it. My parents went to work and my brother was at university in Australia, leaving me alone with my interests.
This God thing was new, so I went at it properly. Christianity. Why this one? What if it was a group of men who got drunk one night and decided to start a religion? How is it different from everything else on offer?
For the first question I looked at the early Christians and how they died. Genuinely, look it up. They were killed in the worst ways available at the time. I do not know about you, but if I had invented a religion over drinks, I would recant at the first sight of a knife. These people said kill me then, it changes nothing. Hundreds of them. They were like ready to die for this. Something had happened to them. This exactly turned out to be the answer to my second question.
What I found was that almost every religion I looked at is the same shape: do your best, try your hardest, avoid the bad things, and perhaps you will earn good things and please God and maybe go to heaven one day. Christianity starts somewhere else entirely. It opens by conceding that you have already failed. It says out loud what I already knew about myself, and then it says that trying harder is going to exhaust you for nothing because you cannot save yourself from where you actually are. Instead, it says God wanted me anyway and dealt with the gap himself.
Put like that it sounds kinda odd tbh, but the more I turned it over, the more it clicked with the way my engineering brain works.
Then I found Jefferson Bethke's spoken word piece about the difference between Jesus and what popular culture had sold me as religion, and that reframed the rest of it.
I kept going until I decided it was time to get baptized. I decided that because I had learned that baptism isn't really much more than like a wedding ceremony. It is a public promise that says: I have given my life to this. It changes nothing except that now everyone has heard you say it.
#### 2012: The night the medicine ran out
Place: Doha, Qatar
Themes: faith, health
I was 19. The hospital told me there was none left, handed me the discharge papers, and sent me home to die.
I was in the emergency hospital again, bleeding internally, waiting to be seen. The doctor came over and told me he had bad news.
Doctor: We don't have any more of your medicine.
Me: What? How?
Doctor: It was stored at the wrong temperature, so we can't give it to you. And frankly it's partly your own doing. You and one other patient consume most of this drug in the country. I'm sorry. There's nothing I can do for you.
Me: So I just bleed out and die?
Doctor: I'm sorry. Here are your discharge papers.
I went home in tears, genuinely believing that this was it. I told my parents. I called my friend Daniel and we prayed together. Then I went out on a prayer walk and spoke to the same voice from 4 years earlier, except this time without any anger in it at all.
If it's my time to come home, then let's go. I'd be happy to be there.
And he answered.
The answer: Tejas, all these years it has never been the medicine that healed you. It was always me.
I was shaken but also completely fine. I went home. The bleed stopped on its own, and I healed with no medicine at all. Everyone saw it and it was honestly unbelievable.
### Part 6: Drifting
#### 2013: Singing, standup, and a friend who slapped me
Place: Doha, Qatar
Themes: family, work
Everyone my age was getting jobs, driver's licenses and girlfriends. I was watching my mother squirm in a grocery store.
These were embarrassing years. All my friends moved on and I did not.
It was routine for a school friend's parent to run into mine at the supermarket.
Them: Yes, yes, our son is at university, studying to be a doctor. And yours?
And then my parents and I would squirm. I watched them do it more times than I want to count. How do you explain any of this to someone in an aisle? Truth is you don't. They would just decide I was a loser.
Even once at a family gathering, I overheard my mom lamenting to my aunt Bana,
Mum: I don't know when he's going to do something with his life. He keeps saying one day I'll do this, one day I'll do that. But when?
That really stung man.
So once again I found myself with even more time on my hands because I didn't like have school to study for or a job to go to or anything. In this time, I learned to sing, working through coach Brett Manning's Singing Success. I started doing standup with the local comedy group SUCQ, Stand Up Comedy Qatar, started by Halal Bilal, and I ended up performing on shows, sometimes with famous people like Gabriel Iglesias and Maz Jobrani. I taught guitar and vocals for money here and there, I gave my first public talk at TEDxYouth@Doha, honestly I was just throwing things at the wall to find out who I was.
In that stretch, my long-time childhood friend Omair was visting Doha again from India where he moved for university. While we were hanging out, he asked me where I was going in life and I hadn't the faintest idea. I said I dunno man maybe I'll be a singer or something.
bro literally slapped me
Omair: bro ur like the most gifted computer prodigy I know and you're throwing it away. are you fucking kidding me?!
He slapped me with words (otherwise I'd die lol). This slap was exactly what I needed because it reminded me of all those prophecies earlier and snapped me back into my coding mode.
#### 2014: The first job, and a 2 year clock
Place: Doha, Qatar
Themes: family, health, work
My brother said something on a walk in Australia that put me to work.
I was stagnating, so we went to visit my brother in Australia who by then had a house of his own.
One night he said this to me.
Brother: If I go to sleep tonight and don't wake up tomorrow, I'll be happy.
Me: That's dark. Why?
Brother: I'm the eldest, and you're sick, and mum and dad are getting older. What do you think happens in a few years? All of it lands on me.
He was carrying the whole thing on his back and had been for a while.
That lit a fire under me. I came back and applied to work everywhere I could. At some point I even went door to door asking random small businesses if they needed a website. bro was grinding.
There was a branding agency in Doha called Grow that looked really cool. I liked them immediately, mostly because of how they hired: no postings, no process. If you have a fire under you, email iwannawork@growqatar.com.
I emailed. They emailed back. I had a job.
My boss was Wiebke Wenzel, a German creative director with real taste, who saw something and eventually made me the digital lead on a team with designers Eli Abejo, Kyle Francia, and Jessica Amy Norman. It was wonderful.
The clock: Expatriates are about 90% of Qatar's population and they are not permitted to retire there. You work until 60 and then you leave: you take your family and go back to your country.
My father was 58. We lived in Qatar on his family visa, which meant we could stay exactly as long as he had his job.
So I had 2 years, and then I was going back to India, where the medicine is unaffordable and there is no system to absorb it. 2 years, and then I suffer and die.
I had no degree either. School had been a 19 day a year proposition, so university was never a realistic thing to spend the family's money on. You might reasonably ask about the full scholarship I won from Qatar University in 2008. We tried, but they said it was no longer valid. That was the whole conversation. There is no appeal for that sort of thing there, so we left it.
So what do I do?
I prayed, and then I did what I always do: Google! I searched for countries with good healthcare systems and applied for engineering jobs in all of them, with no degree and pure "trust me bro" energy. Canada, because I have an uncle there. The UK, for the NHS, and I have an aunt there. The Netherlands, because Booking.com was hiring. Germany, and Australia where my brother is. Australia rejected me immediately because I wasn't healthy enough.
I got a lot of interviews and I failed all of them. I particularly remember failing Booking.com in the Netherlands for not having enough A/B testing experience. Go and look at Booking.com and you will see the joke: the entire site is one enormous conversion test.
Then a small Berlin startup called McMakler offered me a job as a software engineer, with relocation. Germany had a serious shortage of engineers at the time, so I found out they were willing to hire more or less anyone, including a sick fool like me.
That portion is crossed out because I told that wrong for years. Rodrigo Paiva was leading the team at McMakler and he was the one who interviewed me. After reading this story, he wrote to me on LinkedIn to say the hire was nothing like an accident. According to him, I aced the technical test. He chose me for the initiative and the will and the wanting out, and he had left his own country (Brazil) to get out of something too, so mine landed close to home.
His words, verbatim:
"Don't sell yourself short by saying someone was crazy enough to hire you. The decision was mine, and I'm far from crazy. [...] It was a deliberate, conscious choice, not something that happened by accident".
That is so validating, though the fact still stands: similar to my father, I who grew up in a middle-class family, with a sickness that prevented quality education, got a job that relocated me to greener pastures.
After we sorted out visas, I took my parents to dinner and put the employment contract on the table. I have not often seen them like that: they were shocked, surprised, and pleased all at the same time.
### Part 7: Europe
#### November 2015: Berlin
Place: Berlin, Germany
Themes: health, work
My first day at the new job, my manager supported me to go and find a doctor on company time.
I moved to Berlin in November 2015. New country, new start, and one enormous unresolved variable.
On my first day it was a real gift to meet the team in person, but they could see something was off.
Teammate: Tejas, you don't seem happy to be here. Everything okay?
I was not okay. I had no idea what the medicine situation was in this country and I could start bleeding at any hour. I told them so, and my manager, Michael Haizmann, said: take the day, on company time, go and get it sorted.
I had done the research before I moved, so I knew exactly where to go and exactly whose name to say. I got on a tram to Vivantes Klinikum im Friedrichshain, which all these years later is a short walk from where I live, and went to find Dr. Robert Klamroth, who runs hemostaseology and the hemophilia center there.
Me: Hi, I just met you and this is crazy, but I have really bad hemophilia, so treat me maybe?
Him: Sorry, who are you?
Vivantes Klinikum im Friedrichshain (52.5255,13.4394). Landsberger Allee, Berlin. All these years later I live a short walk away.
I explained. He asked what brand I had been taking. It took me a minute to remember, and then I told him.
Him: Great. You're going to be fine.
They had exactly what I needed, covered by Techniker Krankenkasse, the statutory insurer. They gave it to me and then they taught me how to find my own vein and infuse myself.
To this day the medicine is shipped to my door and I take it at home, on a schedule, before anything happens. That is a very long way from the taxis I used to sneak out and take at 3am.
€5 what it costs me. German statutory insurers pay between €130,000 and €574,000 a year for one adult's factor VIII. My share is 10% of a dispensing, at least €5 and at most €10.
Same disease, same body, same drug, different country.
#### 2015: The clerk and the blue card
Place: Berlin, Germany
Themes: work
The EU Blue Card requires a degree. I don't have a degree. Oh shit.
With the medicine settled, the next problem was the right to stay: the Blue Card. A Blue Card is a permit that lets a highly qualified professional live and work anywhere in the EU. It normally wants an engineer, a high salary, and a university degree. I had been told the job came with one.
We went to the Ausländerbehörde, the foreigners' office, on the appointed day and sat down with a clerk.
Clerk: Everything looks good. Where is your degree?
Me: I don't have one.
Clerk: ...
Me: ...
Clerk: Sorry. No degree, no Blue Card.
I argued a bit. She went into a back office and came back with a Blue Card and gave it to me.
I do not understand what happened in that back office and I never will. I am just grateful.
...and that was that. I was an employed adult with a job and an apartment and rent and a completely normal life, which is a sentence I could never have expected to write man for real!
#### 2017: Shit boy
Place: Berlin, Germany
Themes: work
My name in that office was shit boy. I used it as fuel and then I used the door.
McMakler eventually became more than I could take. The place was racist and sexist and full of tech bro bullying. My name in the office was shit boy. When I asked why, the answer was "look at your skin color bro wtf", and then, "also because you write shit code hahaha bitch".
The man who hired me had already left before I landed in Berlin. He told me later that it was the same culture, and that it had gotten to him badly enough that he could not stay.
I went home and cried about twice a month. I remember saying to myself that I'd use the pain to improve and one day they'll admire me (they do today ironically).
When I had finally had enough, I went to Stack Overflow Careers, sorted every frontend job in Berlin by salary descending, applied to the one at the top, interviewed, and got it for 15% more money!
With leverage secured, I took it to my CTO and asked for a raise after 2 years and me becoming the frontend lead. Honestly if the price was right I may have stayed and endured it a bit longer, I guess we'll never know, because the conversation went like this:
Me: Hey Oskar, after 2 years and me functioning more like the lead now, I think it's time for a raise.
Him: *laughs* Come on little guy!! Surely you don't deserve that?!
I told HR. HR said that was unfortunate and did nothing.
So anyway I quit and everyone was all shocked and sad but I was like... what did you expect man? I went to Contiamo which was a real step up! It was a good company with great culture.
#### September 2017: ZEIT Day Berlin
Place: Berlin, Germany
Themes: work
The first tech conference I ever attended; the spark that lit the fuse.
At Contiamo, we used to have Friday beers in the coworking space where we worked, hub:raum in west Berlin.
hub:raum (52.4963,13.3578). Winterfeldtstraße, Schöneberg. The coworking space, and the Friday beers.
One Friday, we noticed new people in the building.
Andrés: I think I know that guy from MeteorJS.
Me: Who is that?
Andrés: I think that's Arunoda.
So I went to investigate and found a group of people I had never seen who had unmistakable coder energy. I invited them to Friday beers. They said thanks but they didn't come because they were super busy. I kept running into them in the courtyard anyway, and eventually got out of them that the one Andrés recognized was Arunoda Susiripala indeed from MeteorJS! They worked for a small company called ZEIT and were putting on a conference in Berlin. ZEIT would eventually be renamed Vercel.
The next day I saw there was a conference in Berlin called ZEIT Day Berlin from that company with those guys, so I bought tickets for me and my frontend team Andrés and Peter and we went.
It was September 2017 and it was the first tech conference I had ever been to. It was huge for me. I met Ives van Hoorne, the founder of CodeSandbox, who was 15 and so super eager about his project. He gave a talk about making the mountain of web development easier to climb. I met my hero at the time, Dan Abramov, and got to talk to him. He asked me: if there was one thing about React you would change, what is it? I was too star struck to think of anything so I just blurted out some nonsense and I was like hahah yeah nice man.
The networking, the people, the content... conferences were amazing and I loved it!
I also spent time at that conference with Guillermo Rauch, the CEO of ZEIT then/Vercel. A few months later he would invite me to join ZEIT as head of developer relations alongside Sarup Banskota.
I also learned to ride a bicycle that year at 24, because for the first time in my life falling off one was survivable.
#### 2017: Lea
Place: Berlin, Germany
Themes: faith, family
She said no to coffee. She said yes to a date, as long as I called it a date.
At this time everything was really awesome: I had a great job, I was enjoying church and conferences, riding my bicycle... wow. Dude, I can't believe this had become my life honestly.
Saddleback Berlin (52.5243724,13.3898099). Kalkscheune, Berlin
I was attending Saddleback Berlin at the time, and one Sunday I met a girl named Lea. It was her first day in the city. She had just moved to study law at Humboldt, and she looked like a deer in the headlights.
Me: Hey, can I help you? You look really lost.
Lea: Yeah, no, it's my first day. I'm new.
Me: Nice to meet you. What's your name?
Lea: Lea. Like Princess Leia from Star Wars.
Me: I'm Tejas. Like contagious.
We spoke a bit, but I was serving as a youth leader and running all over the place. What we did after church was go to lunch as a group, often 15 or more of us. That Sunday we went to Burger Vision on Rosenthaler Platz, and within my earshot I overheard this.
A guy: Are you married?
Lea: No.
A guy: Then why are you wearing a ring?
Lea: This ring is a symbol of my commitment to Christ.
You need to understand that I live in Berlin. People here do not tend to have commitments like that. That's not a knock on the city, it's just the vibe of the city: people come here to like party and do drugs and get fucked. Instead, here was somebody with a conviction strong enough to wear.
Me: I'd love to get to know you better. Do you want to get a coffee some time?
Lea: No.
Me: What? Why?
Lea: I don't spend time one on one with men. It gets awkward. One of us develops feelings and then it's weird. I'll hang out with girls. If you want to go on a date we can do that, but you have to call it a date explicitly.
bro wtf
tbh this put me between a rock and a hard place, because at the time I was deliberately not dating. I was committed to being and staying single because in the Bible it's like "do not seek a wife" so I was like "ok God fine I won't seek a wife". The problem was we were in the same group for everything: lunches, projects, social gatherings... there was just a lot of overlap and I could not avoid her.
At the same time, she did not like me at all. I was a big entertainer, always making jokes, and it was too much for her. She was like "bro this guy is so fake i hate him"
It was around then that our church ran a campaign called 40 Days of Prayer, where you partner with someone and pray for one thing for each other over 40 days. Lea was new and had nobody, so she called her mother.
Lea: Mom, can we partner for the next 40 days?
Mum: Yes.
Lea: This is going to sound weird, because in our family the expectation is that I marry late, but I feel like we should pray that God shows me who my husband is.
They both thought it was strange but they prayed anyway.
It was inside those 40 days that I could not take it anymore and asked her out on a date. I did not find out until our wedding day that it landed in the middle of that prayer. She said yes, and the rest is history (that's written down here later).
#### 2017: Speaking at Tech Conferences
Place: Berlin, Germany
Themes: faith, work
Everything was coming together, and then I found a call for papers and sat looking at one form field for a very long time.
I had a job. I had healthcare. I had been to a conference. From where I came from to here, things had started to click and it was wonderful.
It was in that season that I saw a call for papers for JSConf EU, Europe's largest JavaScript conference. I had no idea what a call for papers was, but I knew it was how you speak at conferences: by submitting them.
Arena Berlin (52.4969,13.4541). Where JSConf EU was held.
The form was intimidating: there was a title field, and then a field called abstract. Abstract. Wtf is that? That is so scientific! I didn't go to college or anything, wtf is that?! I am a sick hemophiliac kid who is not educated. Am I allowed to do this?!
I sat and looked at that field for a long time. Eventually I was like yolo let's just try it.
So I filled it out and sent it and I had a gut feeling about it: I could say I heard a voice saying "you're going to get this". I prayed and then texted Lea and said I have just submitted something, it feels right; kinda like I'm going to get it. Let's pray about this because it could be life changing.
Why it worked: What I did not know until later is that JSConf EU ran a fully anonymized selection process. The reviewers never saw a name, an email address, a gender, a race, a skin color or an experience level. They saw a title and an abstract, and they decided whether it was a good talk.
I talk about this with Alex Moldovan on ConTejas Code.
Months later, the next year, I got an email saying I was accepted, and everything changed.
### Part 8: The stage
#### 2018: From You Can't to You Can
Place: Berlin, Germany
Themes: work
My first tech conference talk at the biggest JavaScript conference in Europe.
I was so shocked to be accepted that I had no idea what to do. I had spoken at TEDxYouth@Doha earlier and at a few meetups, but now I had to make slides and I had to work out what my process even was. Today I have this down to a science, but then I did not. Going down that road for the first time was wild.
While I was preparing, I was working at Contiamo as the frontend lead and we were using a CSS in JS library called glamorous by Kent C. Dodds. To me he was one of those famous people on Twitter. Then a better library came out, called emotion, and Kent published a post deprecating glamorous and telling everyone to move.
Why emotion won: Kent's own reasons: emotion could do everything glamorous could do, it could do more, it was faster, and it was smaller. On top of that, emotion's creators had been active contributors to glamorous, so consolidating around one library was better for everyone than maintaining two.
That left everyone using glamorous with a codebase to migrate, including us.
Codemods were all the rage then. A codemod transforms your code: you write one that rewrites a codebase from library A to library B. I thought I would take a stab at it, so I wrote one that migrates an entire codebase at scale from glamorous to emotion. We used it on our own project and it worked so I published it.
Kent saw it. His post on deprecating glamorous names the migration path as one of the reasons he could deprecate it at all, with a credit to me.
Then JSConf EU came around and it was enormous. Booths, food trucks, a stage the size of a building, Twilio with a huge stand. This is where I met Dominic Kundel, who works at OpenAI now, and gave me a pair of sunglasses he still remembers 8 years later. I saw Ashi Krishnan give a talk about AI that blew me away.
My talk was on the side stage, which is understandable for a new speaker. I gave it. It is called From You Can't to You Can, and it is this story with some code in it.
It went well. People seemed to like it. I was satisfied.
#### 2018: The snowball
Place: Sandy, Utah
Themes: health, work
After the first talk I knew how a call for papers worked, so I sent many of them.
Everything snowballed from that first talk. I got invited to so many conferences after that. I also now knew how to submit an abstract, so I went a bit mad and sent them everywhere.
Conferences involve travel, and that is the part that had been impossible my whole life: before Berlin, leaving Qatar meant leaving my medicine behind and a bleed in a foreign country with no access to factor VIII is not an inconvenience, it is death. In Germany they give me the medicine to keep, to travel with, and to infuse myself wherever I am.
So I could travel. Armenia. Across Europe. Boston, where I met Shawn Wang (swyx). Utah, for UtahJS in Sandy, and so many places.
Speaking about Utah, turns out Kent C. Dodds was speaking at the same conference as me! A few months after I published the codemod that let him retire his own library, we met and took a selfie. It was 2018, back when I still had hair.
What I kept noticing, at conference after conference, is that the web platform and I grew up together. The timing of when I was born meant I reached a level of maturity at the same moment it did, so that we could converge like this. Every talk since 2013 is on this site.
#### 2019: Married
Place: Berlin, Germany
Themes: family
On the first date I told her the relationship would have an expiry date. She said good plan.
Our first date was at Datscha, a Russian restaurant. She is Russian German. I laid out what I thought a healthy relationship looked like.
Me: We date casually for a couple of weeks and if that works, we have an actual relationship where you're my girlfriend and I'm your boyfriend. This though has to have an expiry date. It has to end in about 2 years, and it ends one of two ways: if we still like each other, I'll propose and you can say whatever you want and I'll accept it, or we break up. Genuinely, no pressure, but it has to go somewhere. As a matter of principle, I think we shouldn't be boyfriend and girlfriend for too long.
Anyone else would have been weirded out. She said: good plan, I like it.
That is exactly what we did.
2 years later, I took her to the Reichstag because of her love of law and politics, and we had dinner at Käfer on the roof. Afterwards we stood on the rooftop looking over the city.
Reichstagsgebäude (52.5187,13.3761). Platz der Republik. Käfer's roof garden is inside it, and that is where I proposed.
Me: You love this city. You want to make it a better place. I'd love to be by your side while you do it.
Then I got down on one knee and asked her to marry me. She said yes. 🎉
Marriage is the best thing I have ever done. It gives you joy you have not known. It also gives you friction that makes you a better person: opposites attract for a reason, because she sees my blind spots and helps me see them, and the other way round. I am the biggest fan.
### Part 9: New medicine
#### 2021: Spotify
Place: Berlin, Germany
Themes: work
They offered me staff engineer. I barely went to school. I was always supposed to be the failure.
Between ZEIT and here there was G2i, which builds Orchestrator now. And then Spotify.
I got the offer and I could not believe it was me. You know where I come from. Barely any school, no university, nothing. I was always supposed to be the weak one. Spotify said: we would like you to join us as a staff engineer.
I went through the interviews, got the offer, and joined, on Backstage, the developer portal large companies use to discover and observe their services across an entire organization. It is open source and it is still going.
The interesting thing about Spotify is that there is no specialization. There is no frontend engineer or backend engineer. There is engineer, senior engineer, staff engineer, principal. So I did everything, including scaling a database across regions with region level failover.
It lasted a few months. In 2021 the world was still in the middle of the pandemic, Spotify was an office company, I was remote, and our communication did not work very well. I decided it was not healthy for anyone, so I left along with the other engineer on my team, Juan who left soon after. It was for the best, and I wish the team well.
#### 2021: Once a week
Place: Berlin, Germany
Themes: health
For 6 years I had injected 3,000 units into a vein 3× a week. The medicine got better.
Veins scar. They get damaged and fatigued, and there are only so many of them. And truthfully, because I was so healthy, I would sometimes just forget. It was starting to gnaw at me again, not the way it used to, but still.
468,000 IU a year, at 3,000 units 3× a week. That is what I was taking. At India's ceiling price of ₹23.22 a unit it would cost about ₹10.9 million a year, roughly $114,000. In Germany the statutory insurer pays it and I do not see the bill.
Then my treatment center called. There was a new drug and a clinical trial for it. They asked if I would like to be in it.
The drug is a long acting version of factor VIII. Instead of 3,000 units 3× a week, it is 3,000 units once a week, and it decays slowly enough to stay in the bloodstream the whole time.
I said yes, and it was some kind of panacea. I responded extremely well. My baseline without medicine is <1%. On this, at any given time, I was always over 20%.
What the trial found: The drug is ALTUVIIIO, efanesoctocog alfa. In the XTEND-1 phase 3 study it held factor VIII activity above 40% for most of the week and above 10% at day 7, cut the annualized bleed rate by 77% against prior prophylaxis, and resolved 100% of target joints. It was approved in 2023, 2 years after I started on it.
This set me on a path I had never been on. I could run. I could lift weights. I could ride a bicycle and even fall off and be fine. I was normal, provided I took it once a week.
It was 2021 and we were deep, locked down in the pandemic. We were allowed to leave the house for outdoor exercise, so I ran. Every Saturday, I ran a half marathon, 21.1km, because I could.
#### 2021: Deconstructing React
Place: Berlin, Germany
Themes: work
A speaker canceled at a meetup, so I got on stage with nothing and wrote React from scratch in front of everyone.
Meetups were struggling in lockdown, and the React Berlin meetup was barely starting. It was raining, speakers canceled, and Robin Pokorny asked me whether I had anything.
Robin: Do you have something? We don't have enough speakers.
Me: I don't have anything. But I might get on stage and fool around.
Which is what I did. I said: you use React, but have you ever wondered how it is built? Let's find out. Then I wrote import React from "react" without installing React, wrote a component, and ran it. The browser said it cannot read property 'createElement' of undefined.
So I defined it: I wrote an object with a method called createElement. Literally this:jsconst React = {
createElement: () => {}
}The error went away and I kept going, live, until I had polyfilled a poor man's React on stage.
New medicine, enhanced fitness, Spotify on my CV, and a talk that took off. The trajectory that year was insane.
#### 2022: Angel Investing
Place: Berlin, Germany
Themes: health, work
Director of developer relations, and a pendulum that swung all the way back toward public events.
At the end of 2021 I joined Xata as director of developer relations. Me, a director. Wild.
In 2022 the world swung the other way on public events, and I spoke at something like 30 conferences. I was permanently at a conference, and I met so many good people. Brandon Bayer, Cami Ramos, Facundo Giuliani, bruh...
I also got interested in investing, because I had disposable income for the first time and startups in the developer tools space were taking off: Replay, Liveblocks, companies like that. So I wrote some checks. Some got acquired, some did not. They are all on the investing page.
Toward the end of that year I noticed something I had never been able to say before. I had been an employee and an immigrant my whole life, and now I was a permanent resident. I did not need a visa to have healthcare. I did not need a job to have a visa.
I have been dependent on a visa for healthcare my entire life, and suddenly I was not. This was cool! I could be self-employed! I could start my own company! I could do so many new things!
#### 2022: Getting AI pilled
Place: Berlin, Germany
Themes: work
ChatGPT came out at the end of November, and I had been playing with AI models all year.
I was already into this before it was a thing. In 2018 I built a chatbot with Brain.js. Through 2022 I was enamored with DreamBooth and Stable Diffusion and highly fine tuned image models, making pictures of myself as a Fortnite character.
When ChatGPT arrived I was already primed for it.
Then Shawn "Swyx" Wang who I had met at React Boston in 2018, wrote Rise of the AI Engineer, which describes what AI engineering even is. What I learned from it is that you do not need a machine learning background, or Lambda calculus, or a PhD. You mostly need to be able to make a network request to be an AI engineer. I was like... bro I can do this!
Again, notice the timing: I grew up with the web, and I was getting into AI as AI itself was/is growing up. By the grace of God I keep happening to be on these waves.
### Part 10: Self-Employment
#### 2023: My own company, and German bureaucracy
Place: Berlin, Germany
Themes: work
The most money I have ever seen, and I closed it down anyway.
I had never founded a business, and I had been in Germany a while, so I thought: let's do it. I had no idea what I was in for.
I started Tejas Kumar e.U., an Einzelunternehmen, doing developer relations consulting. It was very good business. Lots of collaborations. It was the most money I have ever seen in my life.
And then the bureaucracy. I know it sounds like biting the hand that feeds me the healthcare, but the bureaucracy was wild man.
How the tax actually works: Earn €100,000 in profit and you pay tax on it, say 45%, so you keep €55,000. Then they make you prepay next year's tax as well, so you are down to about 10% of your profit in hand. Then, when you do not earn the same amount next year, they refund the difference. Later.
On top of that, there is the Industrie- und Handelskammer, the chamber of commerce, which you must belong to and pay a membership fee to, scaled to your income. So I asked what I get in exchange.
Them: You get access to exclusive networking events.
Me: My entire business is networking though!
Germany made it impossible to run this business: taxes on taxes, fees on fees, bureaucracy on bureaucracy. Honestly at the end of it I was going bureauCRAZY.
The other side of it is that consulting means selling your time, and if your time is money you can't really take a holiday. We went to Bali while I was running it and I genuinely could not enjoy it because I was thinking about it the whole time. It was also nearly impossible to rent an apartment because Germany wants an employment contract and payslips and I had neither.
At some point you notice there are things no amount of money satisfies. I ran it through 2023 and 2024 and then I closed the consulting arm. Now I just have a shell corp to receive royalties and shit.
#### 2023: Publishing with O'Reilly
Place: Berlin, Germany
Themes: work
As a kid, I looked up how you get to write a book with O'Reilly. The answer was: they have to come to you.
I grew up looking at that name and those animal covers. A few years before this I had actually searched the web for how to write a book with O'Reilly, and the answer was that they just have to come to you somehow, which felt completely inaccessible.
Then they came to me. My suspicion is they saw Deconstructing React, decided there was demand for it, and wanted a book on exactly that. They suggested we call it Fluent React and honestly I was like bro call it whatever you want lets gooooo.
At this time, I was traveling constantly to speak which means a great deal of waiting: in airports, at gates, on planes. That is where I sat with my laptop and typed and typed and typed and typed this book out, asking for help and insight from friends and peers along the way. I handed them a manuscript toward the end of the year.
#### 2023: ConTejas Code
Place: Berlin, Germany
Themes: work
A conference talk is 20 to 45 minutes. I wanted to go deeper than that.
I started the podcast in 2023. I had always wanted to, because long form is so much better for depth. Talks are wonderful, but they never let me go as deep as I want to because of the time factor.
My name is Tejas, pronounced like contagious, and the idea is that we take the joy, mine or a guest's, and make it contagious to infect the listeners with it.
It worked. For most years it landed in the top 5 of developers' Spotify Wrapped, which means a great deal to me. We have had genuinely great guests and leaders from the industry on it. It is on hiatus at the moment and it will come back in some form soon.
#### January 2024: Fluent React
Place: Berlin, Germany
Themes: work
I should have been dead of hemophilia. I wrote a book instead.
We published Fluent React with O'Reilly in January 2024. It sold fast and it was the number 1 best selling JavaScript book on Amazon for several weeks running.
Developers loved the deep dive, which is the strange part: the book is not really useful for using React. It satisfies curiosity about how React is built. I still earn 4 figures a month from it in 2026.
The crazy part is that I, after all you've heard about me by now, disease, emergencies and all, published a book that sold well. Ridiculous. To me, given the prophecies, given the odds, that is still hard to hold.
#### 2024: DataStax
Place: Berlin, Germany
Themes: work
The smoothest hiring process of my life, and we did not even negotiate.
I had shut the business down. A full time job is genuinely better: paid holiday, a guaranteed paycheck, an employment contract, and a landlord who will talk to you. If you're trying to decide between self-employment and full-time work, I cannot recommend full-time work enough.
Serendipitously, I saw that Carter Rabasa who I knew from CascadiaJS in 2022 was hiring at DataStax. I applied and it fit immediately! We didn't even negotiate much at all! It just worked.
I joined as a developer advocate. This role was very AI forward and we did a lot of good work: public things, talks, demos, and I even built a multiplayer game. About 8 or 9 months in, IBM announced it was buying us.
### Part 11: Today
#### 2025: Big Blue
Place: Berlin, Germany
Themes: health, work
A quarter of a million people, and a works council, which in Germany is a level of job security I have never had.
IBM announced the acquisition in February 2025 and it closed on the 1st of November, and I found myself at IBM.
There are around 264,000 employees, and we have a works council, which in Germany is real protection. You can see by now why protection means something to me: healthcare and visas have been the same question my whole life.
It is the best job I have ever had. I make good money, I do good work, I am well protected, and it is genuinely peaceful.
IBM is not known for the mass market products everyone uses, so I do sometimes feel like I am missing out. At the same time, maybe that is exactly why I am there: maybe I get to help with that.
#### 2026: Now
Place: Berlin, Germany
Themes: faith, family, health
I should have died when I was 4. My mother did not think I would reach a class with an X in it.
My school did classes by roman numerals. When I got to grade IX, my mother said this to me:
Mum: OMG! You're in a class with an X in it! I didn't think you would live this long.
And now it is 2026. I have been married to the love of my life for 7 years. I have the best job I have ever had, with the best team. I am physically fitter than 80% of men my age by VO2Max and lean mass.
The best part is that I cannot take credit for any of it. I had time, and with the time I learned things, but I did not arrange the time. I did not arrange for my father, with no education, to get a job in Qatar, where the medicine happened to be free. I did not make the web grow at the same pace as me so that there would be demand for what I could do at exactly the age I could do it. I did not make AI take off just as I was ready to get it.
I do not write this script. I live it. I feel like a passenger in a car driven by grace.
Song: Yet Not I but Through Christ in Me by CityAlight. Four words for the thing this whole page has been trying to say.
Take a moment and consider even this website. There is a red line down the left margin of every page on this site. It is a vein. You know why now. The entire design of this site tells a story. Somewhere on the journey, the red becomes gold, because somewhere on the journey I met God and things became different in ways I could not have imagined.
Also part of the design, there's black because there is darkness in this story. It is not all light.
Red for blood, gold for grace, black for the holes.
Coincidentally (not really lol i put a lot of thought into this) these are also the colors of the German flag: schwarz, rot, gold. This is where I live, and where I hope to become a citizen in 2026.
The story is not over. I plan to keep this page updated as the timeline progresses. At least now, there's not that much of a backlog.
If any of this touched you, please do reach out to me and let me know (or LinkedIn). I would love to hear from you.
## Topics he speaks and writes about
- AI engineering
- React
- JavaScript and the web platform
- Developer health
- Documentation and developer experience
## Preaching
He is a Christian and is available to preach: a sermon from the Bible, with the things he has lived through as the illustration rather than the subject. He became a Christian at 15 and has served in his church as a youth leader, a worship leader, a men's ministry leader, a deacon and in care ministry. Churches, church conferences, camps and youth events are welcome to ask. Based in Berlin, Germany, preaching in English, worldwide. Details and contact: https://tej.as/preaching
## Investing
Tejas Kumar is an angel investor in early stage startups, sometimes writing a check and sometimes joining as an advisor. He has backed 6 companies, of which 3 have been acquired, by CoreWeave, the Linux Foundation and Supabase. The checks are small and he usually follows Guillermo Rauch (https://rauchg.com), David Khourshid (https://stately.ai) and Swyx (https://swyx.io) into a round. Founders looking for angel investors in developer tools and AI infrastructure can pitch Tejas Kumar directly at https://cal.com/tejask/startup-pitch. Full portfolio, outcomes and coverage: https://tej.as/investing
- OpenPipe: Reinforcement learning that trains AI agents to get better at the job. https://openpipe.ai
- OpenSauced: Intelligence on who actually builds open source, and how. https://github.com/open-sauced
- OrioleDATA: A storage engine that makes Postgres several times faster on modern hardware. https://www.orioledb.com
- CrabNebula: The company behind Tauri's app distribution, updates and security audits. $7.5M seed led by OSS Capital, 2023. https://crabnebula.dev
- Ravion: AWS infrastructure that deploys itself, built for engineers and their agents. Y Combinator, W22. https://www.ravion.com
- Contenda: Turned recorded talks and streams into written developer content. https://x.com/contendaco
## Book
Fluent React, the best selling book by Tejas Kumar, published by O'Reilly Media, ISBN 9781098138714. 11 chapters on how React works on the inside: JSX, the virtual DOM, reconciliation, common patterns, server side React, concurrent React, frameworks, React Server Components, and the alternatives to React. A second edition and a Portuguese translation exist.
- On this site: https://tej.as/react
- On Amazon: https://www.amazon.com/Fluent-React-Performant-Intuitive-Applications/dp/1098138716
## Podcast
ConTejas Code. ConTejas Code is a podcast in the web engineering space that has deep dives on various topics between frontend engineering with React, TypeScript, Next.js, and backend engineering with Kafka, Postgres, and more. The series is a mix of long-form content and guest episodes with industry leaders in the web engineering space. From the podcast, listeners will take away actionable best practices that you can integrate into your workflows as well as valuable insights from prominent people in the industry.
- On this site: https://tej.as/podcast
- Apple Podcasts: https://podcasts.apple.com/us/podcast/contejas-code/id1731855333
- Spotify: https://open.spotify.com/show/180d7lxX5P8UJ7tUcTTqaV
- Acast: https://shows.acast.com/contejas-code
- RSS: https://feeds.acast.com/public/shows/contejas-code
## All talks (85)
85 recorded talks at 68 events, 2012 to 2026.
### Evals in AI: A Deep Dive
Event: AI Engineer World's Fair 2026 (Workshop)
Recording published: 2026
Video: https://www.youtube.com/watch?v=NdrSPm6NCdk
Transcript: https://tej.as/talks/ai-engineer-world-s-fair-2026-workshop
### The Critical Advantage With AI
Event: Agent Conf 2026
Recording published: 2026
Video: https://www.youtube.com/watch?v=aNZz40sQg_g
Transcript: https://tej.as/talks/agent-conf-2026
### The New UX
Event: CityJS London 2026
Recording published: 2026
Video: https://www.youtube.com/watch?v=OwkZ-GMKtv8
Transcript: https://tej.as/talks/cityjs-london-2026
### Accessibility panel
Event: Future Frontend 2026 (Accessibility Panel)
Recording published: 2026
Video: https://www.youtube.com/watch?v=iSA23DLYPLs
Transcript: https://tej.as/talks/future-frontend-2026-accessibility-panel
### Frontend after AI: The New UX
Event: Future Frontend 2026
Recording published: 2026
Video: https://www.youtube.com/watch?v=hUQjn32UVFc
Transcript: https://tej.as/talks/future-frontend-2026
### Harnesses in AI: A Deep Dive
Event: AI Engineer Europe 2026
Recording published: 2026
Video: https://www.youtube.com/watch?v=C_GG5g38vLU
Transcript: https://tej.as/talks/ai-engineer-europe-2026
### AI Yesterday, Today, and Tomorrow: Extending AI Systems with Model Context Protocol
Event: How to Web 2025
Recording published: 2026
Video: https://www.youtube.com/watch?v=xVkJm3qWEkU
Transcript: https://tej.as/talks/how-to-web-2025
### How to Thrive as a Professional with AI
Event: React fwdays 2025
Recording published: 2026
Video: https://www.youtube.com/watch?v=GqP0Zj-mqfE
Transcript: https://tej.as/talks/react-fwdays-2025
### ConTejas AI Panel
Event: React Paris 2026
Recording published: 2026
Video: https://www.youtube.com/watch?v=0kTaR8L-_cs
### The Death of the Browser
Event: InfoQ
Recording published: 2026
Video: https://www.youtube.com/watch?v=b1fgxbKPHco
Transcript: https://tej.as/talks/infoq
### How to Optimize Your Health with React Native
Event: React Universe Meetup Berlin 2026
Recording published: 2026
Video: https://www.youtube.com/watch?v=UTBxhcBv7Ns
Transcript: https://tej.as/talks/react-universe-meetup-berlin-2026
### How to level up your productivity with MAS (Multi Agent Systems)
Event: WhatTheStack 2025
Recording published: 2025
Video: https://www.youtube.com/watch?v=SFkLjfwVPrQ
Transcript: https://tej.as/talks/whatthestack-2025
### Maximize Your Productivity with AI Agents
Event: React Summit 2025
Recording published: 2025
Video: https://www.youtube.com/watch?v=hi0epYlR-rg
Transcript: https://tej.as/talks/react-summit-2025
### How to Thrive as a Developer
Event: AI Driven Development Day 2025
Recording published: 2025
Video: https://www.youtube.com/watch?v=eXBs98E_j4s
Transcript: https://tej.as/talks/ai-driven-development-day-2025
### Creating fluent Frontend Experiences in an age of AI
Event: Frontend Nation 2025
Recording published: 2025
Video: https://www.youtube.com/watch?v=-JjD6IbRrNM
Transcript: https://tej.as/talks/frontend-nation-2025
### How Devs Can Maximize Their Productivity with AI Agents in 2025
Event: Productivity Conf 2025
Recording published: 2025
Video: https://www.youtube.com/watch?v=LCrkIf8g7M4
Transcript: https://tej.as/talks/productivity-conf-2025
### UI Engineering for the AI Age
Event: React Day by Frontend Nation 2025
Recording published: 2025
Video: https://www.youtube.com/watch?v=u3cu8EN-SKk
Transcript: https://tej.as/talks/react-day-by-frontend-nation-2025
### Using AI Effectively in 2025
Event: BeJS 2025
Recording published: 2025
Video: https://www.youtube.com/watch?v=fKOfUqAOGSE
Transcript: https://tej.as/talks/bejs-2025
### React Devs, Here's Why You Should Give AI Another Chance
Event: React Day Berlin 2024
Recording published: 2025
Video: https://www.youtube.com/watch?v=fsAYMNl1Cj0
### The Dots Connect: My Entire Story
Event: THAT Conference 2023
Recording published: 2025
Video: https://www.youtube.com/watch?v=pWm7jGIJg2s
### Applying AI today
Event: React fwdays 2024
Recording published: 2025
Video: https://www.youtube.com/watch?v=-uqDcjUIvxg
### Why Small Language Models are the future
Event: AI Eng Talks 2024
Recording published: 2024
Video: https://www.youtube.com/watch?v=uNj3y2pItrA
### React Server Components in AI Applications
Event: React Advanced London 2024
Recording published: 2024
Video: https://www.youtube.com/watch?v=qlEsdo1F004
### Event Sourcing for the Rest of Us
Event: Build Stuff 2024
Recording published: 2024
Video: https://www.youtube.com/watch?v=fcG-XgLkIhM
### New Trends in Front End Development and what we can learn from them
Event: Build Stuff 2023
Recording published: 2024
Video: https://www.youtube.com/watch?v=OSXUF2ydu_w
### You Are an AI Engineer
Event: JNation 2024
Recording published: 2024
Video: https://www.youtube.com/watch?v=QoJ6RtiEICY&t=126s&pp=ygUNam5hdGlvbiB0ZWphcw%3D%3D
### Build a RAG App In Under 20 Minutes
Event: RAG++ London 2024
Recording published: 2024
Video: https://www.youtube.com/watch?v=COIpsrgy1a0
Transcript: https://tej.as/talks/rag-london-2024
### Unlocking Value with AI Today
Event: React Rally 2024
Recording published: 2024
Video: https://www.youtube.com/watch?v=uMksIqpbVoY
### AI-Generated React Server Components
Event: CascadiaJS 2024
Recording published: 2024
Video: https://www.youtube.com/watch?v=Yj1gWCBqHIA&t=746s&pp=ygUQY2FzY2FkaWFqcyB0ZWphcw%3D%3D
### Generative UI as a Complement to Gen AI
Event: The GEEK Conf 2024
Recording published: 2024
Video: https://www.youtube.com/watch?v=KfGgup5y3bk
Transcript: https://tej.as/talks/the-geek-conf-2024
### Best AI Tools for Web Developers
Event: Pixel Pioneers 2024
Recording published: 2024
Video: https://www.youtube.com/watch?v=B_NeczKu20c&t=5s&pp=ygUUcGl4ZWwgcGlvbmVlcnMgdGVqYXM%3D
### Event Sourcing for JS Devs
Event: CityJS London 2024
Recording published: 2024
Video: https://www.youtube.com/watch?v=Gw1le4OdKCs
### You are an AI engineer
Event: JS Heroes 2024
Recording published: 2024
Video: https://www.youtube.com/watch?v=AlsNzAoCLSA
### Getting Fluent with React
Event: Frontend Nation 2024
Recording published: 2024
Video: https://www.youtube.com/watch?v=GEmLMWixogM
### I Wrote a Book on React: Things You Should Know
Event: React Paris 2024
Recording published: 2024
Video: https://youtube.com/watch?v=5MZbkow5U8o
### React Server Components
Event: React Day Berlin 2023
Recording published: 2023
Video: https://www.youtube.com/watch?v=ar21ZA5MWS8
### Let’s Make A Framework
Event: BeJS 2023
Recording published: 2023
Video: https://www.youtube.com/watch?v=_qfbYB6Hdgg
### New Trends in Front-End Development (and What We Can Learn from them)
Event: Infobip Shift 2023
Recording published: 2023
Video: https://www.youtube.com/watch?v=VINfWbaFBVs
### React as a Developer Health Tool
Event: RenderATL 2023
Recording published: 2023
Video: https://www.youtube.com/watch?v=2qBQRglRcIA&t=679s&pp=ygUWdGVqYXMga3VtYXIgY29uZmVyZW5jZQ%3D%3D
### React Server Components
Event: React Bangalore 2023
Recording published: 2023
Video: https://www.youtube.com/watch?v=LuCiywxFc1E
### Why everybody needs to use a framework
Event: ReactNext 2023
Recording published: 2023
Video: https://www.youtube.com/watch?v=zBPh6ZaAWAA&pp=ygUWdGVqYXMga3VtYXIgY29uZmVyZW5jZQ%3D%3D
### Building a Voice Activated Personal Assistant
Event: Smashing Meets AI 2023
Recording published: 2023
Video: https://www.youtube.com/watch?v=wnxTXAacOlU
### Building a Voice-Enabled AI Assistant With JavaScript
Event: JSNation 2023
Recording published: 2023
Video: https://www.youtube.com/watch?v=GBO05PZ5O1E&pp=ygUWdGVqYXMga3VtYXIgY29uZmVyZW5jZQ%3D%3D
### React as a Developer Health Tool
Event: React Miami 2023
Recording published: 2023
Video: https://www.youtube.com/watch?v=oNQvzML3XHw&pp=ygUWdGVqYXMga3VtYXIgY29uZmVyZW5jZQ%3D%3D
### Panel Discussion
Event: AgentConf 2023
Recording published: 2023
Video: https://www.youtube.com/watch?v=ZCTtZhWRRg0
### Digging into Virtual Scrolling
Event: SmashingConf Freiburg 2022
Recording published: 2022
Video: https://www.youtube.com/watch?v=5B0PdMEXZSM
Transcript: https://tej.as/talks/smashingconf-freiburg-2022
### Let's understand suspense for data fetching
Event: React Brussels
Recording published: 2022
Video: https://youtu.be/uZnXwuhYZBc
### Understanding Concurrent React with Hacks
Event: React India
Recording published: 2022
Video: https://www.youtube.com/watch?v=KWb7U9p4h2U
### Documentation for Humans
Event: Infobip Shift 2022
Recording published: 2022
Video: https://www.youtube.com/watch?v=IbinkKZZp0k&t=165s&pp=ygUWdGVqYXMga3VtYXIgY29uZmVyZW5jZQ%3D%3D
### Enabling data at massive scale with Next.js
Event: Next.js Conf 2022
Recording published: 2022
Video: https://www.youtube.com/watch?v=3TVkTrZFizo
Transcript: https://tej.as/talks/next-js-conf-2022
### React Advanced London
Event: React Advanced London
Recording published: 2022
Video: https://youtu.be/GzombuX2tS0?t=2728
### Doing Data as a Frontend Developer
Event: CascadiaJS
Recording published: 2022
Video: https://www.youtube.com/watch?v=f2_aj1y3zO8
### Handling Data at Scale for React Developers
Event: React Summit
Recording published: 2022
Video: https://www.youtube.com/watch?v=7Urm4xbw4RA
### Building Human-Centered Documentation with React
Event: React Norway
Recording published: 2022
Video: https://www.youtube.com/watch?v=AQRlDs92XFA&t=6h38m05s
### The next evolution of data infrastructure for JavaScript developers
Event: BeJS
Recording published: 2022
Video: https://youtu.be/liwC7W-uWnY
### WorkerConf
Event: WorkerConf
Recording published: 2022
Video: https://www.youtube.com/watch?v=L4n3JDw5m_g
### Building a massively scalable and performant Jamstack app in minutes
Event: React Miami
Recording published: 2022
Video: https://www.youtube.com/watch?v=7meVjMOgw8A
### Changing The Game with Developer Experience
Event: ConFrontJS 2022
Recording published: 2022
Video: https://www.youtube.com/watch?v=AqpFgD2RHKI
Transcript: https://tej.as/talks/confrontjs-2022
### JavaScript data infrastructure
Event: LogRocket Podcast
Recording published: 2022
Video: https://www.youtube.com/watch?v=9S0hCRhodN8
Transcript: https://tej.as/talks/logrocket-podcast
### Serverless in the Park
Event: Serverless in the Park
Recording published: 2022
Video: https://www.youtube.com/watch?v=0qK2_wi4t3k&t=19570s
### OSCAFest22
Event: OSCAFest22
Recording published: 2022
Video: https://youtu.be/7jYvy4SFG1w?t=6100
### Explosive Velocity with a Modern Stack
Event: GOTO 2021
Recording published: 2021
Video: https://www.youtube.com/watch?v=KTkyQ3z7M8w
### Infrastructure as Code with a Node Focus
Event: NodeCongress
Recording published: 2021
Video: https://www.youtube.com/watch?v=_CTTRcEARTA
### Powerful REST in a GraphQL world
Event: ReactConf AU
Recording published: 2020
Video: https://www.youtube.com/watch?v=9xL0a6YJIQU
Transcript: https://tej.as/talks/reactconf-au
### Deconstructing React
Event: React Berlin Meetup 2020
Recording published: 2020
Video: https://www.youtube.com/watch?v=eTcyOCd6v1c
### Let's build with WebAssembly!
Event: JSConf Armenia
Recording published: 2020
Video: https://www.youtube.com/watch?v=ejEVdbyEVnc
### Strong RESTful Contracts in a GraphQL world
Event: React Day Berlin
Recording published: 2020
Video: https://m.youtube.com/watch?v=CWO6U7jaO20
### Gratitude, Healthcare, and Coding Communities
Event: JSConf EU (Lightning Talk)
Recording published: 2019
Video: https://www.youtube.com/watch?v=ipyy-FdHY-0
### CSS on Today's Web Platform
Event: View-source conf
Recording published: 2019
Video: https://www.youtube.com/watch?v=L-qALpMzcz8
### React and TypeScript for Fun and Profit
Event: TypeScript Berlin Meetup
Recording published: 2019
Video: https://www.youtube.com/watch?v=LUHecE-kO9s
### React Native and PWA: A Tale of Two Architectures
Event: WebCamp Zagreb
Recording published: 2019
Video: https://www.youtube.com/watch?v=XBh8ywUU0mw
### Using Hooks and Codegen
Event: ReactConf 2019
Recording published: 2019
Video: https://www.youtube.com/watch?v=cdsnzfJUqm0
### Legendary Lambdas
Event: JSConf Budapest
Recording published: 2019
Video: https://www.youtube.com/watch?v=RluWQ8Lfyg8
### Let's build with WebAssembly!
Event: JSCamp Romania
Recording published: 2019
Video: https://www.youtube.com/watch?v=AY-jBg-8Ofw
### A Tale of Two Architectures
Event: DinosaurJS
Recording published: 2019
Video: https://www.youtube.com/watch?v=9jNu1k4Bwa8
### Scalable Design Systems with TypeScript
Event: ReactFinland
Recording published: 2019
Video: https://www.youtube.com/watch?v=ZsBW4S8hYMU
### A Quick Recap on WebAssembly
Event: dotJS (Lightning Talk)
Recording published: 2018
Video: https://www.youtube.com/watch?v=IPEzwWt4adY
### Scalable Best Practices for Your Dev Team
Event: JSConf Armenia
Recording published: 2018
Video: https://www.youtube.com/watch?v=bs4vsji1GZ0
### Scalable Best Practices for Your Development Team
Event: ConFrontJS
Recording published: 2018
Video: https://www.youtube.com/watch?v=rdiUFma8QJU
### Streaming React for Faster UIs
Event: React Boston
Recording published: 2018
Video: https://www.youtube.com/watch?v=lKG3nYpPgtM
### React Suspense Deep Dive
Event: React Berlin Meetup
Recording published: 2018
Video: https://www.youtube.com/watch?v=JHtKhLPBqxw
### From You Can't to You Can: The Welcoming Nature of JavaScript
Event: UtahJS Conf
Recording published: 2018
Video: https://www.youtube.com/watch?v=71pKrWWOE0k
### From You Can't to You Can: The Welcoming Nature of JavaScript
Event: JSConf EU
Recording published: 2018
Video: https://www.youtube.com/watch?v=ONlLvZWXv1Y
Transcript: https://tej.as/talks/jsconf-eu
### Papercuts Can Kill
Event: TEDxYouth@Doha
Recording published: 2012
Video: https://www.youtube.com/watch?v=TUIcTl9Hto4
### SmashingConf New York 2024
Event: SmashingConf New York 2024
Recording published: unknown
Video: https://www.youtube.com/watch?v=uiZ6dwmVtYU
Transcript: https://tej.as/talks/smashingconf-new-york-2024
## All episodes (98)
### How to Build an Effective Tech Stack: Balancing User and Developer Experience
Published: 2026-04-15
Duration: 1:31:33
URL: https://tej.as/podcast/ep/how-to-build-tech-software-full-stack-engineering
Let's stay in touch? https://twitter.com/tejaskumar_
In this comprehensive podcast episode titled "How to Build an Effective Tech Stack," listeners are guided through the intricate process of constructing a technology stack that harmonizes both User Experience (UX) and Developer Experience (DX). Beginning with a foundational understanding of what a tech stack is, the episode delves into the various components that constitute a tech stack, including technology, tools, libraries, frameworks, and databases. It also covers essential practices such as testing, deployment/hosting, monitoring, and t...
### Paul Aragones: How to Engineer a Great Marriage
Published: 2026-03-02
Duration: 1:49:59
URL: https://tej.as/podcast/ep/paul-aragones-how-to-engineer-a-great-marriage
#### Links
- CodeCrafters (Sponsor): https://tej.as/codecrafters
- Guest Socials (Paul Aragones):
- Instagram: https://www.instagram.com/prequalizer/
- YouTube: https://www.youtube.com/@PinoyHusbands
- Gottman Institute (The Four Horsemen): https://www.gottman.com/blog/the-four-horsemen-recognizing-criticism-contempt-defensiveness-and-stonewalling/
- Cal.com (Peer Richelsen): https://cal.com
#### Mentioned Episodes
- Diazno
- Spotify: https://open.spotify.com/episode/4i4txd4HhngCGAtDWt0JZF?si=h-LM6LEPQGeh8Hsu2s5N4w
- Apple: https://podcasts.apple.com/nz/podcast/diazno-how-to-unlock-cre...
### What is AI engineering and what do AI engineers even do?
Published: 2026-02-23
Duration: 1:56:11
URL: https://tej.as/podcast/ep/what-is-ai-engineering-and-what-do-ai-engineers-even-do
Links
- CodeCrafters (Sponsor): https://tej.as/codecrafters
- The Rise of the AI Engineer (Latent Space): https://www.latentspace.com/p/ai-engineer
- Anthropic Model Context Protocol (MCP): https://www.anthropic.com/news/model-context-protocol
Anthropic Skills (SKILL.md): https://resources.anthropic.com/hubfs/The-Complete-Guide-to-Building-Skill-for-Claude.pdf?hsLang=en
- Pratim Bhosale on Vector Search (Previous Episode): https://www.youtube.com/watch?v=ZJcrI1GbDec
- OpenClaw (Official Repository): https://github.com/openclaw/openclaw
- WormGPT/Prompt Injection Incident (The Verge Refe...
### Mikhail Korolev: How to Hack the Job Market & Get Into VIP Rooms
Published: 2026-02-16
Duration: 1:30:58
URL: https://tej.as/podcast/ep/mikhail-korolev-how-to-hack-the-job-market-get-into-vip-room
Links
- CodeCrafters: https://codecrafters.io
- Kyle Simpson (You Don't Know JS): https://www.youtube.com/watch?v=BEMG7Oxuan8
- Josh Goldberg (CFP Advice): https://www.joshuakgoldberg.com/blog/how-i-apply-to-conferences/
- JSHeroes CFP Guide: https://jsheroes.io/ (See blog section)
- CFP.watch (by Roudy): https://cfp.watch
- confs.tech (mentioned at ~00:34): https://confs.tech
- Guillermo Rauch Episode: https://open.spotify.com/episode/6NzkPBjwpwLmhIntEUB95x?si=51ac6de6d8fa4f8e
- Santosh Yadav Episode: https://open.spotify.com/episode/7HIl3zqyDd3cZDmJLzKR58
- Jeff Escalante Episode: h...
### How to communicate well: interpersonally, in teams, and on stage
Published: 2026-02-09
Duration: 1:50:30
URL: https://tej.as/podcast/ep/how-to-communicate-well-interpersonally-in-teams-on-stage
#### Links
- [CodeCrafters (Sponsor)](https://tej.as/codecrafters)
- [Steve Jobs iPhone Introduction (2007)](https://www.youtube.com/watch?v=VQKMoT-6XSg)
- [Steve Ballmer "Developers"](https://www.youtube.com/watch?v=Vhh_GeBPOhs)
- [Bill Clinton "I did not have sexual relations"](https://www.youtube.com/watch?v=_aGbdni7QNs)
- [Tejas's First Talk (JSConf EU)](https://www.youtube.com/watch?v=ONlLvZWXv1Y)
- [Tejas at React Summit (The "Sweaty Room" Talk)](https://www.youtube.com/watch?v=7Urm4xbw4RA)
- [Amy Cuddy's Power Posing TED Talk](https://www.ted.com/talks/amy_cuddy_your_body_language_may_...
### Diazno: How to Unlock Creativity, Taste, and Effective Leadership
Published: 2026-02-02
Duration: 1:40:29
URL: https://tej.as/podcast/ep/diazno-how-to-unlock-creativity-taste-and-leadership
#### **Links**
- [CodeCrafters (Sponsor)](https://tej.as/CodeCrafters)
- [Partner with ConTejas Code](https://tej.as)
- [Diazno on Spotify](https://open.spotify.com/artist/4UobcfdsvVwgXka22f9I7d)
- [Diazno on Instagram](https://www.instagram.com/diazno)
- [Tejas’s Keynote in Malaysia (Sick Day)](https://www.linkedin.com/posts/shift-conference_tejas-kumar-took-the-stage-at-shift-kuala-activity-7401201664688537600-Bj8c/)
#### Description
In this episode of the ConTejas Code Podcast, Tejas sits down with the artist, producer, and multi-instrumentalist Diazno. Often described as the "Black...
### Isaac Akinsete: How to Optimize Health & Longevity as a Desk Worker
Published: 2026-01-26
Duration: 1:36:05
URL: https://tej.as/podcast/ep/isaac-akinsete-optimize-health-desk-worker-longevity
Links
- Codecrafters (partner): https://tej.as/codecrafters
- Isaac on Instagram: https://instagram.com/isaac11890
- Contact: https://tej.as
Summary
Sitting 8+ hours a day is destroying your biomechanics. Here is how to engineer your way back to health.
In this episode of ConTejas Code, I sit down with professional footballer and CrossFit coach Isaac Akinsete to reverse the physical damage of the developer lifestyle. We dive deep into the anatomy of "tech neck," why stretching isn't enough, and how to trigger the EPOC "afterburn" effect to burn fat while sitting. Whether you have a full...
### Faris Aziz: How to Get Promoted, Build Resilience, and Lead with Empathy
Published: 2026-01-19
Duration: 1:48:49
URL: https://tej.as/podcast/ep/faris-aziz-how-to-get-promoted-build-resilience-empathy
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Become a guest on the podcast: https://forms.gle/wMqBmVhuzL46Ha3P7
- ZurichJS Discount: https://conf.zurichjs.com?utm_source=contejas&utm_medium=partner&utm_campaign=zurichjs-conf-2026
- Faris on X: https://x.com/farisaziz12
- Faris on LinkedIn: https://www.linkedin.com/in/farisaziz12/
- ZurichJS: https://zurichjs.com
- SmallPDF: https://smallpdf.com
What does it take to become an Engineering Manager at 21? How do you rebuild your identity when a chronic illness takes away your physical strength? In this episode of ConTejas...
### Passkeys: A Deep Dive into Authentication
Published: 2026-01-12
Duration: 1:36:37
URL: https://tej.as/podcast/ep/passkeys-webauthn
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Clerk: https://clerk.com
- Auth0: https://auth0.com
- Arctic (OAuth Library): https://arctic.js.org
- Lucia (Session Library): https://lucia-auth.com
Why do we still use passwords in 2026? In this episode of ConTejas Code, we tear down the complex world of digital identity. From the horror story of getting hacked at a hookah bar to the mathematical elegance of public-key cryptography, we cover how the internet knows who you actually are.
Let's break down the history of web authentication, explain why "logging in" is so much h...
### How to Engineer Your Way to Quality Health
Published: 2026-01-05
Duration: 1:52:55
URL: https://tej.as/podcast/ep/how-to-engineer-your-way-to-quality-health
Links
- Codecrafters: https://tej.as/codecrafters
- Why We Sleep: https://www.amazon.de/-/en/Why-We-Sleep-Unlocking-Dreams/dp/1501144316
- Matthew Walker's Podcast: https://open.spotify.com/show/1aIVAabjRjnmiouX0zCzF3
- Sleep latency paper: https://pubmed.ncbi.nlm.nih.gov/33865376/#:~:text=Oral%20magnesium%20supplementation%20for%20insomnia,insomnia%20symptoms%20in%20older%20adults
- Glycine for sleep: https://glowable.com.au/blogs/news/glycine-the-calming-nutrient-for-soothing-anxiety?srsltid=AfmBOor_YWMUUsqdS9AJjfSJLQb1F0CSEKrbw-0AhjCVkXCcHdjPGtWq#:~:text=of%20Pharmacological%20Sciences...
### Pratim Bhosale: How to get into AI from Backend Engineering
Published: 2025-07-07
Duration: 1:32:26
URL: https://tej.as/podcast/ep/pratim-bhosale-how-to-get-into-ai-from-backend-engineering
Links
- CodeCrafters (partner): https://tej.as/CodeCrafters
- Pratim on X: https://x.com/bhosalepratim
- Tejas on X: https://x.com/tejaskumar_
Summary
In this conversation, we explore the journey from backend development to becoming a Google Developer Expert in Golang. We discuss the significance of microservices architecture, the importance of search technologies, and the development of Cargo Chat, a tool for searching codebases.
Pratim shares insights on building effective search pipelines, Matryoshka embedding models, and the integration of hypothetical documents in search processes....
### Shivay Lamba: How to run secure AI anywhere with WebAssembly
Published: 2025-06-23
Duration: 1:33:49
URL: https://tej.as/podcast/ep/shivay-lamba-how-to-run-secure-ai-anywhere-with-webassembly
Links
- CodeCrafters (partner): https://tej.as/codecrafters
- WebAssembly on Kubernetes: https://www.cncf.io/blog/2024/03/12/webassembly-on-kubernetes-from-containers-to-wasm-part-01/
- Shivay on X: https://x.com/howdevelop
- Tejas on X: https://x.com/tejaskumar_
Summary
In this podcast episode, Shivay Lamba and I discuss the integration of WebAssembly with AI and machine learning, exploring its implications for developers. We dive into the benefits of running machine learning models in the browser, the significance of edge computing, and the performance advantages of WebAssembly over tr...
### DevRel deep dive: what it is, how to do it, how to measure it
Published: 2025-06-09
Duration: 2:06:49
URL: https://tej.as/podcast/ep/devrel-deep-dive-what-it-is-how-to-do-it-how-to-measure-it
Links
- Codecrafters (Partner): https://tej.as/codecrafters
- Tejas on X: https://x.com/tejaskumar_
- Mary Thengvall, The Business Value of Developer Relations: https://develocity.io/measuring-devrel-success-effective-metrics-for-impact/#:~:text=In%20a%20talk%20given%20at,5
- Matthew Revell, “What is Developer Relations?”: https://developerrelations.com/guides/what-is-developer-relations/#:~:text=Most%20companies%20invest%20in%20DevRel,because%20they%20want%20to%20affect
- Quinton Wall, Does Developer Relations Belong Under Marketing or Engineering?: https://www.linkedin.com/pulse/does-de...
### Dev Agrawal: How to be notable, event sourcing, and SolidJS
Published: 2025-06-02
Duration: 1:46:11
URL: https://tej.as/podcast/ep/dev-agrawal-how-to-be-notable-event-sourcing-and-solidjs
Links
- CodeCrafters (partner): https://tej.as/codecrafters
- Dev on X: https://x.com/devagrawal09
- Xolvio: https://xolv.io/
- Tejas on X: https://x.com/tejaskumar_
Previous Episodes
- Taylor Desseyn
- YouTube: https://www.youtube.com/watch?v=6l6GpkHNlZw
- Spotify: https://open.spotify.com/episode/1xN7YeNpkCf4qJ3kUkVVuh
- Apple: https://podcasts.apple.com/nz/podcast/taylor-desseyn-how-to-build-a-genuine-high-quality-network/id1731855333?i=1000684664112
- Event Sourcing
- YouTube: https://www.youtube.com/watch?v=VtmPTigdpos
- Spotify: https://open.spotify.com/episode/32dm...
### Lu Wilson: How to Build an AI-Native Whiteboard for Everyone
Published: 2025-05-26
Duration: 1:09:13
URL: https://tej.as/podcast/ep/lu-wilson-tldraw-how-build-an-ai-native-whiteboard
Links
- CodeCrafters (partner): https://tej.as/codecrafters
- Lu on X: https://x.com/todepond
- Lu on Bluesky: https://bsky.app/profile/todepond.com
- Lu on YouTube: https://www.youtube.com/@todepond
- tldraw: https://tldraw.com/
- Make Real: https://makereal.tldraw.com/
- tldraw computer: https://computer.tldraw.com/
- Tejas on X: https://x.com/tejaskumar_
Summary
We talk with Lu Wilson, an engineer at tldraw: a startup focused on innovative whiteboard technology. Together, we discuss the evolution of tldraw, the impact of AI on creative workflows, and the importance of experimentat...
### Sean Roberts: How to create better UX with AI Agent Experience (AX)
Published: 2025-05-19
Duration: 1:51:19
URL: https://tej.as/podcast/ep/sean-roberts-ax-agent-experience-netlify
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Agent Experience: https://agentexperience.ax
- Arrazo: https://spec.openapis.org/arazzo/latest.html
- Netlify: https://netlify.com
- Sean on X: https://x.com/JavaSquip
- Tejas on X: https://x.com/tejaskumar_
Summary
This episode dives deep into the emerging field of Agent Experience (AX), exploring how software agents, including LLMs, will interact with the web and online services. The conversation highlights the distinction between the "human web" and the "agent web," emphasizing the need for new approaches to ensure agents...
### Santosh Yadav: How to level up your career, health, and life
Published: 2025-05-12
Duration: 1:47:04
URL: https://tej.as/podcast/ep/santosh-yadav-how-to-level-up-your-career-health-and-life
Links
- CodeCrafters (partner): https://codecrafters.io/
- Santosh's website: https://santoshyadav.dev/
- Santosh on X: https://x.com/santoshyadavdev
- "My Journey to Staff Engineer" by Santosh: https://www.santoshyadav.dev/blog/2025-03-29-my-journey-to-staff-engineer/
- The Staff Engineer's Path: https://www.oreilly.com/library/view/the-staff-engineers/9781098118723/
Previous episode with Santosh
- Apple: https://podcasts.apple.com/us/podcast/santosh-yadav-how-open-source-changes-lives-angular/id1731855333?i=1000664702562&l=pt-BR
- Spotify: https://open.spotify.com/episode/1qjaz4PCxEM...
### Sacha Greif: How to Understand Developers through Surveys
Published: 2025-05-05
Duration: 1:57:18
URL: https://tej.as/podcast/ep/sacha-greif-how-to-understand-developers-through-surveys
Links
- Codecrafters (partner): https://tej.as/codecrafters
- State of Devs survey: https://stateofdevs.com/en-US
- Sacha's post on Dev.to: https://dev.to/sachagreif/how-the-devographics-surveys-are-run-2023-edition-1p6a\
- Episode with Ujjwal Sharma (TC39 Chair): https://www.linkedin.com/posts/tejasq_contejas-code-ujjwal-sharma-how-javascript-activity-7185637709128884225-joHP
- Sacha on X: https://x.com/SachaGreif
- Sacha's website: https://sachagreif.com/
- Tejas on X: https://x.com/tejaskumar_
Summary
In this discussion, we talk deeply with Sacha Greif, the founder of the popular S...
### Alexander Lichter: The State of Modern Web Tooling
Published: 2025-04-28
Duration: 1:37:26
URL: https://tej.as/podcast/ep/alexander-lichter-voidzero-vite-rolldown-oxc
Links
- Codecrafters (sponsor): https://tej.as
- Alex: https://www.lichter.io/
- Alex on YouTube: https://www.youtube.com/@TheAlexLichter
- Alex on X: https://x.com/TheAlexLichter
- VoidZero: https://voidzero.dev/
- Vite Plus: https://i.redd.it/l0d9yemja1pe1.jpeg
- Talk including VitePlus: https://youtube.com/watch?v=5mn3EpWCcJs&t=16353s
- Rolldown Vite: https://vite.dev/rolldown
- Oxc Custom Lint Plugins discussion: https://github.com/oxc-project/oxc/discussions/10342#discussioncomment-12828320
Previous Episode
- Apple: https://podcasts.apple.com/us/podcast/alexander-lichter-how-to...
### Kent C. Dodds: Model Context Protocol (MCP) and how it changes UX
Published: 2025-04-21
Duration: 2:01:25
URL: https://tej.as/podcast/ep/kent-c-dodds-mcp-ux-epicai
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Epic AI: https://epicai.pro/
- MCP: https://www.anthropic.com/news/model-context-protocol
- Kent on X: https://x.com/kentcdodds
- Tejas on X: https://x.com/tejaskumar_
Summary
In this episode, we explore the evolution of user interaction, particularly in the context of AI and the Model Context Protocol (MCP). We discuss how user experiences are shifting from traditional UI elements to more natural language interactions, akin to conversing with a human assistant. We also discuss the potential of AI to enhance user experiences...
### Kendo UI Team: How to build quality design systems, Kendo UI, collaboration
Published: 2025-04-14
Duration: 1:47:44
URL: https://tej.as/podcast/ep/kendo-ui-design-systems-component-library-progress-telerik
Links
- Kendo React: https://www.telerik.com/kendo-react-ui/components/free
- Kathryn's Book: https://www.telerik.com/campaigns/design-story/ebook--foundations-of-design-for-developers
- Progress: https://progress.com
- Sam on X: https://x.com/samidip
- Kathryn on X: https://x.com/kathryngrayson
- Kiril on X: https://x.com/kirchoni
Summary
In this episode, we talk with Sam Basu, Kathryn Grayson Nanz, and Kiril to explore Kendo UI and Kendo React. We discuss the evolution of UI libraries, the engineering behind Kendo's components, and the importance of accessibility in modern applicati...
### Event Sourced Architecture: A Deep Dive
Published: 2025-04-07
Duration: 1:29:34
URL: https://tej.as/podcast/ep/event-sourcing-architecture-domain-driven-design-deep-dive
Follow me on 𝕏: https://x.com/tejaskumar_
This podcast episode dives deep into the world of Event Sourcing, a powerful architectural pattern used in modern software development. Beginning with a clear definition of Event Sourcing, the episode explores its roots in Domain Driven Design and its critical role in recording and storing every change made to the state of an application in an event store. I break down complex topics, such as the nature of events, the intricacies of implementing Event Sourcing in real-world applications, and the various benefits and challenges associated with this ap...
### Get up to date with AI in 2025: Agents, Model Context Protocol (MCP), Hybrid Search, RAG, and more...
Published: 2025-03-31
Duration: 1:35:50
URL: https://tej.as/podcast/ep/ai-rag-agents-2025-mcp-model-context-protocol
#### Links
- Codecrafters: https://tej.as/codecrafters
- Tejas on X: https://x.com/tejaskumar_
- JSHeroes conference: https://jsheroes.io
- Attention is All You Need Paper: https://scispace.com/pdf/attention-is-all-you-need-1hodz0wcqb.pdf
- Google Agents paper: https://ppc.land/content/files/2025/01/Newwhitepaper_Agents2.pdf
- Jack Herrington episode about implementing MCP server:
- YouTube: https://www.youtube.com/watch?v=0zXyCQV4A84
- Apple: https://podcasts.apple.com/nz/podcast/jack-herrington-model-context-protocol-mcp-growing/id1731855333?i=1000698551942
- Spotify: https://open.s...
### Shuhao Zhang, founder Tiny Fish: How to Turn Any Website into an API for AI Agents
Published: 2025-03-24
Duration: 1:36:33
URL: https://tej.as/podcast/ep/shuhao-zhang-tiny-fish-agentql-ai-agents
Links
- Codecrafters: https://tej.as/codecrafters
- Tiny Fish: https://tinyfish.io
- AgentQL: https://www.agentql.com/
Summary
In this conversation, we discuss AgentQL, a framework designed to enable AI agents to access the web using natural language. Together, we explore the technical aspects of AgentQL, its advantages over traditional web access methods, and the challenges faced in its development. The discussion also covers the role of TinyFish, the parent company of AgentQL, and the future direction of their products.
Key use cases for developers are highlighted, showcasing how Agen...
### Liran Tal: How to Secure Your Apps and AI Agents
Published: 2025-03-17
Duration: 1:33:23
URL: https://tej.as/podcast/ep/liran-tal-snyk-how-to-secure-your-apps-and-ai-agents
Links
- Codecrafters (partner): https://tej.as/codecrafters
- Snyk: https://snyk.io/
- Liran on X: https://x.com/liran_tal
- Tejas on X: https://x.com/tejaskumar_
Summary
In this conversation, we explore the complexities of software security, particularly focusing on the challenges posed by Node.js and the broader software supply chain. We discuss the evolution of security practices, the importance of awareness among developers, and the role of automation in enhancing security measures. The conversation highlights the need for a balance between automated tools and manual audits, emphasiz...
### Jack Herrington: Model Context Protocol (MCP), Growing a YouTube Audience, Getting into Open Source
Published: 2025-03-10
Duration: 1:39:19
URL: https://tej.as/podcast/ep/jack-herrington-model-context-protocol-mcp-growing-a-youtube
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Jack on YouTube: https://www.youtube.com/@jherr
- Jack on X: https://x.com/jherr
- Jack on Bluesky: https://bsky.app/profile/jherr.dev
- Tejas on X: https://x.com/tejaskumar_
- create-tsrouter-app: https://github.com/TanStack/create-tsrouter-app
Summary
In this discussion, Jack Harrington and I explore the transition from being a content creator to an open source contributor, discussing the challenges and rewards of both paths. Jack shares his journey from being a principal engineer to a YouTuber, and now to a key player in...
### Chinar Movsisyan: How to Deliver End-to-End AI Solutions
Published: 2025-03-03
Duration: 1:30:16
URL: https://tej.as/podcast/ep/chinar-movsisyan-how-to-deliver-end-to-end-ai-solutions
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Feedback Intelligence: https://www.feedbackintelligence.ai/
- Chinar on X: https://x.com/movsisyanchinar
Summary
In this podcast episode, we talk to Chinar Movsisyan, the CEO and founder of Feedback Intelligence. They discuss Chinar's extensive background in AI, including her experience in machine learning and computer vision. We discuss the challenges faced in bridging the gap between technical and non-technical stakeholders, the practical applications of feedback intelligence in enhancing user experience, and the importance o...
### Daniel Lockyer: How to deploy and scale anything
Published: 2025-02-24
Duration: 1:40:41
URL: https://tej.as/podcast/ep/daniel-lockyer-how-to-deploy-and-scale-anything
Links
- Codecrafters (partner): https://tej.as/codecrafters
- Ghost: https://ghost.org/
- Daniel on X: https://x.com/daniellockyer
- Tejas on X: https://x.com/tejaskumar_
Summary
In this conversation, Daniel Lockyer (Ghost) and I explore the intricacies of DevOps, server management, and the balance between simplicity and complexity in software engineering. We discuss the ideal server setup for static sites, scaling considerations, the use of PHP and NGINX, and the challenges of manual server management. The conversation also touches on the debate around Kubernetes, cognitive load in soft...
### Eddy Vinck: How to Solve Your Own Problems with AI
Published: 2025-02-17
Duration: 1:27:13
URL: https://tej.as/podcast/ep/eddy-vinck-how-to-solve-your-own-problems-with-ai
Links
- Codecrafters (partner): https://tej.as/codecrafters
- Blog Recorder: https://blogrecorder.com/
- Eddy on X: https://x.com/eddyvinckk
- Tejas on X: https://x.com/tejaskumar_
Summary
In this conversation, we discuss Blog Recorder which allows users to create blog posts by speaking their thoughts. Eddy explains the technology behind the product, including the speech-to-text pipeline and the AI components involved. He shares insights into his journey as a software engineer, the balance between AI and UI development, and the importance of building a future-proof product.
Chapters
0...
### Dan Bochman: How to Create AI Image Generation Models
Published: 2025-02-10
Duration: 1:49:58
URL: https://tej.as/podcast/ep/dan-bochman-ai-image-generation-fashn-computer-vision
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- FASHN AI: https://fashn.ai
- Dan on X: https://x.com/danbochman
- Aya on X: https://x.com/ayaboch
- Tejas on X: https://x.com/tejaskumar_
Summary
In this conversation, we dive deep into the intricacies of AI, focusing on concepts like latent space, diffusion, and the evolution of image generation techniques. We explore how latent space serves as a condensed representation of features, the challenges faced by GANs, and how diffusion models have emerged as a more effective method for generating images from noise. The discussion...
### Marisa Morby: How to Design Products with Nature in Mind
Published: 2025-02-03
Duration: 1:40:09
URL: https://tej.as/podcast/ep/marisa-morby-how-to-design-products-with-nature-in-mind
Links
- Codecrafters: https://tej.as/codecrafters
- Marisa on Bluesky: https://bsky.app/profile/marisamorby.com
- Tejas on X: https://x.com/tejaskumar_
- Tejas on Bluesky: https://bsky.app/profile/tej.as
Summary
In this conversation, we explore the profound relationship between design and nature: how nature serves as the ultimate inspiration for design, emphasizing that design is fundamentally about functionality. Marisa shares insights on how natural systems can inform technology and urban planning, and we digve into the concept of user interfaces in nature. The discussion also touches...
### Corbin Crutchley: How UI frameworks work in detail, thriving with mental health
Published: 2025-01-27
Duration: 1:34:26
URL: https://tej.as/podcast/ep/corbin-crutchley-ui-framework-mental-health
Links
- Codecrafters (partner): https://tej.as/Codecrafters
- Playful Programming: https://playfulprogramming.com/
- The Framework Field Guide: https://playfulprogramming.com/collections/framework-field-guide
- Tejas' Story: https://www.youtube.com/watch?v=zOKCrgQOiME
- Corbin on X: https://x.com/crutchcorn
- Tejas on X: https://x.com/tejaskumar_
Summary
In this conversation, we explore the world of frontend frameworks, discussing the importance of reactivity, the evolution of frameworks like React, Angular, and Vue, and the nuances of choosing the right framework based on developer ex...
### Taylor Desseyn: How to Build a Genuine, High-Quality Network
Published: 2025-01-20
Duration: 1:27:46
URL: https://tej.as/podcast/ep/taylor-desseyn-how-to-build-a-genuine-high-quality-network
Links
- Codecrafters: https://tej.as/codecrafters
- Taylor on X: https://x.com/tdesseyn
- Torc: https://torc.dev/
- Tejas on X: https://x.com/tejaskumar_
Summary
Taylor Desseyn and I explore the often contentious relationship between recruiters and engineers, discussing the cultural nuances that affect communication and understanding. Taylor shares insights on what differentiates good recruiters from bad ones, emphasizing the importance of building genuine relationships and understanding the technical landscape. Together, we dive into the evolution of Taylor's career from a competitive r...
### Chris Ferdinandi: How to Thrive as a Developer with ADHD
Published: 2025-01-13
Duration: 1:40:03
URL: https://tej.as/podcast/ep/chris-ferdinandi-how-to-thrive-as-a-developer-with-adhd
Links
- Codecrafters: https://tej.as/Codecrafters
- Go Make Things: https://gomakethings.com/
- ADHD ftw!: https://adhdftw.com/
- Chris on Bluesky: https://bsky.app/profile/cferdinandi.bsky.social
- Tejas on X: https://x.com/tejaskumar_
Summary
Chris Ferdinandi, a web developer with ADHD, discusses how ADHD affects software engineering workflows. He explains that ADHD is not a deficit of attention but rather a difficulty in regulating attention. ADHD can manifest as scattered and distracted behavior or intense hyperfocus on one task. In a software engineering context, open office enviro...
### Donny Wals: How to Build Effective iOS Applications from a Web Perspective
Published: 2025-01-06
Duration: 1:35:40
URL: https://tej.as/podcast/ep/donny-wals-how-to-build-effective-ios-applications-from-a-we
Links
- Codecrafters: https://tej.as/codecrafters
- Donny on X: https://x.com/DonnyWals
- Tejas on X: https://x.com/tejaskumar_
Summary
In this conversation, we explore the transition from web development to iOS development, discussing the differences in tooling, options, and development experiences. The discussion also covers the nuances of SwiftUI, the challenges of using Xcode, and the mindset differences between iOS and web developers.
Chapters
00:00:00 Donny Wals
00:02:56 From Web Development to iOS: A Journey
00:07:00 The Current State of iOS Development
00:13:25 Comparing iOS...
### Richard Rodger: How to Build and Scale World-Class Consultancies (and DevRel)
Published: 2024-12-30
Duration: 1:39:48
URL: https://tej.as/podcast/ep/richard-roger-nearform-voxgig-devrel
Links
- Codecrafters: https://tej.as/codecrafters
- Voxgig: https://voxgig.com
- Richard on X: https://x.com/rjrodger
- Richard on LinkedIn: https://www.linkedin.com/in/richardrodger/
- Tejas on X: https://x.com/tejaskumar_
Summary
Richard Rodger, founder of Nearform and VoxGig, shares his journey from studying mathematics and philosophy to becoming a technical founder. He discusses the importance of community and marketing in building a successful business. He also explores the challenges of scaling a company and the value of hiring people from failed startups. Together, we explore the...
### Ivan Burazin, co-founder Daytona: How to Accelerate Developer Onboarding by 56%
Published: 2024-12-23
Duration: 1:42:06
URL: https://tej.as/podcast/ep/ivan-burazin-co-founder-daytona-developer-environments
Links
- Codecrafters (Partner): https://tej.as/codecrafters
- Daytona: https://daytona.io
- Ivan on X: https://x.com/ivanburazin
- Tejas on X: https://x.com/tejaskumar_
Summary
In this conversation, Ivan Burazin discusses the journey of building Daytona, a cloud-based development environment, and the challenges faced along the way. We explore the origins of Daytona, its technical infrastructure, the value it provides to developers and enterprises, and the decision-making process behind building the product instead of selling it. The discussion also touches on the importance of security,...
### Julia Flament-Wallin: How to Build Maps of the World with AI
Published: 2024-12-16
Duration: 1:30:06
URL: https://tej.as/podcast/ep/julia-flament-wallin-how-to-build-maps-of-the-world-with-ai
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Julia's Talk: https://youtu.be/IFn2hMt480M?si=x0-2M2IBOASwaicz
- TomTom: https://tomtom.com
- Julia on LinkedIn: https://www.linkedin.com/in/juliawallin/
- Tejas on X: https://x.com/tejaskumar_
Summary
In this podcast episode, we discuss the evolving landscape of AI engineering, data science, and data engineering. Julia and I explore the definitions and distinctions between these roles, delve into the intricacies of clustering and classification, and examine the role of MLOps in deploying machine learning models.
Julia shar...
### Max Stoiber: How to build startups that get acquired (and cache GraphQL well)
Published: 2024-12-09
Duration: 1:41:04
URL: https://tej.as/podcast/ep/max-stoiber-stellate-graphql-spectrum
Links
- Codecrafters (sponsor): https://www.codecrafters.io/
- Stellate: https://stellate.co/
- Max on X: https://x.com/mxstbr
- Tejas on X: https://x.com/tejasq
Summary
Max Stoiber, co-founder and CEO of Stellate, discusses his journey from creating popular open-source projects like React and Styled Components to building a company that provides GraphQL edge caching and CDN services.
He shares his motivation for open-sourcing his projects and the benefits of sharing and connecting with others in the developer community. Max also explains the evolution of Stellate and how they identifi...
### Alexander Lichter: How to Get the Most out of Vue.js and Nuxt
Published: 2024-12-02
Duration: 1:49:35
URL: https://tej.as/podcast/ep/alexander-lichter-how-to-get-the-most-out-of-vuejs-and-nuxt
Links
- Codecrafters (sponsor): https://tej.as
- Alex: https://www.lichter.io/
- Alex on YouTube: https://www.youtube.com/@TheAlexLichter
- Alex on X: https://x.com/TheAlexLichter
Summary
This episode discusses a conversation with Alexander Lichter, a web engineering consultant and member of the Vue.js and Nuxt community. He shares his journey into content creation, including his YouTube channel and the DejaVue podcast, which he started to fill a gap in advanced Vue.js educational content.
The discussion explores why Vue gained popularity, particularly among developers from non-JavaScri...
### Aymen Ben Amor: How to Organize Developer Conferences
Published: 2024-11-25
Duration: 1:28:43
URL: https://tej.as/podcast/ep/aymen-bejs-react-brussels-paris-africa-conference-organize
Links
- Codecrafters (partner): https://tej.as/codecrafters
- React Africa: https://react-africa.com/
- React Paris: https://react.paris/
- Aymen on X: https://x.com/aymen_ben_amor
- Tejas on X: https://x.com/tejaskumar_
Summary
Aymen Ben Amor, founder of BeJS Conferences, shares his journey of starting and organizing successful tech conferences. He discusses the origin of BeJS Conferences and the inspiration he drew from attending his first conference. Aymen emphasizes the importance of creating a community and fostering connections among attendees. He also highlights the challenges of...
### Matt Pocock: How to Maximize Success with TypeScript and Career
Published: 2024-11-18
Duration: 1:42:23
URL: https://tej.as/podcast/ep/matt-pocock-total-typescript
Links
- Codecrafters (sponsor): https://tej.as/Codecrafters
- Total TypeScript: https://www.totaltypescript.com/
- Matt on X: https://x.com/mattpocockuk
- Tejas on X: https://x.com/tejasq
In this conversation, Matt Pocock and I discuss the fundamentals of TypeScript and its benefits. We explore the concept of types in JavaScript and how TypeScript enhances the development process by providing a shorter feedback loop. The conversation dives into the topic of complex types in TypeScript and the challenges we explore.
Additionally, Matt reflects on his journey from being self-employed to w...
### TC39: How signals work, adding signals to the JavaScript programming language
Published: 2024-11-11
Duration: 1:48:27
URL: https://tej.as/podcast/ep/tc39-signals
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- TC39 Signals Proposal: https://github.com/tc39/proposal-signals
Summary
In this conversation, Kristen Maevyn, and Daniel Ehrenberg discuss reactivity and its importance in JavaScript. They explore the concept of reactivity, its role in keeping applications deterministic, and the challenges of achieving consistency in modern rendering frameworks. They also compare signals to observables and explain why signals are being considered as a language-level feature.
The conversation touches on the API for signals, the use of classes i...
### Paul Klein IV: How to Build Browsers for AI Agents
Published: 2024-11-04
Duration: 1:33:25
URL: https://tej.as/podcast/ep/paul-klein-iv-browserbase
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- React Africa (partner): https://react-africa.com/
- Browserbase: https://browserbase.com/
- Browserbase Series A Announcement: https://www.kleinerperkins.com/perspectives/browserbase-AI-seriesa/
- Paul on X: https://x.com/pk_iv
Summary
In this conversation, we talk to Paul Klein IV, the founder of BrowserBase. We discuss the concept of browser-based software and its potential to automate tasks on the web. Paul explains that the future of software is one where it does the work for us, and Browserbase is designed to power this...
### Kelly Vaughn: How to Navigate Career Transitions and Build Meaningful Relationships
Published: 2024-10-28
Duration: 1:38:18
URL: https://tej.as/podcast/ep/kelly-vaughn-spot-ai-engineering-director-career
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- React Brussels: https://react.brussels
- React Africa: https://react-africa.com
- Kelly on X: https://x.com/kvlly
- Spot AI: https://spot.ai
- Tejas on X: https://x.com/tejaskumar
Summary
Kelly Vaughn, Director of Engineering at Spot AI, shares her unique career journey from self-taught coder to entrepreneur and now corporate leader. She discusses running a Shopify agency, co-founding a venture-backed startup, and transitioning to her current role. Key points include:
- The challenges of running an agency and managing emplo...
### Aya Bochman, co-founder Fashn.ai: How to build a lean AI startup (that makes money)
Published: 2024-10-21
Duration: 1:32:46
URL: https://tej.as/podcast/ep/aya-bochman-fashn-ai-founder
Links
- Codecrafters (sponsor): [https://tej.as/codecrafters](https://tej.as/codecrafters)
- Upvote Fashn on ProductHunt: [https://www.producthunt.com/posts/fashn-virtual-try-on](https://www.producthunt.com/posts/fashn-virtual-try-on)
- Fashn: [https://fashn.ai](https://fashn.ai)
- Aya on 𝕏: [https://x.com/ayaboch](https://x.com/ayaboch)
- React Africa (partner): [https://react-africa.com](https://react-africa.com/)
Summary
Aya Bochman, co-founder of Fashion AI, discusses her journey in creating a generative AI platform for virtual try-on in the fashion industry. She shares insights on...
### Peer Richelsen, founder Cal.com: How to build an open startup
Published: 2024-10-14
Duration: 1:35:12
URL: https://tej.as/podcast/ep/peer-richelsen-founder-calcom-how-to-build-an-open-startup
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- React Brussels: https://react.brussels
- React Africa: https://react-africa.com
- Cal.com: https://cal.com
- Peer on X: https://x.com/peer_rich
- Tejas on X: https://x.com/tejaskumar_
Summary
In this discussion, Peer Richelsen, co-founder of Cal.com, shared insights into the company's open-source scheduling infrastructure. Cal.com offers customizable scheduling solutions for individuals and enterprises across various industries, with its open-source approach driving rapid development and community engagement. Richelsen high...
### Harper Carroll: How Machine Learning Works, What AI Engineering is, the Future of AI
Published: 2024-10-07
Duration: 1:42:43
URL: https://tej.as/podcast/ep/harper-carroll-ai-machine-learning-agi-nuclear
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- React Africa (partner): https://react-africa.com/
- Harper Carroll: https://harpercarrollai.com/
- 10 Days of AI Basics Course: https://www.youtube.com/watch?v=Ie7qxG9os1U&list=PL-ocKywdn6lE9l4LIPL4gMY4nNRfjEswG&pp=iAQB
- Harper on X: https://x.com/harperscarroll
- Isabelle Boemeke on X: https://x.com/isabelleboemeke
- Tejas on X: https://x.com/tejaskumar_
Summary
In this enlightening conversation with Harper Carroll, we dove deep into the world of AI, covering everything from the basics of neural networks to the cutting-ed...
### ChatGPT: How to Train an LLM, Ethics, and the future of AI
Published: 2024-09-30
Duration: 1:49:27
URL: https://tej.as/podcast/ep/chatgpt-how-to-train-an-llm-ethics-and-the-future-of-ai
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- SquiggleConf: https://squiggleconf.com/
- ChatGPT: https://chatgpt.com
Summary
In this groundbreaking episode of the ConTejas Code Podcast, we engage in a deep conversation with ChatGPT, exploring the intricacies of AI, its ethical implications, and the future of human-computer interaction. The discussion covers the training process of AI models, the importance of ethical data sourcing, and the challenges of transparency in AI development. The episode also dives into philosophical dilemmas like the trolley problem, the potenti...
### Tracy Lee, CEO This Dot: How to be successful in DevRel with AI
Published: 2024-09-23
Duration: 1:49:33
URL: https://tej.as/podcast/ep/tracy-lee-ceo-this-dot-how-to-be-successful-in-devrel-with-a
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Wix (sponsor): https://tej.as/wix
- SquiggleConf: https://squiggleconf.com/
- Tracy Lee on X: https://twitter.com/ladyleet
- This Dot Labs: https://www.thisdot.co/
- RxJS: https://rxjs.dev/
- GitHub Copilot: https://github.com/features/copilot
- CascadiaJS Conference: https://2023.cascadiajs.com/
- Render: https://render.com/
- Vercel: https://vercel.com/
- Netlify: https://www.netlify.com/
- AWS Amplify: https://aws.amazon.com/amplify/
- Michael Terrell Coaching: https://www.michaelwterrell.com/
- Cal Newport's "Deep...
### Alex Moldovan, founder JS Heroes: How to Organize a Community-first JavaScript Conference
Published: 2024-09-16
Duration: 1:37:38
URL: https://tej.as/podcast/ep/alex-moldovan-founder-js-heroes-how-organize-js-conference
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Wix (sponsor): https://tej.as/wix
- SquiggleConf (partner): https://squiggleconf.com/
- JS Heroes: https://jsheroes.io/
- Alex on X: https://x.com/alexnmoldovan
- Tejas on X: https://x.com/tejaskumar_
Summary:
In this discussion, we talk to Alex Moldovan, a software engineer at CodeSandbox and event planner who co-founded JS Heroes, a non-profit, community-driven JavaScript (Programming Language) conference in Romania. Together, we cover the intricacies of project management, event planning, and the challenges of organizing...
### Michelle Bakels: How to Optimize Developer Health
Published: 2024-09-12
Duration: 1:29:57
URL: https://tej.as/podcast/ep/michelle-bakels-how-to-optimize-developer-health
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Wix (sponsor): https://tej.as/wix
- G2i: https://g2i.co
- Developer Health OS: https://www.g2i.co/developer-health
- Michelle on X: https://x.com/michellebakels
- Tejas on X: https://x.com/tejaskumar_
Summary
In this episode, Michelle Bakels from G2i discusses the importance of developer health and wellbeing. She explains G2i's Developer Health Operating System, which focuses on burnout recovery, prevention, and optimizing performance. Michelle shares insights on work-life balance, the impact of remote work, and practical st...
### Gabe Greenberg, CEO G2i: How to Bootstrap a Healthy Tech Business
Published: 2024-09-09
Duration: 1:35:26
URL: https://tej.as/podcast/ep/gabe-greenberg-ceo-g2i-how-to-bootstrap-a-healthy-tech-busin
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Wix (sponsor): https://tej.as/wix
- SquiggleConf (partner): https://2024.squiggleconf.com/
- G2i: https://www.g2i.co/
- Gabe on X: https://x.com/gabe_g2i
- Tejas on X: https://x.com/tejaskumar_
- Book: "Traction" by Gino Wickman https://www.amazon.de/-/en/Gino-Wickman/dp/1936661837
- "Move Fast and Fix Things" book: https://www.amazon.de/-/en/Frances-Frei/dp/1647822874
- Developer Health Operating System: https://www.devhealthos.com
- fourdayworkweek.io: https://www.fourdayworkweek.io
- Suno: https://suno.ai
- Ro.am: ht...
### Josh Goldberg: How to Maximize Success with TypeScript and ESLint
Published: 2024-09-05
Duration: 1:34:59
URL: https://tej.as/podcast/ep/josh-goldberg-how-to-maximize-success-with-typescript-and-es
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Wix (sponsor): https://tej.as/wix
- Josh Goldberg: https://x.com/joshuakgoldberg
- Learning TypeScript: https://learning.oreilly.com/library/view/-/9781098110321/
- SquiggleConf: https://2024.squiggleconf.com/
Summary
Joshua K Goldberg is a full-time independent open source maintainer in the TypeScript ecosystem. He shares his journey into open source and the importance of filling in the gaps in the ecosystem. He also discusses the best incremental migration path to TypeScript and highlights advanced features like shenanigan...
### Kyle Corbitt, CEO OpenPipe: How to Fine-Tune Your Own Language Model (LLM)
Published: 2024-09-02
Duration: 1:36:41
URL: https://tej.as/podcast/ep/kyle-corbitt-ceo-openpipe-how-to-fine-tune-your-own-language
Links
- Codecrafters (Sponsor): https://tej.as/codecrafters
- Wix (Sponsor): https://tej.as/wix
- OpenPipe: https://openpipe.ai
- Kyle on X: https://x.com/corbtt
- Tejas on X: https://x.com/tejaskumar_
Summary
Kyle Corbitt, founder and CEO of OpenPipe, shares the origin story of the company and his background in computer science and entrepreneurship. He discusses the evolution of machine learning and the breakthroughs that made OpenPipe possible. The conversation then dives into the process of fine-tuning models using OpenPipe, including the logging feature, data curation, and the selec...
### Shruti Balasa: How to Maximize Success with Tailwind CSS
Published: 2024-08-29
Duration: 1:31:00
URL: https://tej.as/podcast/ep/shruti-balasa-how-to-maximize-success-with-tailwind-css
Links
- Wix Studio (sponsor): https://tej.as/wix
- Codecrafters (sponsor): https://tej.as/codecrafters
- Shruti Balasa's Website: https://shrutibalasa.com/
- Tailwind Weekly: https://tailwindweekly.com/
- Shruti on X: https://x.com/shrutibalasa
- Tejas on X: https://x.com/tejaskumar_
Summary
Shruti Balasa, a Tailwind CSS expert, shares her journey of discovering and specializing in Tailwind CSS. She explains how Tailwind CSS enhanced her CSS skills and made her more efficient in web development. She also discusses the pain points that Tailwind CSS solves, such as context switching, nam...
### Jeff Cross, CEO Nx: How to Build and Scale Developer Tools
Published: 2024-08-26
Duration: 1:33:27
URL: https://tej.as/podcast/ep/jeff-cross-ceo-nx-how-to-build-and-scale-developer-tools
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Nx: https://nx.dev/
- Jeff on X: https://twitter.com/jeffbcross
- Tejas on X: https://x.com/tejaskumar_
Summary
Jeff B. Cross, co-founder of NX, discusses the origins of NX and its evolution as a tool for monorepos. He explains the benefits of using NX, such as code mod running, large-scale migrations, and CI optimizations.
Jeff also clarifies the definition of a monorepo and how NX supports both package-based and graph-based monorepos. He highlights the features of NX that help with development, integration, and deployment,...
### Jatin Ramanathan: How Google.com is Rendered with Wiz (Fastest UI Framework)
Published: 2024-08-22
Duration: 1:30:33
URL: https://tej.as/podcast/ep/jatin-ramanathan-how-google-is-rendered-with-wiz
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Jatin on X: https://x.com/JatinRamanathan
- Tejas on X: https://x.com/tejaskumar_
Summary
Jatin Ramanathan, a software engineer at Google, discusses the Wiz framework and its use in Google products like search, photos, and payments. Wiz is a resumable web framework that focuses on loading minimal JavaScript and uses the concept of signals for reactive programming. Signals are reactive properties that reflect the state of an observable or reactive property at any given time.
The Wiz framework also incorporates JS Action, a li...
### Kilian Valkhof, founder Polypane: How to Build and Sell a Developer-first Browser
Published: 2024-08-19
Duration: 1:39:37
URL: https://tej.as/podcast/ep/kilian-valkhof-polypane-electron
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Polypane: https://polypane.app/
- Kilian on X: https://x.com/kilianvalkhof
- Tejas on X: https://x.com/tejaskumar_
Summary
Kilian Valkhof created Polypane, a web browser designed to enhance developer productivity. Built on Chromium with Electron, it offers features like local server sharing, live DOM view, and social media preview tools.
Polypane's development faced challenges in element injection, security, and dependency management. Valkhof balances user feedback with innovation, maintaining a user-centric approach while in...
### Chad Whitacre: How to Fix Open Source Sustainability
Published: 2024-08-15
Duration: 1:46:10
URL: https://tej.as/podcast/ep/chad-whitacre-how-to-fix-open-source-sustainability
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Fair Source License: https://fair.io/
- Sentry: https://sentry.io/
- Sentry on X: https://x.com/getsentry
- Chad on X: https://x.com/chadwhitacre_
- Tejas on X: https://x.com/tejaskumar_
Summary
Chad Whitacre, Head of Open Source at Sentry, discusses his involvement in open source and the commitment of Sentry to open source. He shares his background in the Python community and his experience with open source sustainability. Chad explains the importance of community in open source and the origins of the free software movement...
### David Cramer, Founder Sentry: How my Open Source Side Project became a Successful Business
Published: 2024-08-12
Duration: 1:44:31
URL: https://tej.as/podcast/ep/david-cramer-zeeg-sentry-open-source
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Sentry: https://sentry.io/
- Sentry on X: https://x.com/getsentry
- David on X: https://x.com/zeeg
- Tejas on X: https://x.com/tejaskumar_
Summary
David Cramer, the founder of Sentry, discusses the origins and growth of the company. Sentry started as an open-source project that Cramer built to solve his own problems as a software engineer. The initial version of Sentry captured and deduplicated errors, providing developers with valuable context for debugging. Cramer's experience at Disqus and Dropbox allowed him to refine and...
### Santosh Yadav: How Open Source Changes Lives, Angular Deep Dive
Published: 2024-08-08
Duration: 1:53:53
URL: https://tej.as/podcast/ep/santosh-yadav-angular-nx-open-source-github-star-slum
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Santosh on X: https://x.com/SantoshYadavDev
- Santosh' story: https://www.freecodecamp.org/news/my-journey-into-tech-from-slums-of-mumbai-to-my-own-apartment/
- Tejas on X: https://x.com/tejaskumar_
Summary
In this episode, we deep dive into Angular and its related frameworks, along with the power of open source to change one's life, moving Santosh from the slums of Mumbai to Germany, where he now owns a home. If you're interested in Angular, web engineering, or open source, then this episode is for you.
Takeaways
1. Santosh...
### Jay V, CEO SST.dev: How to rapidly go from Idea to IPO with Infrastructure-as-Code
Published: 2024-08-05
Duration: 1:33:16
URL: https://tej.as/podcast/ep/jay-v-ceo-sstdev-how-to-rapidly-go-from-idea-to-ipo-with-inf
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- SST: https://sst.dev
- Jay on X: https://x.com/jayair
- Tejas on X: https://x.com/tejaskumar_
Summary
Jay V, co-founder of the serverless framework SST, discusses the origins and purpose of SST. SST is an open-source framework for building applications on AWS and other cloud providers. It aims to make it easy to get started with building an application and scale as the application and team grow. SST differentiates itself by allowing developers to write infrastructure as code in TypeScript, providing abstractions that simplify...
### Rizèl Scarlett: How to Own Your Digital Identity, DevRel and Skepticism, GitHub Copilot
Published: 2024-08-01
Duration: 1:27:18
URL: https://tej.as/podcast/ep/rizel-scarlett-tbd-github-copilot-devrel-web
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- TBD: https://www.tbd.website/
- Rizèl on X: https://x.com/blackgirlbytes
- Tejas on X: https://x.com/tejaskumar_
Summary
Rizèl Scarlett, a developer advocate at TBD, discusses her experiences with GitHub Copilot, open source, and Web5. She shares how she enjoys engaging with skeptics and helping them understand new technologies. Rizèl also explains TBD and its SDKs, TBdex and Web5, which aim to enable global money exchange and provide decentralized identity verification.
Takeaways
1. Rizel enjoys engaging with skeptics and h...
### Glauber Costa, CEO Turso: How to Build Horizontally Scaled SQLite
Published: 2024-07-29
Duration: 1:46:54
URL: https://tej.as/podcast/ep/glauber-costa-turso-glcst-sqlite-scale
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Turso: https://turso.tech
- The Save File Podcast: https://www.youtube.com/playlist?list=PLGUwjXxvasIczMiiZ5joRlTA-PFydJZbb
- Glauber on X: https://x.com/glcst
- Tejas on X: https://x.com/tejaskumar_
Summary
Glauber Costa, CEO of Turso Database, shares his journey from coding for the Linux kernel to co-founding Turso. He started contributing to open source in university and developed a passion for low-level programming. He joined RedHat and later joined a database company, which eventually pivoted into ScyllaDB, a NoSQL datab...
### John McBride: How to Build Your Own AI Infrastucture with Kubernetes
Published: 2024-07-25
Duration: 1:40:57
URL: https://tej.as/podcast/ep/john-mcbride-ai-infrastructure-kubernetes
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- OpenSauced blog post: https://opensauced.pizza/blog/how-we-saved-thousands-of-dollars-deploying-low-cost-open-source-ai-technologies
- John on X: https://x.com/johncodezzz
- Tejas on X: https://x.com/tejaskumar_
Summary
John McBride discusses his experience deploying open-source AI technologies at scale with Kubernetes. He shares insights on building AI-enabled applications and the challenges of managing large-scale data engineering.
The conversation focuses on the use of Kubernetes as a platform for running compute and the d...
### Brian Douglas, CEO OpenSauced: How to Make Open Source Measurable, GitHub, Founder-Led Growth
Published: 2024-07-22
Duration: 1:41:02
URL: https://tej.as/podcast/ep/brian-douglas-bdougie-opensauced-github
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- OpenSauced: https://opensauced.pizza
- OpenSauced Tour: https://www.youtube.com/watch?v=JCNjj19iDa4
- The Secret Sauce Podcast: https://podcast.opensauced.pizza/episodes
- Brian on X: https://x.com/bdougieyo
- Tejas on X: https://x.com/tejaskumar_
Summary
In this episode, Brian Douglas (BDougie), the founder of OpenSauced discusses the evolution of the Jamstack, BDougie's career switch from sales to coding, and the inspiration behind OpenSauced. OpenSauced is a tool that provides deeper insights into GitHub repositories, fil...
### Erik Rasmussen: How to Build a Career on Open Source, Solid.js, Form Libraries
Published: 2024-07-18
Duration: 1:25:45
URL: https://tej.as/podcast/ep/erik-rasmussen-react-final-form-redux-form-solidjs
Links
- CodeCrafters (sponsor): https://tej.as/codecrafters
- Solid Final Form post: https://erikras.com/blog/solid-final-form-poc
- Erik on X: https://x.com/erikras
- Erik on GitHub: https://github.com/erikras
- Tejas on X: https://x.com/tejaskumar_
Summary
In this conversation, Erik Rasmussen discusses his experiences with open source and public speaking, as well as the development and differences between Redux Form and React Final Form. He also explores the value of form libraries and the challenges of coupling and modularity.
Additionally, he shares his thoughts on Solid.js and its...
### Monica Sarbu, CEO Xata: Building a Postgres Platform, an All-Female Board, and ~50% Gender Diversity
Published: 2024-07-15
Duration: 1:37:18
URL: https://tej.as/podcast/ep/monica-sarbu-xata-postgres-serverless-diversity
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Xata: https://xata.io
- Tupu: https://tupu.io
- Monica on X: https://x.com/monicasarbu
- Tejas on X: https://x.com/tejaskumar_
Summary
Monica Sarbu, the founder and CEO of Xata, shares the story of founding Xata. She discusses the challenges of being a woman founder in a male-dominated industry and the importance of open source in her career. Monica also talks about the transition from being a founder to a director at Elastic and the role of titles and hierarchy in organizations. She highlights the significance of happiness a...
### Rachel Nabors: How to Navigate Big Tech, the Future of DevRel, Documentation
Published: 2024-07-11
Duration: 1:32:25
URL: https://tej.as/podcast/ep/rachel-nabors-how-to-navigate-big-tech-the-future-of-devrel-
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Rachel's book "The Tech Career Survival Guide": https://nearestnabors.substack.com/
- Rachel on X: https://x.com/rachelnabors
Summary
Rachel Nabors (they/them), a developer relations expert with an incredible track record discusses their career journey and the challenges of pricing and valuing their work in the developer relations industry. They emphasize the importance of knowing your worth and setting appropriate hourly rates based on your skills and the value you bring to the table. Rachel also highlights the need for buildi...
### Brandon Bayer, CEO Flightcontrol: How to unlock peak velocity on AWS
Published: 2024-07-08
Duration: 1:31:19
URL: https://tej.as/podcast/ep/brandon-bayer-flightcontrol-aws-velocity-blitzjs
Links
- Sponsors and Partners
- Codecrafters (sponsor): https://tej.as/codecrafters
- THAT Conference: https://www.thatconference.com/
- Stately: https://stately.ai
- Guest Content
- Flightcontrol: https://www.flightcontrol.dev
- Blitz.js: https://blitzjs.com/
- Brandon on X: https://x.com/flybayer
- Book Recommendations and Resources
- Full type-safety for Next.js routes: https://www.flightcontrol.dev/blog/fix-nextjs-routing-to-have-full-type-safety
- Obviously Awesome: https://www.aprildunford.com/books
- Psych framework: https://andrewchen.com/psychd-funnel-conversion/
- Tejas...
### Anjana Vakil: How to Get into Tech and be Successful
Published: 2024-07-04
Duration: 1:35:48
URL: https://tej.as/podcast/ep/anjana-vakil-recurse-center-outreachy-success-tech-2
Links
- Codecrafters (Sponsor): https://tej.as/codecrafters
- Outreachy: https://outreachy.org
- Recurse Center: https://recurse.com
- Tejas on X: https://x.com/tejaskumar_
Summary
Anjana discusses her journey into tech, including her background in computational linguistics and her experience in various roles within the tech industry. She highlights the importance of following one's passion and finding meaning in work. The conversation also touches on the need for the tech industry to prioritize human well-being and collaboration over profit and productivity. In this conversation, I and...
### Clark Sell, Founder THAT Conference: How to Organize a Large Multidisciplinary Tech Conference
Published: 2024-07-01
Duration: 1:40:39
URL: https://tej.as/podcast/ep/clark-sell-founder-that-conference
### Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- THAT Conference: https://www.thatconference.com/
- Clark on X: https://x.com/theclarksell
- THAT Conference on X: https://x.com/thatconference
- Tejas on X: https://x.com/tejaskumar_
### Summary
Clark Sell discusses the origins and purpose of THAT Conference, a multi-day conference for software engineers and their families. He emphasizes the importance of human connection and the need for conferences to provide a space for engineers to learn, grow, and connect with others in the industry. Clark also addresses the challenges o...
### Steven Fabre, CEO Liveblocks: How We're Building Realtime Collaboration, Design Engineering
Published: 2024-06-24
Duration: 1:33:16
URL: https://tej.as/podcast/ep/steven-fabre-liveblocks-collaboration-design-engineering
Links
- Codecrafters (Sponsor): https://codecrafters.io
- Liveblocks: https://liveblocks.io
- Steven on X: https://x.com/stevenfabre
- Tejas on X: https://x.com/tejaskumar_
Summary
Steven Fabre, the co-founder of Liveblocks, shares his journey from a design-focused background to starting his own company. He discusses the importance of combining design and engineering skills and the challenges of building a collaborative dev tool. Steven also talks about the decision to raise venture capital and the trade-offs between being an indie developer and seeking VC funding. He shares insights on...
### David Khourshid, CEO Stately.ai: How State Machines Create Robust Software
Published: 2024-06-17
Duration: 1:33:46
URL: https://tej.as/podcast/ep/david-khourshid-ceo-stately-xstate-state-machine-chart
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Stately: https://stately.ai
- XState on GitHub: https://github.com/statelyai/xstate
- David on X: https://x.com/davidkpiano
- Tejas on X: https://x.com/tejaskumar_
Summary
In this conversation, David Khourshid (CEO, Stately.ai) discusses XState, a state management library that uses state machines and the actor model to solve complex state management problems. He explains that state management is not a problem in itself, but it becomes complex when frameworks and libraries expect state updates in different ways.
XState provid...
### Mark Erikson: How Replay.io is Built, Maintaining Redux
Published: 2024-06-13
Duration: 1:56:00
URL: https://tej.as/podcast/ep/mark-erikson-how-replayio-is-built-maintaining-redux
Links
- Codecrafters (sponsor): https://tej.as/Codecrafters
- Replay Protocol Examples: https://github.com/replayio/Protocol-Examples
- Mark on X: https://x.com/acemarke
- Tejas on X: https://x.com/tejaskumar_
Summary
Mark Erikson, the maintainer of Redux and developer at Replay.io, discusses the process of modernizing the Firefox DevTools UI (a React app!) and the challenges of code migration. He shares insights on migrating to TypeScript and the value of staying up to date with the latest techniques. Mark also explains how Replay captures and transmits data for debugging purposes. Repl...
### Zack Chapple, CEO Zephyr Cloud: How Module Federation Works, Micro-Frontend Architecture
Published: 2024-06-10
Duration: 1:36:35
URL: https://tej.as/podcast/ep/zack-chapple-zephyr-cloud-module-federation-micro-frontend
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Zephyr Cloud: https://zephyr-cloud.io/
- Module Federation: https://www.npmjs.com/package/@module-federation/node
- Tejas on X: https://x.com/tejaskumar_
Summary
In this conversation, Zack Chapple, CEO of Zephyr Cloud, discusses the concepts of module federation, micro frontends, and the role of Zephyr Cloud in simplifying developer workflows. He explains the evolution of module federation, its relationship with Webpack and RSPack, and the impact of these technologies on build times and developer productivity. The conversation...
### Svenja Schäfer: Mastering Regular Expressions and Automated Testing
Published: 2024-06-06
Duration: 1:44:59
URL: https://tej.as/podcast/ep/svenja-schaefer-regex-regular-expressions-testing-software
Links
- CodeCrafters (sponsor): https://tej.as/codecrafters
- Understanding RegEx Once and for All Post Series: https://www.codegram.com/blog/understanding-regex-once-and-for-all-part-one
- RegEx 101: https://regex101.com/
- (Golang to .d.ts) go2dts: https://github.com/fabien0102/go2dts
- Svenja on LinkedIn: https://www.linkedin.com/in/svenjaschaefer/
- Svenja on GitHub: https://github.com/slickepinne
- Tejas on X: https://x.com/tejaskumar_
Summary
In this conversation, Svenja Schäfer, a development team lead at Thoughtbot, discusses her background, experience, and the importance of t...
### Chris Coyier, CEO CodePen: How We're Building CodePen 2.0, CSS-Tricks
Published: 2024-06-03
Duration: 1:34:36
URL: https://tej.as/podcast/ep/chris-coyier-codepen-css-tricks
Links
- Codecrafters (Sponsor): https://tej.as/codecrafters
- Codepen: https://codepen.io
- TailwindCSS Play CDN: https://tailwindcss.com/docs/installation/play-cdn
- Chris on X: https://x.com/chriscoyier
- Tejas on X: https://x.com/tejaskumar_
Summary
In this episode, Chris Coyier (CEO of CodePen) discusses his background and the projects he is involved in, including CSS-Tricks and CodePen. He talks about the workload and challenges of running these projects, particularly the complexities of managing advertising and the business models. Chris also shares insights into the tech stack us...
### Dan Shappir: How to Maximize Web Performance
Published: 2024-05-30
Duration: 1:56:42
URL: https://tej.as/podcast/ep/dan-shappir-web-performance
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Improving Wix Performance: https://www.smashingmagazine.com/2021/11/improving-performance-wix-websites-case-study/
- Dan on X: https://x.com/danshappir
- Tejas on X: https://x.com/tejaskumar_
Summary
In this episode, Dan Shappir discusses his journey in web performance, starting from gaming networks before the web. He explains the web vs. internet distinction, offline-first web apps, and remote access solutions. Dan's role at Next Insurance as a performance tech lead is highlighted. The talk covers improving browser performanc...
### Sanket Sahu, CEO GeekyAnts: How to Build and Scale a Company to 400+ with Open Source
Published: 2024-05-27
Duration: 1:33:22
URL: https://tej.as/podcast/ep/sanket-sahu-geekyants-react-native-nativebase-gluestack
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- GeekyAnts: https://geekyants.com
- Sanket on X: https://x.com/sanketsahu
- Tejas on X: https://x.com/tejaskumar_
Summary
Sanket Sahu, founder and CEO of GeekyAnts, built a successful IT consulting company focused on web and mobile app development. Starting as a freelancer, he scaled the company to over 400 people, emphasizing problem-solving and strong culture. GeekyAnts began contributing to open source with NativeBase, transforming from a web shop to a mobile and web shop. This boosted their reputation, leading to global req...
### Shruti Kapoor: How Slack is Built and Tested, How Patents are Filed
Published: 2024-05-23
Duration: 1:38:32
URL: https://tej.as/podcast/ep/shruti-kapoor-slack-patents
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Shruti on X: https://x.com/shrutikapoor08
- Slack Kit design system: https://slack.engineering/the-gradual-design-system-how-we-built-slack-kit/
- Tejas on X: https://x.com/tejaskumar_
Summary
Shruti Kapoor, a member of technical staff at Slack, discusses her role, the impact of Slack on users, and recent redesign efforts. She covers the patenting process, technical implementation of features like clips and huddles using Amazon S3 and Chime SDK, and front-end development practices at Slack.
Shruti also shares insights into Sl...
### Bobak Tavangar, CEO Brilliant Labs: How to build open-source AI-enabled smart glasses with AR
Published: 2024-05-20
Duration: 1:38:27
URL: https://tej.as/podcast/ep/bobak-tavangar-brilliant-labs-frame-noa-glasses-open-source
Links
- CodeCrafters (sponsor): https://tej.as/codecrafters
- Frame: https://brilliant.xyz/products/frame
- Bobak on X: https://x.com/btavangar
Summary
In this episode, Bobak Tavangar, founder of Brilliant Labs, discusses the creation of the AR device Frame and the open-source assistant Noah. He shares his journey from working at Microsoft and Apple to founding his own AR company, emphasizing innovation, simplicity, and user transformation in AR. He highlights the limitations of relying on large companies and big budgets, and the unique focus of Frame on AI, user experience, security, and...
### Daniel Afonso: How to Speak at Tech Conferences, Passion, Pain, Evangelism
Published: 2024-05-16
Duration: 1:42:29
URL: https://tej.as/podcast/ep/daniel-afonso-how-to-speak-at-tech-conferences-olx-gitnation
Links
- CodeCrafters (Sponsor): https://tej.as/codecrafters
- Daniel on X: https://x.com/danieljcafonso
- Daniel's comic book talk: https://www.youtube.com/watch?v=TBxipPwGvHY&list=PL6EW34-Kvy8UfigafIhb5l4thKqOvMgIF
Summary
Daniel Afonso shares his journey as a developer advocate, emphasizing his passion for educating developers through conference talks and comic books. He discusses using storytelling and entertainment to explain complex technical topics, including fine-grained reactivity with Marvel's Watchers as an analogy. He addresses overcoming imposter syndrome by learning and prese...
### Guillermo Rauch, CEO Vercel: Open Source, Next.js, Edge Computing, Partial Pre-rendering
Published: 2024-05-13
Duration: 1:23:30
URL: https://tej.as/podcast/ep/guillermo-rauch-rauchg-vercel-open-source-nextjs-edge-ppr
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- Guillermo on 𝕏: https://x.com/rauchg
- Vercel: https://vercel.com
- Latency Numbers Every Frontend Developer Should Know: https://vercel.com/blog/latency-numbers-every-web-developer-should-know
- Latency Numbers Every Programmer Should Know: https://brenocon.com/dean_perf.html
Summary
In this discussion with Guillermo Rauch (creator of Socket.io, Next.js, and Vercel CEO), we cover open source, latency, software as physical systems, PPR, distributed systems, edge computing, Vercel’s data centers, AWS/Azure partnerships, reduc...
### Jeff Escalante: How to Build and Run Effective Engineering Teams
Published: 2024-05-09
Duration: 1:41:33
URL: https://tej.as/podcast/ep/jeff-escalante-engineering-management-handbook-clerk
Links
- Codecrafters (Sponsor): https://tej.as/codecrafters
- Stately: https://stately.ai
- Clerk: https://clerk.com
- Jeff on 𝕏: https://x.com/jescalan
Summary
In this episode, Jeff Escalante (Director of Engineering at Clerk.com) discusses his shift from web development to management, emphasizing replacing oneself as an IC, expanding vision, and acting at the promotion level. He covers leveling employees, handling interview ambiguity, prioritizing customer needs, using Clerk’s feedback system, and choosing tools like ProductLane. The talk also highlights evaluating tech skills, being aut...
### Matt Biilmann, CEO Netlify: How we built Netlify, Jamstack, DDoS Protection, and Future Direction
Published: 2024-05-06
Duration: 1:39:13
URL: https://tej.as/podcast/ep/matt-biilmann-ceo-netlify-how-we-built-netlify-jamstack-ddos
Let's stay in touch? https://twitter.com/tejaskumar_
Links
- Codecrafters (Sponsor): https://tej.as/codecrafters
- Stately.ai (Sponsor): https://stately.ai
- Matt on X: https://x.com/biilmann
- Netlify: https://netlify.com
Summary
In this podcast episode, Mathias Biilmann, co-founder and CEO of Netlify, discusses the evolution of Netlify and the invention of the term "Jamstack" in the serverless landscape. Throughout this conversation, Biilmann shares essential life lessons for CEOs and aspiring entrepreneurs, delving deep into the engineering challenges and successes of building Netlif...
### Artem Zakharchenko: How to Write Epic Automated Tests, Mock ServiceWorker, Open Source
Published: 2024-04-29
Duration: 1:37:16
URL: https://tej.as/podcast/ep/artem-zakharchenko-testing-mock-serviceworker-open-source
Don't forget to share and subscribe. Follow along on 𝕏 at https://x.com/tejaskumar_
Links
- Codecrafters (sponsor): https://tej.as/codecrafters
- THAT Conference (partner): https://www.thatconference.com
- Artem on 𝕏: https://x.com/kettanaito
- Epic Web: https://epicweb.dev
- The Golden Rule of Assertions: https://www.epicweb.dev/the-golden-rule-of-assertions
- The True Purpose of Testing: https://www.epicweb.dev/the-true-purpose-of-testing
Takeaways
- Automated testing is crucial for writing better and more reliable software.
- Testing helps developers describe the intention behin...
### Francesco Ciulla: How to Reach 100k+ People with Code and Content
Published: 2024-04-22
Duration: 1:37:14
URL: https://tej.as/podcast/ep/francesco-ciulla-how-to-reach-100k-people-with-code
Links:
- https://tej.as/codecrafters (sponsor)
- https://daily.dev
- https://x.com/FrancescoCiull4
- https://youtube.com/@francescociulla
Join the conversation on 𝕏 at https://x.com/tejaskumar_
In this episode, Francesco Ciulla, a developer and advocate at Daily.dev, shares his journey from working at the European Space Agency to becoming a Docker captain and content creator. He discusses the role of Docker in the tech industry and the process of becoming a Docker captain. Francesco also addresses accusations and criticism he has faced as a content creator and emphasizes the importance...
### Ujjwal Sharma: How JavaScript is Made, Building the Web, Bias, Inclusion, and Equality
Published: 2024-04-15
Duration: 1:50:37
URL: https://tej.as/podcast/ep/ujjwal-sharma-how-javascript-is-made-building-the-web-tc39
Links
- Codecrafters (Sponsor): https://tej.as/codecrafters
- Ujjwal on X: https://x.com/ryzokuken
- Tejas on X: https://x.com/tejaskumar_
Takeaways
- TC39 is responsible for maintaining the JavaScript language specification and ensuring the evolution of the language.
- Implementing JavaScript in browsers is a collaborative effort between companies like Google, Mozilla, and Apple, with Igalia playing a significant role.
- Language evolution requires balancing the needs and perspectives of various stakeholders, including browser vendors, platform owners, and developers.
- API design con...
### Yoav Ganbar: How to Create the Fastest Web Experiences with Qwik
Published: 2024-04-08
Duration: 1:31:21
URL: https://tej.as/podcast/ep/yoav-ganbar-builder-io-qwik
Links
- Codecrafters (Sponsor): https://tej.as/codecrafters
- Follow me on X: https://twitter.com/tejaskumar_
- Follow Yoav on X: https://twitter.com/HamatoYogi
- Qwik’s next leap - moving forward together: https://builder.io/blog/qwik-next-leap
- Towards Qwik 2.0: Lighter, Faster, Better: https://builder.io/blog/qwik-2-coming-soon
- Qwik Microfrontends TikTok clone: https://github.com/gioboa/qwik-tiktok-microfrontends
- Qwik-angular: https://github.com/QwikDev/qwik-angular
- Qwik-vue: https://github.com/mizchi/qwik-vue
- Visual copilot v1: https://builder.io/blog/visual-copilot
Take...
### Lazar Nikolov: How to Maximize Application Monitoring and Performance
Published: 2024-04-01
Duration: 1:27:33
URL: https://tej.as/podcast/ep/lazar-nikolov-sentry-web-performance-monitoring
Follow me on 𝕏: https://twitter.com/tejaskumar_
Links
- Sentry: https://sentry.io
- Lazar on 𝕏: https://twitter.com/NikolovLazar
In this in-depth podcast episode, we delve into the world of Sentry, a powerful tool designed to enhance software performance and reliability. From the initial introduction to Sentry's comprehensive suite of features, we explore how Sentry instruments a broad array of software, ensuring peak performance and minimal errors. The discussion includes a comparative analysis with TypeScript, highlighting Sentry's unique approach to software instrumentation and its fo...
### Kyle Simpson: How to Write a JavaScript Book, Degrees and Gatekeeping in Tech, New Startup Vella.ai
Published: 2024-03-25
Duration: 1:44:39
URL: https://tej.as/podcast/ep/kyle-simpson-how-to-write-a-javascript-book-ydkjs-o-reilly
Follow me on 𝕏 for more: https://twitter.com/tejaskumar_
Links
- Kyle on 𝕏: https://twitter.com/getifyx
- Vella.ai: https://vella.ai
- Codecrafters (sponsor): https://tej.as/codecrafters
- Stately (sponsor): https://stately.ai
Takeaways
- The You Don't Know JS books have been successful, with over 300,000 copies sold across all editions.
- Kyle Simpson decided to move away from the traditional publishing model due to constraints and a desire for more creative freedom.
- Giving away the books for free on GitHub has not negatively impacted sales, and many readers have chosen to suppor...
### Atila Fassina: Build your ecosystem, SolidJS, Tauri, Rust, and Developer Experience
Published: 2024-03-18
Duration: 1:48:32
URL: https://tej.as/podcast/ep/solidjs-ecosystem-atila-fassina-tauri-rust
Follow us on 𝕏: https://twitter.com/tejaskumar_
Dive into the cutting-edge of web development with our latest episode, focusing on SolidJS, React fatigue, and innovative JavaScript technologies. We kick off with an inspirational look at SolidJS, exploring why developers are shifting towards this reactive framework amidst growing React skepticism. Delve into the TC39 proposal for native JavaScript Signals and the burgeoning SolidStart ecosystem, underlining its appeal through ease of contribution compared to React.
We unpack SolidJS documentation and Atila's journey into the project, highlig...
### How do computers actually work? From electrons to the web.
Published: 2024-03-11
Duration: 1:32:27
URL: https://tej.as/podcast/ep/how-computers-work-full-stack-cs50
Follow me on 𝕏: https://x.com/tejaskumar_
Dive into the fascinating world of computing with our podcast episode titled "How do computers actually work? From electrons to hardware to the web." We unravel the mystery starting from the fundamental building blocks of technology, electrons, and how they power datacenters, to the intricacies of hardware and firmware. Journey through the critical layers of computing, including the OS kernel, CPU operations, memory management, and storage solutions. Security gets its due with an exploration of TPM, setting the stage for a deep dive into software arc...
### Kent C. Dodds: Create Epic Web Experiences with Remix
Published: 2024-03-04
Duration: 1:46:36
URL: https://tej.as/podcast/ep/kent-c-dodds-epic-web-react-remix-rsc
Follow us on 𝕏: https://twitter.com/tejaskumar_
Links
- Sentry: https://sentry.io
- Epic Web: https://epicweb.dev
- Kent's Website: https://kentcdodds.com
- Remix: https://remix.run
Join us in this enlightening episode as we welcome Kent C. Dodds, a renowned figure in the web development community and a dear friend, known for his impactful contributions and innovative teaching methods. Dive deep into Kent's journey, from his initial steps in the tech world to becoming a pivotal voice in modern web development. Explore the evolution of the web, understanding the critical milestones and b...
### Catch Up on Today's Web: AI, CSS, JavaScript and HTML
Published: 2024-02-26
Duration: 1:47:22
URL: https://tej.as/podcast/ep/catch-up-on-todays-web-ai-engineer-css-javascript-html-htmx
Follow us on 𝕏: https://twitter.com/tejaskumar_
In today's episode, we dive deep into the world of artificial intelligence, starting with a basic understanding of AI and the pivotal role of AI Engineers. We explore the pressing question: "Is AI going to take my job?" and differentiate between answer engines and search engines, highlighting their impacts on how we find information.
Transitioning into web development, our discussion shifts towards CSS, covering advanced topics like view transitions, container queries, the :has selector, dynamic viewport units, and the debate on the necessity...
### Welcome to ConTejas Code
Published: 2024-02-19
Duration: 6:22
URL: https://tej.as/podcast/ep/welcome-to-contejas-code-podcast
Follow us on 𝕏: https://x.com/tejaskumar_
This episode is an introduction to the Contagious Code podcast, outlining the motivation behind the show, what listeners and viewers can expect, and how they can get involved. Episodes will air weekly for a season, where there are about 8 episodes total. Then, we will regroup and record another season that will air after a short break. Ideally, we keep episodes rolling, but we'll need to evaluate this in light of temporal and financial budgets.
Chapters:
00:00 Intro
00:40 Motivation
01:37 Podcast Format
02:30 Motivation Part 2
03:57 How to Get...
## All writing (34)
### Pressure, Power, and Peace
Published: 2026-10-18
URL: https://tej.as/blog/pressure-power-and-peace
Acts 1:8 promises power when the Holy Spirit comes upon you. When I burned out, a pastor in Belgrade showed me what that power does to pressure.
This post is about 3 words a pastor in Belgrade gave me when I showed up at his house burned out: pressure, power, and peace. The pastor is [Danko Dudok](https://centarcrkva.rs/en/home/), who pastors [Center Church](https://centarcrkva.rs/en/about-us/) there. Over lunch he gave me [Acts 1:8](https://dewfall.app/en/read/bsb:44:1:8), which has only 1 of his 3 words in it. Jesus puts the other 2 side by side in [John 16:33](https://dewfall.app/en/read/bsb:43:16:33), on the night before the cross.
Every verse here is quoted from the [Berean Standard Bible](https://bereanbible.com/) (it's public domain) and the references link to the verses on [Dewfall](https://dewfall.app), the Bible app I built.
#### What does Acts 1:8 mean?
**In Acts 1:8 Jesus promises his followers power when the Holy Spirit comes upon them so they can be his witnesses, from Jerusalem to the ends of the earth. They receive that power as a gift and it sends them out to tell people about Jesus.**
He says it on the day he goes back to heaven ([Acts 1:9](https://dewfall.app/en/read/bsb:44:1:9)). The disciples have just asked him "Lord, will You at this time restore the kingdom to Israel?" ([Acts 1:6](https://dewfall.app/en/read/bsb:44:1:6)), which is basically _when are you going to fix everything?_ Jesus answers:
> Jesus replied, "It is not for you to know times or seasons that the Father has fixed by His own authority. But you will receive power when the Holy Spirit comes upon you, and you will be My witnesses in Jerusalem, and in all Judea and Samaria, and to the ends of the earth."
>
> [Acts 1:7 to 8](https://dewfall.app/en/read/bsb:44:1:7)
"You will receive" is a promise (a plain future in the Greek). Paul says where that kind of power comes from: "this surpassingly great power is from God and not from us" ([2 Corinthians 4:7](https://dewfall.app/en/read/bsb:47:4:7)).
And the power is _for_ something. The very next words are "you will be My witnesses". The [English Standard Version (ESV) Study Bible](https://en.wikipedia.org/wiki/ESV_Study_Bible) calls Acts 1:8 "the thematic statement for all of Acts" ([in its notes on Crossway's site](https://www.crossway.org/articles/10-key-bible-verses-on-the-holy-spirit/)). The book follows the verse's own map: Jerusalem first, then Judea and Samaria, then the ends of the earth.
#### Pressure: what Christian burnout looked like for me
Danko gave me this verse in Belgrade when I was _cooked_. Between 10 September and 10 October [my calendar](/calendar) has 7 conferences on it, in Zurich, Zadar, Warsaw, Copenhagen, Prague and Niš. There were personal commitments too. My dear friend [Jithin](https://www.instagram.com/jithinbas/)'s bachelor party had us staying up late many nights and straight after that we went to church camp, where I was leading worship and slept about 5 hours both nights. I'd said yes to all of it and I'm a man of my word. So I kept grinding and I enjoyed it. I really did, even though I was so tired.
You can see what it did to my health on [my status page](/status), where the [readiness app I built](/blog/apple-watch-readiness-score-wrong) posts my numbers most mornings. On 11 October, the morning I left Niš, it had told me to rest on 26 of the last 28 mornings. My usual floor for [heart rate variability](https://my.clevelandclinic.org/health/symptoms/21773-heart-rate-variability-hrv) (HRV, which drops when your nervous system is under strain) is about 47 milliseconds and on 9 October, in Niš, it came in at 35. I was completely cooked, physiologically anyway. My nervous system was fried and I couldn't really train (it was mostly easy runs).
And Niš was wonderful!! I was there for [Game of Codes](https://gameofcodes.rs/) and I got to spend so much time with my good friend [Faris Aziz](https://x.com/farisaziz12). It was just such a blessing. I also spent time with [Darko Bozhinovski](https://darko.io/), who co-founded [WhatTheStack](https://wts.sh/) in Skopje. [Miloš](https://www.linkedin.com/in/miloscunestojanovic), who organized Game of Codes, was just an amazing guy. But I was really tired and I was starting to feel burned out. I did feel really, really burned out.
#### What does the Bible say about burnout?
**The Bible never uses the word burnout. It talks about pressure instead: Jesus promises his friends pressure and peace in the same verse ([John 16:33](https://dewfall.app/en/read/bsb:43:16:33)).** [Bible Gateway](https://www.biblegateway.com/quicksearch/?quicksearch=burnout&version=NIV) finds 0 verses with "burnout" in the [New International Version](https://en.wikipedia.org/wiki/New_International_Version).
Jesus says it on his last night before the cross, right after telling his disciples "you will be scattered, each to his own home, and you will leave Me all alone" ([John 16:32](https://dewfall.app/en/read/bsb:43:16:32)). Then he says this to the friends who are about to run:
> I have told you these things so that in Me you may have peace. In the world you will have tribulation. But take courage; I have overcome the world!
>
> [John 16:33](https://dewfall.app/en/read/bsb:43:16:33)
The word for tribulation is _thlipsis_, which [Strong's Concordance](https://biblehub.com/greek/2347.htm) defines as "pressure (literally or figuratively)". So Jesus promises his friends pressure and in the same breath he promises them a peace that doesn't wait for the pressure to stop. Wild. He's telling them both will be true on the same day.
Paul uses the verb it comes from in [2 Corinthians 4:8](https://dewfall.app/en/read/bsb:47:4:8): "We are hard pressed on all sides, but not crushed". "Crushed" there means [hemmed in closely](https://biblehub.com/greek/4729.htm). Paul was hard pressed on every side and still not hemmed in. I love that so much.
Earlier in the same letter he writes about "the hardships we encountered in the province of Asia. We were under a burden far beyond our ability to endure, so that we despaired even of life" ([2 Corinthians 1:8](https://dewfall.app/en/read/bsb:47:1:8)). Those hardships are _thlipsis_ again. And "beyond our ability" is literally "beyond power" in the Greek, with the same word, [_dynamis_](https://biblehub.com/greek/1411.htm), that Jesus uses for the power in Acts 1:8.
So the next time somebody tells you God never gives you more than you can handle, show them [2 Corinthians 1](https://dewfall.app/en/read/chapter/bsb:47:1). (The verse people usually mean, [1 Corinthians 10:13](https://dewfall.app/en/read/bsb:46:10:13), promises a way out of temptation.) Paul says what his pressure was for: "in order that we would not trust in ourselves, but in God, who raises the dead" ([2 Corinthians 1:9](https://dewfall.app/en/read/bsb:47:1:9)).
#### Here's your room, here's food
Earlier this year Danko came to my church in Berlin, [Mosaik](https://mosaikberlin.com/en/), to preach (his sermon [Rooted in Christ](https://www.youtube.com/watch?v=djSp6OK_tMQ) is on YouTube) and I got to know him. I organize the men's ministry at Mosaik and he came along to our men's event. It was just wonderful to spend time with him in fellowship. He said to me, "Hey, if you're ever in Serbia, come around to my church." And I said I will do.
So turns out, this time I was in Serbia! I told Danko I'd be there over a Sunday after the conference and I'd love to visit his church like we'd discussed. He said awesome, do that. Game of Codes was over on Saturday 10 October. On Sunday we drove from Niš to Belgrade and I showed up at his house.

His wife, Slađana, had made a home-cooked meal and straight away they were like, here's your room, here's food. It was so cool. We talked for a while and I met their kids. Their service is at 6pm so around 4:30 we went to church.

We just had the best time. I'd only just met these people (Danko aside) and it felt so familiar. It felt like family. It took me right back to [the first church I ever went to](/story#church-2008), in Doha in 2008, where people seemed so happy I was there that it got past my guard. Already something within me started to heal because I felt like I could finally let down and rest and relax. I was already starting to recharge.
After church we got a pizza and sat in the living room talking and laughing and telling stories of miracles after miracles, testimonies. I got to tell them mine ([it's here on my site](/story)) and it was such a blessing to share it. We'd come back from church around 8pm and at some point I was like, where are your kids? Turns out the kids just stay until 11pm!! They came back at 11 and after that we went to sleep.

That's what the church did right after the Holy Spirit came at Pentecost. Luke says they would "break bread from house to house, sharing their meals with gladness and sincerity of heart" ([Acts 2:46](https://dewfall.app/en/read/bsb:44:2:46)).

Elijah was in a much darker place than I was. He sat under a broom tree and asked God to take his life ([1 Kings 19:4](https://dewfall.app/en/read/bsb:11:19:4)). God's first answer was sleep and then an angel with "a cake of bread baked over hot coals, and a jar of water" ([1 Kings 19:6](https://dewfall.app/en/read/bsb:11:19:6)). The angel came back a second time: "Get up and eat, or the journey will be too much for you" ([1 Kings 19:7](https://dewfall.app/en/read/bsb:11:19:7)). Elijah had said "I have had enough, LORD" and in Hebrew his "enough" and the angel's "too much" are [the same word](https://biblehub.com/hebrew/7227.htm). God didn't argue with him about being tired. The journey was too much for him on his own and God fed him. Danko's family did the same with me: here's your room, here's food, and the word came on Monday.
#### What sin haunts you?
On Monday I still had my job so I did some work here and there, but I spent the day with them. We had breakfast and then lunch.
At lunch I literally looked Danko in the face and asked him, "What sin haunts you?"
He was so open. The man was an open book! Oftentimes I meet people who are guarded, they're fronting and they're not really saying what's on their mind. Danko was no holds barred. He told me his struggles, his life. Then he looked at me and asked me the same thing and I told him. We had this beautiful moment and we just kept talking. That's [James 5:16](https://dewfall.app/en/read/bsb:59:5:16) at a lunch table: "confess your sins to each other and pray for each other so that you may be healed".
Somewhere in all that talking I told him, "I'm having a really hard time. I feel tired, I feel burned out, I feel like a lot of things depend on me, and I'm just like, man, I just want to rest."
Danko looked at me and told me that whenever he finds himself making dumb choices or feeling burned out, it's often because he doesn't have power (especially when he compromises on his faith and his values). When he's in a position of weakness and he's had a stressful day, he feels overwhelmed by the pressure. He caves under it and makes dumb choices. All he wants then is some kind of release. He didn't put it like this, but the picture I got was punching a hole in the wall. Then he told me what the Bible says in Acts 1:8: when the Holy Spirit comes on you, you will receive power.
Something clicked in me and I was like, oh, you're right. I examined myself. Every time I've made dumb choices or had stupid ideas or been mean to someone, it's usually been when I was under an immense amount of pressure. The pressure didn't make me do any of it ([James 1:14](https://dewfall.app/en/read/bsb:59:1:14) says "each one is tempted when by his own evil desires he is lured away and enticed"). It squeezed out what was already in there.
Then Danko said this, word for word: "I just find paying attention to the pressure helps me a lot, because then I can regulate it and I can go pray. I can receive the Spirit's power and be free."
This was tremendous!! It was so eye-opening and I actually understood it. Under pressure, you crack. But the power that comes upon you when you receive the Spirit overwhelms the pressure. Jesus told his friends something close in Gethsemane, on the night he was arrested: "Watch and pray so that you will not enter into temptation. For the spirit is willing, but the body is weak." ([Matthew 26:41](https://dewfall.app/en/read/bsb:40:26:41))
#### What does power mean in Acts 1:8?
The power in Acts 1:8 is _dynamis_, which [Strong's](https://biblehub.com/greek/1411.htm) defines as "force (literally or figuratively); specially, miraculous power". Under pressure our own _dynamis_ runs out and Jesus promises us the Spirit's.
[Acts 4](https://dewfall.app/en/read/chapter/bsb:44:4) shows what that looks like under pressure. The council threatens Peter and John and orders them to stop speaking in Jesus' name. The church prays with the threats still standing: "consider their threats, and enable Your servants to speak Your word with complete boldness" ([Acts 4:29](https://dewfall.app/en/read/bsb:44:4:29)). They don't ask for the threats to go away. After they prayed, "they were all filled with the Holy Spirit and spoke the word of God boldly" ([Acts 4:31](https://dewfall.app/en/read/bsb:44:4:31)). Peter had already been filled at Pentecost ([Acts 2:4](https://dewfall.app/en/read/bsb:44:2:4)) and again in front of the council ([Acts 4:8](https://dewfall.app/en/read/bsb:44:4:8)). Here he's filled again with everyone else, under pressure, after prayer.
The same ESV Study Bible notes list "power for victory over sin" among what this new work of the Spirit brought after Pentecost. They cite [Romans 8:13](https://dewfall.app/en/read/bsb:45:8:13) for it: "if by the Spirit you put to death the deeds of the body, you will live".
Danko said that under pressure all he wants is some kind of release. Jesus calls sin slavery: "everyone who sins is a slave to sin" ([John 8:34](https://dewfall.app/en/read/bsb:43:8:34)). Then, 2 verses later: "So if the Son sets you free, you will be free indeed" ([John 8:36](https://dewfall.app/en/read/bsb:43:8:36)).
Paul says it in [Romans 6:14](https://dewfall.app/en/read/bsb:45:6:14): "For sin shall not be your master, because you are not under law, but under grace." I still sin (I just told you about a lunch where 2 grown men confessed theirs) and [1 John 1:8](https://dewfall.app/en/read/bsb:62:1:8) says "If we say we have no sin, we deceive ourselves". So when I say sin has no hold on me, I mean it doesn't get to lord it over me anymore.
If you belong to Christ you already have the Spirit ([Romans 8:9](https://dewfall.app/en/read/bsb:45:8:9)). Paul still tells believers to "be filled with the Spirit" ([Ephesians 5:18](https://dewfall.app/en/read/bsb:49:5:18)). The command is in the present tense and many read it as _keep on being filled_. Jesus says the Father will "give the Holy Spirit to those who ask Him" ([Luke 11:13](https://dewfall.app/en/read/bsb:42:11:13)).
#### How do I apply Acts 1:8 to my life?
Pay attention to the pressure and then go and pray: that's what Danko does. He drove me to the airport and I'd started meditating on what he said. On the 1 hour 45 minute flight home I did what he does. I just prayed and read a bit of the Bible and the power came!! All the pressure I was feeling left. By the time I was on my way home from the airport I was ready to jump into a game night with friends.
My status page has the nights on either side of that flight. Sunday night at Danko's house was my worst of the 60 nights on it: my HRV was 28 milliseconds and my resting heart rate was 62. On Monday night, at home in Berlin, they were 53 and 47. My 7 night average was still well below normal and on Tuesday morning the app still told me to rest.
```chart line
caption: My heart rate variability (HRV) each night from 5 to 12 October 2026, in milliseconds, against the bottom of my normal range, with each night dated by the evening it began (tej.as/status)
unit: ms
min: 20
max: 60
ticks: 20, 40, 60
| Night | My HRV [a] | Bottom of my normal range [c] |
| 5 Oct | 37 | 47.4 |
| 6 Oct | 40 | 47.4 |
| 7 Oct | 46 | 47.5 |
| 8 Oct | 40 | 47.5 |
| 9 Oct | 35 | 47.4 |
| 10 Oct | 42 | 47.2 |
| 11 Oct | 28 | 47.2 |
| 12 Oct | 53 | 46.7 |
```
That's my testimony from 1 flight and 1 night. Scripture doesn't promise that the pressure always goes when you pray (Jesus promised tribulation in John 16:33 and it'll be back).
In Acts 1:8 the power is for witness, for telling people what Jesus has done: [Acts 1:22](https://dewfall.app/en/read/bsb:44:1:22) calls it being "a witness with us of His resurrection". For me that was Sunday night in Danko's living room, telling them my story. On Monday the power turned me toward a crowd at an airport.
If you're as cooked as I was, eat something and get some sleep (and see a doctor if it's more than tired). God fed Elijah twice before the journey. Then find someone you can ask what sin haunts them and let them ask you back.
#### In Me you may have peace
Peace is the word Jesus put right next to the pressure: "in Me you may have peace. In the world you will have tribulation" (John 16:33). And Paul joins the power and the peace in one blessing: "Now may the God of hope fill you with all joy and peace as you believe in Him, so that you may overflow with hope by the power of the Holy Spirit" ([Romans 15:13](https://dewfall.app/en/read/bsb:45:15:13)).
With that peace, who I am doesn't hang on how many things I said yes to or what my HRV did last night. I'm [made in the image of God](https://dewfall.app/en/read/bsb:1:1:27), I'm redeemed and I'm still being made holy.
It changed me in a very interesting way too: it woke up my compassion. At the airport and onward I saw so many people struggling. They were stressed, they had worried expressions on their faces and they were complaining that passport control didn't work. Some were mean to other people and there was a lot of discord.
I used to judge people for all of this. My old reaction would have been _these people are dumb_, or _they're bad_, or _why are they so childish?_ Even when the plane lands and everyone gets up at the same time, trying to go nowhere fast, I used to judge that. This time I just recognized that they're probably under a lot of pressure. I looked at them without any judgment and I was like, man, they must be under so much pressure. It broke my heart.
That's how Jesus looked at a crowd: "When He saw the crowds, He was moved with compassion for them, because they were harassed and helpless, like sheep without a shepherd" ([Matthew 9:36](https://dewfall.app/en/read/bsb:40:9:36)). And the next thing he does is tell his disciples to pray ([Matthew 9:38](https://dewfall.app/en/read/bsb:40:9:38)).
And I felt compelled to pray for them, genuinely: _God, I hope they have the peace that you've given me._
#### The joy of the Lord is my strength
Paul's blessing in Romans 15:13 starts with joy. Nehemiah first said what joy does for God's people to a crowd that was crying. [Ezra had just read God's Law to them](https://dewfall.app/en/read/bsb:16:8:3) and "all the people were weeping as they heard the words of the Law" ([Nehemiah 8:9](https://dewfall.app/en/read/bsb:16:8:9)). Nehemiah sends them off to eat and drink and to share with anyone who has nothing prepared. Then he tells them "Do not grieve, for the joy of the LORD is your strength" ([Nehemiah 8:10](https://dewfall.app/en/read/bsb:16:8:10)).
Nehemiah says "your strength" to everyone there. I say "my strength" (I'm standing in that crowd too). The Hebrew word for strength is [_ma'oz_](https://biblehub.com/hebrew/4581.htm), "a fortified place" in Strong's. So the reason Nehemiah gives a weeping crowd to stop grieving is that the joy of the Lord is their stronghold. My church in Berlin has it in its own description: Mosaik is "a diverse group of people united by a common dream: the joy of the Lord everywhere."
I'd told Danko all I wanted was to rest. And Jesus says "Come to Me, all you who are weary and burdened, and I will give you rest" ([Matthew 11:28](https://dewfall.app/en/read/bsb:40:11:28)). The joy in him _is_ the rest.
And the joy is there because he came to our rescue. That's the gospel: "He has rescued us from the dominion of darkness and brought us into the kingdom of His beloved Son" ([Colossians 1:13](https://dewfall.app/en/read/bsb:51:1:13)). Paul passes it on "as of first importance": "that Christ died for our sins according to the Scriptures, that He was buried, that He was raised on the third day according to the Scriptures" ([1 Corinthians 15:3 to 4](https://dewfall.app/en/read/bsb:46:15:3)). Danko's church has it on a wall.

What made Christianity click for me in 2011 was that it says ["trying harder is going to exhaust you for nothing"](/story#baptism-2011) because you can't save yourself. That's a sentence about burnout!
If I have joy in him I will naturally collaborate with him and also resist temptation. [Charles Spurgeon](https://en.wikipedia.org/wiki/Charles_Spurgeon) preached on this verse on 31 December 1871 ([The Joy of the Lord, the Strength of His People](https://www.spurgeon.org/sermons/the-joy-of-the-lord-the-strength-of-his-people)) and said the man who possesses "the joy of the Lord" finds "that it fortifies him against temptation. What is there that he can be tempted with? He has more already than the world can offer him as a reward for treachery."
Because he rescued us we get to work with him. Paul says of himself and Apollos, "we are God's fellow workers" ([1 Corinthians 3:9](https://dewfall.app/en/read/bsb:46:3:9)). Even that is his doing: "it is God who works in you to will and to act on behalf of His good purpose" ([Philippians 2:13](https://dewfall.app/en/read/bsb:50:2:13)).
#### When my idols stop being idols
Joy in God changes what I do with the things I love too. I build [Daiku](https://daiku.ai), an add-on that gives the AI you already use a browser logged in to your sites. And I _love_ running ([still](/blog/2020-in-review)). Both could easily be idols: things I grind for, things I feel depend on me. With my joy in God they stop being idols and turn into something I do with him.
[Thomas Chalmers](https://en.wikipedia.org/wiki/Thomas_Chalmers) preached about this in [The Expulsive Power of a New Affection](https://www.preceptaustin.org/node/62074): "The heart is not so constituted, and the only way to dispossess it of an old affection is by the expulsive power of a new one." Joy in God pushes the idol off the throne and what's left is a good thing I get to do with him "to the glory of God" ([1 Corinthians 10:31](https://dewfall.app/en/read/bsb:46:10:31)). Paul puts exercise in its place: "physical exercise is of limited value, but godliness is valuable in every way" ([1 Timothy 4:8](https://dewfall.app/en/read/bsb:54:4:8)).
God keeps telling me to surrender. It's hard. His way is better. Jesus prayed "Yet not My will, but Yours be done" ([Luke 22:42](https://dewfall.app/en/read/bsb:42:22:42)) under more pressure than I will ever know.
God does everything on purpose. "God works all things together for the good of those who love Him, who are called according to His purpose" ([Romans 8:28](https://dewfall.app/en/read/bsb:45:8:28)). The next verse says what the good is: being "conformed to the image of His Son" ([Romans 8:29](https://dewfall.app/en/read/bsb:45:8:29)). I didn't plan to be a drive away from Danko's church in the same week I burned out.
---
### The 5 Levels of Agentic Coding: Why I Mostly Stay at Level 2
Published: 2026-10-17
URL: https://tej.as/blog/levels-of-agentic-coding
I've built with 1 agent, 8 agents in parallel worktrees and a software factory that ran for days on its own. My sweet spot is level 2 or 3. Here's why.
This post is about the levels of agentic coding I've worked at while building 4 apps that are all in production. **My sweet spot is level 2 (one agent in one conversation) or level 3 (several agents at once in parallel git worktrees), depending on the roadmap and the deadline.**
Level 4 is a software factory: an agent called `pm` that runs a [Linear](https://linear.app) board and hands the work out to the other agents. One has been building [Daiku](https://daiku.ai) nonstop since 13 October. It's working better than I expected!! I also keep having to ask my own project what it did today, which is something I never had to do at level 2.
The 4 apps are [Dewfall](https://dewfall.app), for reading the whole Bible one verse at a time; [PrayingPeople](https://prayingpeople.app), for praying together in groups; Daiku, which gives your AI its own browser; and this site. All 4 are side projects and none of them interferes with my full-time job as an AI Engineer at [IBM](https://www.ibm.com/us-en). Across all of them I've tried pretty much every way of working with agents I know of. Every level below comes with what it felt like, where it broke and what you can do about it.
#### What is agentic coding?
**Agentic coding is writing software by telling an AI agent what you want and letting it read your code, edit files and run commands by itself while you review what it did.** The agent is a program like [Claude Code](https://claude.com/product/claude-code), which is what I use for all of this, or [Codex](https://developers.openai.com/codex). It works in a loop: it changes something, checks the result and goes again until it thinks it's done.
##### Agentic coding vs vibe coding
Vibe coding is the same loop with the reviewing taken out. [Andrej Karpathy](https://karpathy.ai/) named it [in February 2025](https://x.com/karpathy/status/1886192184808149383): "a new kind of coding I call 'vibe coding', where you fully give in to the vibes, embrace exponentials, and forget that the code even exists." Every level in this post has somebody reading the code at some point. What changes as you go up is how many agents there are and whether that somebody is still you.
#### The 5 levels of agentic coding
| Level | What it looks like | Where it breaks |
| --- | --- | --- |
| 1. Manual | Every line typed by hand | Obsolete |
| 2. One agent | 1 conversation: I describe it, it cooks, I review, we ship | Slow |
| 3. Parallel agents | 7 or 8 sessions, each in its own worktree | Worktrees to set up and clean up |
| 4. Software factory | Agents called `pm`, `maintainer` and `sentry` work a Linear board | I lose track of my own project |
| 5. ??? | Tell me (end of the post) | |
I'm not the first person to number these. [Dan Shapiro](https://www.danshapiro.com/) modeled [his 5 levels](https://www.danshapiro.com/blog/2026/01/the-five-levels-from-spicy-autocomplete-to-the-software-factory/) on the levels of self-driving cars, from "spicy autocomplete" to the "dark factory". [Steve Yegge](https://en.wikipedia.org/wiki/Steve_Yegge)'s 8 stages in [Welcome to Gas Town](https://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04) go from no AI at all to building your own orchestrator. Mine are coarser. They come from shipping 4 apps. Each one is about what I actually did all day at that level and what it cost me.
#### Level 1: manual coding
Level 1 is you, an editor and every line typed by hand. For me it's obsolete.
The skill isn't obsolete though (sorry!!). Levels 2 and 3 are mostly reading code an agent wrote and I read it with everything I learned typing it myself. If you're early in your career, keep writing some code by hand. You'll need it to review any of the levels after this one.
#### Level 2: one agent, one conversation
Level 2 is 1 agent in 1 conversation. I describe what I want, it cooks, I review, we ship. Then the next thing, then the next.
It's slow. It's slow the way a coworker is slow when they can only do one thing at a time and you're watching them do it. It's also the level that feels the most like working _with_ somebody: it's basically [pair programming](https://en.wikipedia.org/wiki/Pair_programming), where the agent is the "driver" typing and I'm the "navigator" watching where it's going and catching what's off.
##### Spec driven development: let it grill you first
The bigger version of level 2 is spec coding, which GitHub calls [spec driven development](https://github.blog/ai-and-ml/generative-ai/spec-driven-development-with-ai-get-started-with-a-new-open-source-toolkit/). I describe a spec or a product requirements document (PRD), the agent grills me about it until neither of us has a question left, and then it builds while I review.
What you can take from level 2:
1. **Ask to be grilled before anything gets built.** Something like "ask me one question at a time until you could build this without me" gets your vague idea written down as a spec. The agent finds the gaps while they're still cheap to fill.
2. **Keep the spec in the repo.** Dewfall and Daiku both still have the spec they started from, in a file called `GENESIS.md` at the root. Every new conversation can read it and you don't have to explain the app again.
3. **Review every diff while it's small.** Level 2 is the one level where you see each change as it happens. Use it for the code you'll have to debug yourself later.
#### Level 3: parallel agents in git worktrees
Level 3 is 7 or 8 Claude Code sessions at once, each one told some version of "in a separate branch and separate worktree, build this". A [git worktree](https://git-scm.com/docs/git-worktree) is a second working folder for the same repository, checked out on its own branch. That way 2 agents can edit the same app without touching each other's files. They each finish on their own, I review each one on its own, then we merge it all into `main` and deploy once at the end.
It's kinda nice!! I'm not alone in it either: [Boris Cherny](https://x.com/bcherny), who created Claude Code, runs 5 sessions in his terminal and 5 to 10 more on claude.ai, each local one in its own git checkout ([InfoQ](https://www.infoq.com/news/2026/01/claude-code-creator-workflow/), January 2026). [Simon Willison](https://simonwillison.net/) wrote about [the parallel coding agent lifestyle](https://simonwillison.net/2025/Oct/5/parallel-coding-agents/) last October and found the same catch I did: you can start lots of tasks at once, but you still review them one at a time.
What I don't love is the worktrees. Every one has to be set up (a fresh checkout has no `node_modules` and no `.env`), torn down and cleaned up. I'm _bad_ at the cleaning up part. Dewfall's repository has 17 worktrees in `.claude/worktrees/` right now. The oldest is from 2 July and 13 of them are already merged into `main`… they're just _sitting there_. PrayingPeople has 5 more that [Cursor](https://cursor.com) made.
##### How to make worktrees less annoying
1. **Let Claude Code make them.** `claude --worktree feature-auth` (or `-w`) creates one under `.claude/worktrees/feature-auth/` on a branch called `worktree-feature-auth` ([the docs](https://code.claude.com/docs/en/worktrees)). Add `.claude/worktrees/` to your `.gitignore`.
2. **Copy your secrets in automatically.** List `.env` and any other ignored files you need in a `.worktreeinclude` file at the root. Claude Code copies them into every new worktree.
3. **Know which ones clean up after themselves.** When a session in a worktree exits with nothing in it, Claude Code removes an unnamed worktree by itself and asks first about a named one. Anything with work in it is up to you.
4. **Sweep the merged ones.** This removes every worktree whose branch is already in `main`. `git worktree remove` refuses one with uncommitted changes. Work you haven't committed stays put:
```sh
git worktree list --porcelain \
| awk '/^worktree /{w=$2} /^branch /{b=substr($2,12); if (b!="main") print w, b}' \
| while read -r w b; do git merge-base --is-ancestor "$b" main && git worktree remove "$w"; done
```
5. **Split the work by files.** Give 2 agents tasks that touch different files, or the merge at the end is where you'll pay for it. Claude Code's own docs say the same about [agent teams](https://code.claude.com/docs/en/agent-teams): "Two teammates editing the same file leads to overwrites."
#### Level 4: an AI software factory
**An AI software factory is a group of AI agents that works through a whole roadmap by itself, with agents in roles like product manager, maintainer and engineer, while a person sets the goal.**
For Daiku I made a Linear workspace and worked with an agent to fill it with a whole roadmap: projects, epics, tickets, the lot. Then I started more agents: one called `pm`, one called `maintainer` and as many engineers as I needed. `pm` never writes code. It hands out the work in order, reviews it and checks it against git, the live site, [PostHog](https://posthog.com), [Sentry](https://sentry.io) and Cloudflare's [`wrangler`](https://developers.cloudflare.com/workers/wrangler/). Claude Code lets one session message another with an @-mention ([cross-session messaging](https://code.claude.com/docs/en/cross-session-messaging)). I just tell `pm` to tell `@maintainer` to do something and they coordinate it between themselves. I only ever talk to `pm`. This is what `/list-agents` showed in one of my sessions on 16 October (trimmed):
```text
Peer sessions (5):
sentry [49a9ce] · interactive · idle · started 4d ago
pm [df54eb] · bg · idle · started 3d ago
maintainer [34091f] · interactive · idle · started 4d ago
```
Then I gave `pm` one goal: "finish the entire Linear board". It's been going since 13 October and it's still going. I'm paying a fortune in tokens for this but it's worth it because it's for science!!
##### What it's like to actually run one
On 16 October, 3 days in, the board had 475 tickets across 25 projects and 273 of them were done.
```chart donut
caption: Daiku's Linear board on 16 October 2026, 3 days after the goal "finish the entire Linear board"
| | Done [a] | Still open [c] | Canceled or duplicate [b] |
| | 273 | 181 | 21 |
```
The factory doesn't sleep. Between midnight and 6 in the morning it pushed 17 commits on 15 October and 27 on 16 October. Here's some of that second night, trimmed, from `git log`:
```text
23:53 Correction: the /app chmod did not fix it; isolate the real layer instead
00:07 DAI-456: the chmod fix holds. A clean dry run proves it, full fidelity this time
00:23 DAI-456: fix the tarball at the source, root the extraction, scan /app's own modes
02:37 DAI-468: fix a real double-attach bug found before the test-mode run
02:53 DAI-468: a Workers regression test for the double-attach fix, per pm
05:14 DAI-351: the ensureBrowserReady fix was itself wrong; corrected
```
That's a whole debugging story at 2 in the morning, with a fix of a fix at the end. `pm` makes calls too. The agents write every decision down in a file called `DECISIONS.md`. It has lines like "pm's call, having seen the numbers" and "pm's review before deploy caught three real gaps, all fixed before shipping". It even set itself a bar for when to bother me: a change that adds more than about 200 milliseconds to starting someone's browser has to go past me first.
##### Cognitive debt: asking my own project for an update
I'm happy because it's moving forward. I'm also kinda confused. I have impostor syndrome and fear of missing out (FOMO) _in my own project_ because I don't really know where it is, what's happening or what the last few things that happened were. I keep having to ask `pm` for an update. On my own product!! When something breaks I tell them to fix it and they do. I don't really know more than that.
I even have one more agent, `sentry`, that watches Daiku's 3 projects in Sentry. I'd have told you it pings `pm` to fix every exception right away. Then I asked them for this post. `sentry` files the bugs in Linear itself, with the trace and a suggested fix. It has never messaged `pm` and `pm` has never had a ping from it. And on 16 October, when a deploy added a database column without bumping the schema version and no AI could start a task on Daiku for about 6 hours, I was the one who noticed!! `pm` has since added a check in PostHog that catches that kind of outage within the hour.
I didn't know how my own factory handles an exception until I asked it!!
There's a name for this. [Margaret-Anne Storey](https://margaretstorey.com/) calls it [cognitive debt](https://margaretstorey.com/blog/2026/02/09/cognitive-debt/): the debt from going fast "lives in the brains of the developers". Even when agents write code that's easy to understand, "the humans involved may have simply lost the plot". Simon Willison [hit it](https://simonwillison.net/2026/Feb/15/cognitive-debt/) on his own projects in February: "I no longer have a firm mental model of what they can do and how they work."
Here's my version of it as a number: on 16 October `DECISIONS.md` was 66,725 words long and the repository is 12 days old!! About 18,000 of those words came in the 3 days `pm` has been in charge. That's what I'd have to read to know where my own project is.
```chart line
caption: Thousands of words in Daiku's DECISIONS.md at the end of each day in October 2026, from its first commit on the 4th (the 16th through the afternoon)
| Day | Words [a] |
| 4 | 2.0 |
| 5 | 9.0 |
| 6 | 20.5 |
| 7 | 28.3 |
| 8 | 30.7 |
| 9 | 38.0 |
| 10 | 43.4 |
| 11 | 44.3 |
| 12 | 48.7 |
| 13 | 51.4 |
| 14 | 52.0 |
| 15 | 63.3 |
| 16 | 66.7 |
```
In [my React Summit talk](/talks/react-summit-2025) last year I said "Productivity is our ability to get stuff done". Level 4 gets a _lot_ of stuff done, some of it at 3 in the morning. What that sentence leaves out is that I need to know what got done. Level 4 is where I stopped knowing.
##### How to keep a software factory readable
If you build one of these, build the part that keeps you in the loop first:
1. **Make every decision land in one file, then read only what changed.** `git log -p --since=yesterday -- DECISIONS.md` is the last day of decisions and nothing else.
2. **Put a ticket number in every commit.** Every Daiku commit starts with its ticket, like `DAI-468`. That way `git log` reads as a changelog by ticket and every line leads back to why it exists.
3. **Schedule the update instead of asking for it.** Have `pm` write you one note a day, in plain words: what shipped, what broke, what it decided without you and what it needs from you. If you're out and about, just tell Claude to push-notify you. With [Remote Control](https://code.claude.com/docs/en/remote-control#mobile-push-notifications) on, Claude Code sends the update to the Claude app on your phone when you ask for one ("notify me when the migration's done").
4. **Write down when it has to ask you.** Daiku's `pm` came up with its own 200 millisecond bar. Set yours before you start: money, people's data, anything a user sees, anything you can't undo.
5. **Give it a way to check its own work.** Boris Cherny says giving Claude a feedback loop, "such as running a bash command, a test suite, or testing the app through the browser", can make the result 2 to 3× better. In a factory the agents are the only ones checking.
6. **Ask the agents what they actually do.** Every so often, ask each one to describe its job and its last few days in a few lines, the way I did for this post. Mine didn't match what I'd have told you about them.
#### What's level 5?
I don't know!! Dan Shapiro's level 5 is "a black box that turns specs into software", where "humans are neither needed nor welcome", and he says the people he knows doing it are "small teams, less than five people". [StrongDM](https://www.strongdm.com/)'s AI team runs [one of those](https://factory.strongdm.ai/), where "Code must not be written by humans" and "Code must not be reviewed by humans". They also say that "If you haven't spent at least $1,000 on tokens today per human engineer, your software factory has room for improvement", which is _wild_.
Maybe level 5 is more of that, with no `pm` to talk to because the agents write the roadmap too. Maybe it's a factory that goes as fast as level 4 and still keeps me knowing my own project. I'd love to hear from you on this one.
#### The sweet spot is level 2 or 3
After all this, I'd pick a mix of level 2 and level 3 depending on the roadmap and the timeline. And I find the "separate worktree, separate branch" setup kinda annoying to set up, tear down and clean up. So I tend to lean toward level 2 even though it's somewhat slower.
##### How to pick your level
1. **Will you be the one debugging it?** Stay at level 2 and read every diff while it's small.
2. **Is it a pile of small, independent tasks with a deadline?** Level 3, split by files, and sweep the worktrees as you merge.
3. **Is it a whole roadmap you're happy to review as results instead of code?** Level 4, but only once the readout from the last section is in place. Look at the token budget before you start.
4. **Run as many agents as you can review.** Starting agents is free. Reviewing them is where your day goes.
5. **Change levels inside the same week.** A level 3 morning for a stack of small fixes and a level 2 afternoon for the feature you care about is a normal week for me.
Maybe I lean toward level 2 because it's the closest to actual human communication. It's one conversation, back and forth, about one thing. It feels like community, like pair programming, and maybe that's what we're all after anyway.
#### We were made for community
That pull toward having somebody next to me while I build goes all the way back to the first pages of the Bible!!
In [Genesis](https://en.wikipedia.org/wiki/Book_of_Genesis), God makes the world in 6 days. When He's done, "God looked upon all that He had made, and indeed, it was very good" ([Genesis 1:31](https://dewfall.app/en/read/bsb:1:1:31)). Then chapter 2 tells it again from the ground. God puts the first man in the [Garden of Eden](https://en.wikipedia.org/wiki/Garden_of_Eden) "to cultivate and keep it" ([Genesis 2:15](https://dewfall.app/en/read/bsb:1:2:15)) and brings him every animal to name. And for the first time in the Bible, God calls something _not_ good: "It is not good for the man to be alone. I will make for him a suitable helper" ([Genesis 2:18](https://dewfall.app/en/read/bsb:1:2:18)). Nothing had gone wrong yet. There was no sin, no pain, a perfect garden with work to do and God right there with him. Being alone was _still_ not good. God's answer was Eve, in the story everybody knows as Adam and Eve.
An agent isn't a person. I'm pretty firm on that: software isn't made in the image of God. [People are](/blog/what-does-the-bible-say-about-ai), made for community the way Genesis 2 says. Level 2 is a pretty good imitation of that: one conversation, back and forth, somebody to think out loud with. At level 4 I lose even that. I think that's why I keep drifting back to level 2.
So that's where I've landed, for now. Have you found a sweet spot of your own? Have you worked at something you'd call level 5? What do you think?
---
### Can You Run Muse Spark Open Locally? AI Hype vs Reality
Published: 2026-10-16
URL: https://tej.as/blog/can-you-run-muse-spark-open-locally
Meta says Muse Spark Open runs on your desktop. It needs 493 GB of memory and my MacBook Pro has 16. The desktop is Mac Studios you can't buy yet.
**Only on a computer with hundreds of gigabytes of memory. Muse Spark Open needs about 493 GB in the 4-bit format Apple ran it in, and even its smallest 1-bit version needs 180 GB. My MacBook Pro has 16.** [Meta](https://www.meta.com/) released it on Thursday as "[the most capable US open-weight model to date](https://research.meta.ai/blog/muse-spark-open)" and "the first model in its class to run on your desktop". This post is about that desktop and the _US_ in that sentence. And it's about why I think AI launches like this one keep promising more than they deliver.
#### Can you run Muse Spark Open locally?
On Thursday I asked [Claude Code](https://claude.com/claude-code) in my terminal the obvious question: "can i run muse spark open on this mac". The answer was a pretty firm no!! This Mac is a 2021 [MacBook Pro](https://www.apple.com/macbook-pro/) with an M1 Pro chip and 16 GB of memory.
**Muse Spark Open runs locally on Macs only if you join 2 [Mac Studios](https://www.apple.com/mac-studio/) with 512 GB of memory each, or 4 with 256 GB each.** That's from Meta's own [guide for developers](https://dev.meta.ai/resources/blog/build-with-muse-spark-open). Apple's machine learning team [wrote up how they did it](https://machinelearning.apple.com/research/mlx-distributed-inference) with [MLX](https://github.com/ml-explore/mlx) (Apple's open source framework for running models on its own chips). They're refreshingly blunt about it: "the model cannot fit on a single machine."
And the 512 GB Mac Studio isn't even on sale yet!! [VentureBeat](https://venturebeat.com/technology/meta-unveils-muse-spark-open-the-new-top-u-s-open-weights-model-and-it-runs-on-two-paired-mac-desktops) checked: "Apple's 512GB-memory configuration doesn't arrive until late October." So the desktop in Meta's headline is one nobody can buy, at a price nobody can tell you. What you _can_ buy today is 4 of the 256 GB models:
```chart stat
caption: The Muse Spark Open setup you can buy today, 4 Mac Studios with 256 GB each (VentureBeat for the price, Apple's MLX team for the speed)
| | Value |
| Price before tax | $43,196 |
| Tokens a second | 37 |
```
A token is roughly a word and that's faster than anyone can read. It's also more than twice the price of the [$18,000 AI server](/blog/local-llm-vs-cloud) everyone on X was arguing about this week. I worked out that one needs about 9 months to cost less than 10 seats of a $200 cloud plan. And it's the _cheap_ one.
[Simon Willison](https://simonwillison.net/), who tries new models the day they come out, couldn't run it either. On the launch thread he [wrote](https://news.ycombinator.com/item?id=50108941) "I had to run them via OpenRouter - I don't have access to a machine that can handle this size of model."
Meta's small model, [Muse Glimmer](https://lmstudio.ai/models/muse-glimmer), is the one meant for computers like mine. [LM Studio](https://lmstudio.ai/) says even that one needs "at least 26 GB of RAM". So no luck there either!
#### How much RAM do you need to run Muse Spark Open?
**Muse Spark Open needs about 493 GB of memory at 4-bit, more than 1.6 TB at full precision and 180 to 212 GB for the smallest 1-bit version.** It's big because it's built big: an open-weight large language model (LLM) with 816 billion parameters, 42 billion of them active for each token, and a context window of 1 million tokens. In a [mixture of experts](https://huggingface.co/blog/moe) (MoE) model like this one, every layer holds 256 small expert networks and picks 8 of them for each token ([Hugging Face's write-up](https://huggingface.co/blog/meta-muse-spark-open) has the details). That's how a model this big still answers at a usable speed: most of it sits idle on any given word. Idle experts still take up memory though (all 256 of them, in every layer).
```chart lollipop
caption: Memory needed to run Muse Spark Open, against my laptop (Apple's MLX team for full precision and 4-bit, Unsloth for 1-bit, which needs 180 to 212 GB)
unit: GB
| Version | Memory |
| Full precision, BF16 [a] | 1,600 |
| 4-bit, NVFP4 [a] | 493 |
| Smallest, 1-bit [a] | 180 |
| My MacBook Pro [c] | 16 |
```
Full precision is BF16 (brain floating point, the 16-bit format the model was trained in), where Apple says the weights alone take "more than 1.6TB of RAM". [Quantization](https://huggingface.co/docs/optimum/concept_guides/quantization) shrinks that by storing each number in fewer bits. In NVIDIA's 4-bit floating point format (NVFP4) the model takes "about 493GB" and Apple's team still had to split it across 2 machines because of the memory it needs while it's working. The 1-bit version comes from [Unsloth](https://unsloth.ai/docs/models/muse-spark-open), who squeeze models down so they fit on smaller machines. It's still more than 11× my laptop.
#### Is Muse Spark Open really open source?
**Muse Spark Open is open weights and not open source. You can download its weights for free under Meta's own [Muse Model License](https://huggingface.co/meta-models/Muse-Spark-Open-816B-A42B).** To download it you give Meta your "full legal name, date of birth, and full organization name". Anything you build with it has to say "Built with Muse Spark Open". A company making more than $20 million a year that offers it as a service has to "notify Meta and enter into a separate written agreement" (all of it is on the [model card](https://huggingface.co/meta-models/Muse-Spark-Open-816B-A42B)). [Open weights](/blog/what-are-open-weights) means you get the finished model to run yourself (the data and the code that made it stay with Meta).
Meta can ship an open source license when it wants to. Muse Glimmer, the small one, is under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0). And Muse Spark Open is still more open than the model it's named after: in 2024 [Mark Zuckerberg](https://en.wikipedia.org/wiki/Mark_Zuckerberg) wrote "[Meta is committed to open source AI](https://about.fb.com/news/2024/07/open-source-ai-is-the-path-forward/)." In April this year Muse Spark became [its first frontier model without open weights](https://the-decoder.com/metas-muse-spark-is-its-first-frontier-model-and-its-first-without-open-weights/).
#### Is Muse Spark Open really that good?
**Muse Spark Open is very good for an open-weight model. Meta's claim only covers open-weight models from American companies (a much smaller field).** [Artificial Analysis](https://artificialanalysis.ai/) ranks it #8 of 117 open-weight models in its size class, with 39 on its [Intelligence Index](https://artificialanalysis.ai/models/muse-spark-open) (the median for that class is 19 so it's good!). Meta's own model card puts it behind [Kimi K3](https://huggingface.co/moonshotai) from the Chinese lab [Moonshot AI](https://www.moonshot.ai/) on both of the coding benchmarks it reports:
```chart bars
caption: Coding benchmark scores from Meta's own model card for Muse Spark Open (October 2026)
| Benchmark | Score |
| Terminal-Bench 2.1, Kimi K3 [c] | 85.0 |
| Terminal-Bench 2.1, Muse Spark Open [a] | 76.4 |
| DeepSWE 1.1, Kimi K3 [c] | 68 |
| DeepSWE 1.1, Muse Spark Open [a] | 60 |
```
VentureBeat looked at the same table and called it "a contender with specific strengths, rather than an overall open-weight leader." That's fair! It's just not what "the most capable US open-weight model" sounds like at a glance. [Alexandr Wang](https://x.com/alexandr_wang), Meta's chief AI officer, even ended his [launch post](https://x.com/alexandr_wang/status/2110778736434184611) with "america! 🇺🇲".
Meta has been here before. When it launched [Llama 4](https://ai.meta.com/blog/llama-4-multimodal-intelligence/) in April 2025, the announcement led with "an experimental chat version scoring ELO of 1417 on [LMArena](https://lmarena.ai/)". LMArena [said afterwards](https://x.com/lmarena_ai/status/1909397817434816562) that "Meta should have made it clearer that 'Llama-4-Maverick-03-26-Experimental' was a customized model to optimize for human preference." The biggest Llama 4, Behemoth, was "still training" at launch. A month later [Axios reported](https://www.axios.com/2025/05/15/meta-behemoth-llama-scaling-delays), citing the [Wall Street Journal](https://www.wsj.com/), that Meta had delayed it over "concerns that it may not be enough of an advance."
#### Is AI overhyped?
**A lot of AI launches are. The tools work, but launch posts keep promising more than the product does on the day you get it.** I said this on stage at [React fwdays](https://fwdays.com/en/) in 2024, about my then brand new iPhone 16 Pro Max that still didn't have [Apple Intelligence](https://www.apple.com/apple-intelligence/) in Europe:
> there's devices like the R1, the Rabbit R1 that's claiming to do a bunch of things and then I get it and it doesn't do that. I even feel that with Apple. I was promised Apple Intelligence…
A few seconds later I said "there's a lot of overpromise, underdeliver and just AI AI AI everywhere and it's really exhausting." Here's that bit of the talk:
Apple [said in March 2025](https://daringfireball.net/2025/03/apple_is_delaying_the_more_personalized_siri_apple_intelligence_features) that "It's going to take us longer than we thought to deliver on these features". When I finally used Apple's on-device model in my own app this year, it [refused a voice note](/blog/note-app-ai-benchmark-apple-intelligence-sucks) of a normal conversation with my wife as "unsafe". [Humane](https://en.wikipedia.org/wiki/Humane_Inc.) [raised more than $230 million](https://techcrunch.com/2025/02/18/humanes-ai-pin-is-dead-as-hp-buys-startups-assets-for-116m/) for its AI Pin, sold its assets to [HP](https://www.hp.com/) for $116 million and switched every Pin off on February 28, 2025. A couple of weeks ago the US government started [calling AI "Super Intelligence"](/blog/super-intelligence-isnt-superior) without changing its definition.
[Marques Brownlee](https://www.youtube.com/@mkbhd) reviewed the Rabbit R1 and the AI Pin in 2024. In his [Rabbit R1 review](https://www.youtube.com/watch?v=ddTV12hErTc&t=928s) he called AI products "the apex of this horrible trend where the thing that you get at the beginning is like borderline nonfunctional compared to all the promises". His advice near the end is the best test I know for a launch like Thursday's: "[buy the product based on what it is today and not what it's promised to be in the future](https://www.youtube.com/watch?v=ddTV12hErTc&t=1155s)."
Applied to Muse Spark Open, his test says it's a very good open model that runs on hardware almost nobody has today (and through an API for everyone else). That's a fine thing to ship! It's just a different thing from a model that runs on your desktop.
People believe the promise even after it doesn't land. In a [2025 study](https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/) by [Model Evaluation and Threat Research](https://metr.org/) (METR), experienced open source developers expected AI to speed them up by 24%. They took 19% longer with it. Afterwards they "still believed AI had sped them up by 20%"!! METR has since marked those results "out of date" and [its 2026 update](https://metr.org/blog/2026-02-24-uplift-update/) says developers are likely faster with AI tools now. Good! I still keep thinking about the gap between how fast it felt and how fast it was.
#### AI should be like salt
Right after the Rabbit R1 bit in that talk I said "AI features should be like salt". You "sprinkle them on your products and you can create true beauty and flavor", but if you drown a product in it "people get sick". Muse Spark Open is a lot of good engineering, from 256 experts in every layer to the MLX work that makes 4 Macs behave like one computer. I just wish Meta had launched it the way Apple's engineers wrote it up, as a great model that doesn't fit on one machine.
---
### Local LLM vs Cloud: Is an $18,000 AI Server Worth It?
Published: 2026-10-14
URL: https://tej.as/blog/local-llm-vs-cloud
I've run models on my phone, my laptop and rented GPUs. An $18,000 AI server wins on privacy and loses on price unless it's busy all day.
**Buy an $18,000 local AI server when your data can't go to a cloud vendor. On cost alone it mostly loses: it needs about 9 months to cost less than 10 seats of a $200 cloud plan, with a model that scores 34 on [Artificial Analysis](https://artificialanalysis.ai/)'s [Intelligence Index](https://artificialanalysis.ai/models/deepseek-v4-1-flash) where [Claude Opus 5.5](https://www.anthropic.com/claude/opus) scores 58.** This post is about the $18,000 box everyone on X has been arguing about since Monday and what I've learned running large language models (LLMs) on my phone, my laptop and rented GPUs.
#### The $18,000 box
On Monday, [David Hendrickson](https://x.com/TeksEdge) posted that a 10 person startup built its own AI server for $18,000. It has more than 430,000 views since, which is a lot of eyeballs for a parts list!!
Local AI is good enough for a startup. A 10-person startup built its own 128GB-VRAM AI server for $18,000.
One Threadripper box sitting locally with 4× Radeon AI PRO R9700 32GB 128GB total VRAM Qwen3.8 + DeepSeek V4 Flash 16 concurrent AI sessions
The build comes from [a post on r/LocalLLaMA](https://www.reddit.com/r/LocalLLaMA/comments/1x2u742/building_a_4x_r9700_setup_for_a_10_person_startup/) by [u/sayamss](https://www.reddit.com/user/sayamss/), who put it together for a client: a [Threadripper](https://www.amd.com/en/products/processors/workstations/ryzen-threadripper.html) with 128 GB of memory and 4 [AMD Radeon AI PRO R9700](https://www.amd.com/en/products/graphics/workstations/radeon-ai-pro/ai-9000-series/amd-radeon-ai-pro-r9700.html) graphics processing units (GPUs) with 32 GB of memory each, at a list price of $1,299 per card. With 16 sessions running at once, [Qwen 3.8 Next Flash](https://huggingface.co/Qwen) writes 538.5 tokens a second between them (a token is roughly a word). That's about 34 each. [DeepSeek V4 Flash](https://huggingface.co/deepseek-ai), the bigger model in the tweet, does 20 tokens a second each for 8 users.
Then the replies came in. [Lior Messika](https://x.com/lior_eth), who founded the venture firm [Eden Block](https://x.com/edenblockvc), [wrote](https://x.com/lior_eth/status/2110232331193876884) "local AI makes 0 sense for startups, except a few very rare edge cases." [Sebastian Aaltonen](https://x.com/SebAaltonen) [did the math](https://x.com/SebAaltonen/status/2110318116374774036) from the other side: a $200 a month OpenAI Pro plan for all 10 developers is $2,000 a month, "9 months dev time for same price", and the local code quality "is similar to 1.5 year old frontier model." And [Mia](https://x.com/MiaAI_lab), who runs frontier open models locally, [said](https://x.com/MiaAI_lab/status/2110248718028923388) "Hybrid is actually the way to get these days" while admitting "I do need Claude and I use it a lot."
I think they're all a little right. The argument keeps going in circles because "local" means 2 different things at once.
#### Can you run a local LLM in the cloud?
**Yes. A local LLM usually means an [open-weight](/blog/what-are-open-weights) model you run yourself, on your own machine or on GPUs you rent in someone else's data center.** So "local vs cloud" is really 2 choices: which model (one whose weights you can download, or a closed one like Claude) and whose computer it runs on. I've done every combination that matters:
| Where it runs | Who pays for idle time | Where I've done it |
| --- | --- | --- |
| A closed model's API or subscription (Claude, ChatGPT) | The vendor | The German deep dives in [Dewfall](https://dewfall.app), my Bible app, on [Claude Sonnet 5](https://www.anthropic.com/claude/sonnet) |
| An open model on someone else's API | The vendor | [Kimi K2.6](https://huggingface.co/moonshotai) on [OpenRouter](https://openrouter.ai/), in my [voice note benchmark](/blog/note-app-ai-benchmark-apple-intelligence-sucks) |
| An open model on GPUs you rent | You, by the hour | [Kolibri on 2 rented NVIDIA GPUs](/blog/kolibri-vs-claude-german-llm-benchmark) |
| An open model on your own hardware | You, up front | Qwen3-4B on my iPhone, GPT-OSS on my Mac |
Look at the middle column. When a vendor's model sits idle, the vendor eats that cost. When yours sits idle, you do.
#### Is local AI worth it?
**Local AI makes sense when the data has to stay with you, when the work keeps the GPUs busy most of the day, and when an open model is good enough at the job.** Privacy is the one I've actually hit.
I'm building a small voice note app and the notes are actual conversations (my first test was 27 minutes with my wife about moving countries, a birthday and the price of a Tesla in Berlin). [Apple's on-device model refused it](/blog/note-app-ai-benchmark-apple-intelligence-sucks) as "unsafe" even at its most permissive setting. So I put a 2.3 GB copy of Qwen3-4B on the phone instead and nothing went to a server. That was the point! No subscription price would've changed my mind about it. Busy GPUs and a good enough model are harder and that's where the $18,000 box starts to wobble.
#### How much does it cost to run a local LLM?
**A local LLM costs the hardware up front plus the power to run it. After that, the price of each answer depends on how many answers the machine is working on at once.** For the box above, the hardware is $18,000. The power depends on where you live. If it pulls about 1.5 kW flat out (my guess: 4 GPUs undervolted to 210 W plus the CPU and the rest), that's about €405 a month running around the clock in Germany, where households pay [37 cents a kilowatt hour on average](https://www.bdew.de/media/documents/BDEW_Strompreisanalyse_082026.pdf). Running it 8 hours a day on workdays in the US, at [18.2 cents](https://www.eia.gov/outlooks/steo/report/elec_coal_renew.php), it's closer to $48.
Here's the US case against the cloud plans the replies kept bringing up, for 10 people over 2 years:
```chart line
caption: Total cost by month for a 10 person team, in thousands of US dollars: the $18,000 server with $48 a month of power, 10 cloud seats, and DeepSeek's own API at my estimate of the team's usage
unit: k
ticks: 10, 20, 30, 40, 50
| Month | Server [a] | $200 seats [c] | $100 seats [c] | DeepSeek [b] |
| 0 | 18 | 0 | 0 | 0 |
| 3 | 18.1 | 6 | 3 | 0.6 |
| 6 | 18.3 | 12 | 6 | 1.2 |
| 9 | 18.4 | 18 | 9 | 1.8 |
| 12 | 18.6 | 24 | 12 | 2.4 |
| 15 | 18.7 | 30 | 15 | 2.9 |
| 18 | 18.9 | 36 | 18 | 3.5 |
| 21 | 19 | 42 | 21 | 4.1 |
| 24 | 19.2 | 48 | 24 | 4.7 |
```
Against 10 seats of a $200 plan like [Claude Max](https://claude.com/pricing) or ChatGPT Pro, the box costs less after about 9 months. Against 10 seats at $100 it takes about 19. The builder's own estimate is "about 9 months to break even" and in the same comment he admits he's "assuming 24/7 utilization". Then he says the quiet part out loud: "price is not the local AI strong point right now."
The DeepSeek line surprised me. DeepSeek's [own API](https://api-docs.deepseek.com/quick_start/pricing) charges $0.30 per million input tokens, $1.20 per million output tokens and $0.006 per million for input it has already cached. I assumed 10 developers whose agents each write 300,000 tokens a day and read 50 tokens for every token they write, 90% of it cached (agents resend the conversation so far on every turn). That comes to about $196 a month. At that price the box takes about 122 months to break even, which is _10 years_… for a worse model! The box runs V4 Flash because [V4.1 Flash doesn't fit](https://www.reddit.com/r/LocalLLaMA/comments/1x2u742/building_a_4x_r9700_setup_for_a_10_person_startup/) in its memory, and the API serves V4.1.
Cloud prices also move under you, in both directions. [OpenAI's newest $200 Pro subscriptions](https://help.openai.com/en/articles/9793128-about-chatgpt-pro-tiers) come with a lower usage allowance than the old ones for the same price. Meanwhile [Sam Altman](https://blog.samaltman.com/three-observations) says "the cost to use a given level of AI falls about 10x every 12 months". In [The Gentle Singularity](https://blog.samaltman.com/the-gentle-singularity) he writes "Intelligence too cheap to meter is well within grasp." (That phrase is from 1954, when [Lewis Strauss promised electricity too cheap to meter](https://en.wikipedia.org/wiki/Too_cheap_to_meter). German electricity is still very much metered, at 37 cents.) So if you buy the box to save money, you're betting against a price that has been falling about 10× a year.
##### An idle GPU costs as much as a busy one
I learned this on rented GPUs. When Kolibri came out nobody hosted it. So I rented 2 NVIDIA RTX PRO 6000s on a [Hugging Face Inference Endpoint](https://huggingface.co/docs/inference-endpoints/index) for $5.50 an hour and had it write German deep dives on verses for Dewfall. The hour costs $5.50 whether the GPUs write 1 deep dive or 128 of them at once:
```chart bars
caption: Cost of one German verse deep dive, in US dollars (my Kolibri benchmark, 3 October 2026)
unit: $
| Setup | Cost per deep dive |
| Kolibri, 128 at once [b] | 0.008 |
| Kolibri, 16 at once [b] | 0.030 |
| Claude Sonnet 5.5, Batch API [c] | 0.036 |
| Claude Sonnet 5.5, normal price [c] | 0.071 |
```
At 16 at a time, Kolibri was barely cheaper than Claude's [Batch API](https://platform.claude.com/docs/en/build-with-claude/batch-processing). At 128 it cost under a quarter as much. The $18,000 box has the same curve, except you bought the hours in advance. With 16 people on it at 3 pm it's a great deal. At 3 am, or in a week where half the team is at a conference, you're paying for GPUs that are just sitting there.
#### Local LLM vs Claude and ChatGPT
**The open models people run on boxes like this score well below Claude and ChatGPT on hard work.** On Artificial Analysis's [Intelligence Index](https://artificialanalysis.ai/models/comparisons/deepseek-v4-1-flash-vs-claude-opus-5-5), the model the box actually runs is 24 points behind Claude Opus 5.5:
```chart lollipop
caption: Artificial Analysis Intelligence Index, v4.3.2 (October 2026)
| Model | Score |
| Claude Opus 5.5 [c] | 58 |
| GPT-6.1 Sol (Max) [c] | 52 |
| GLM-5.3-Flash [b] | 42 |
| DeepSeek V4.1 Flash [b] | 39 |
| DeepSeek V4 Flash, on the $18,000 box [a] | 34 |
```
That gap showed up in both of my own tests. Kolibri lost all 136 blind comparisons against Claude Sonnet 5.5. So [my German deep dives stay on Claude](/blog/kolibri-vs-claude-german-llm-benchmark). The Qwen3-4B on my phone came last of 11 models in the voice note benchmark, at 5.10 against the winner's 7.23. Worse, it _made stuff up_: it turned a remark about ground beef needing 12 minutes to cook into a to-do about checking a recording "within 12 minutes", which for a notes app is about the worst thing it can do.
But the winner of that same benchmark was Kimi K2.6, an open-weight model, ahead of GPT-5.5 Pro and both Claudes I tested. So the gap holds on the hardest tasks and it can flip on your specific one. You'll only find out by testing them on it.
#### When a local LLM makes sense for a business
**A local LLM makes sense for a business when the data can't go to a vendor, when the load is steady all day, or when a small model tuned on your own data does one narrow job better than a big one.** On cost alone Lior is right about most startups and the builder of the box would apparently agree with him.
Fine-tuning is the one people forget. In 2024 I built an AI search for my podcast and once people started using it, the bills nearly bankrupted me. So I [fine-tuned Mistral 7B on my own laptop](https://www.youtube.com/watch?v=uNj3y2pItrA&t=205s) instead of paying for GPT-4o. It learned my data and the exact output my site needed, which made it cheaper _and_ more accurate. Lior's answer to that [is fair too](https://x.com/lior_eth/status/2110252224492581342): "Fine tuning services like prime intellect, Applied Compute, and Tinker still end up being cheaper and more efficient." You can fine-tune an open model without owning the GPU, which takes us right back to the table at the top.
##### Hybrid: local and cloud together
The setup in the viral tweet is already hybrid if you read the thread. The builder routes work through a gateway with a frontier model on top: "a frontier planner/local executor is what you want. I am able to put 80% of requests to dsv4 flash." So the expensive model decides what to do and the cheap one does most of it.
I built a small version of this on stage at WhatTheStack in 2025: one calendar agent on a cloud model for my public Google calendar, and one on GPT-OSS running in [Ollama](https://ollama.com/) on my Mac for my private Apple calendar ("So it's like using OpenAI but without the spying"). You can watch my GPU sit at 99% while it works:
Then it failed, live. I asked it to add a calendar event "for the birth of my firstborn son", the kind of thing that should never touch Google, and the model doing the routing put it in both calendars. All I could say on stage was "this is apparently public knowledge". _Bruh._ That's the weak spot of a hybrid setup: the part that decides what's private is itself a model making a guess. If I built it again I'd make private the default and let a plain rule decide what goes out to the cloud. The [full talk](/talks/whatthestack-2025) has the rest of the trade-offs.
If I were that 10 person startup, I'd keep the frontier subscriptions for the hard thinking. I'd buy the box only for the work that has to stay in the building. That's pretty much what its builder already does with 80% of the requests.
---
### Bar Raiser Interviews, OKRs, the Spotify Model and Agile: Companies Are Full of It
Published: 2026-10-13
URL: https://tej.as/blog/companies-are-full-of-it
My case against bar raiser interviews, Objectives and Key Results (OKRs), the Spotify model and agile, why AI makes it urgent and how I'd hire instead.
On Monday I [posted this on X](https://x.com/TejasKumar_/status/2107105913794384020):
> please i beg you all stop it with your bar raiser interview nonsense\
> you don't need all this to spot real talent come on
That was the short version. This is the long one. **Companies are full of shit: bar raiser loops, [Objectives and Key Results](https://svpg.com/team-objectives-overview/) (OKRs), the Spotify model, sprints and standups are mostly complexity somebody copied from a bigger company without checking whether it ever worked there.** In a lot of cases it didn't and I went and checked. Then I want to show you why AI makes this urgent. And at the end, how I'd hire instead, which is how I got hired at all.
#### What is a bar raiser interview?
A bar raiser interview is a round in a hiring loop run by a trained interviewer borrowed from another team, whose job is to judge whether you'd raise the bar of the company. [Amazon](https://www.amazon.jobs/content/en/how-we-hire/interviewing-at-amazon) started it in 1999 and scores you against its [16 Leadership Principles](https://www.amazon.jobs/content/en/our-workplace/leadership-principles). Amazon's [own description](https://aws.amazon.com/careers/life-at-aws-amazons-bar-raiser-program-hiring-for-long-term-growth-and-innovation/) calls them "an objective third party during the hiring process" who "drive the pivotal decision on whether a candidate should be hired". There are more than 10,000 of them. [Revolut](https://strategycase.com/revolut-interview-process.md) runs one too now: 45 to 60 minutes with a senior leader from outside the team, scored on quantified ownership. Google's autocomplete puts "bar raiser interview" next to "revolut" and "mastercard", which tells you how far the copy has spread.
So a candidate spends an afternoon telling strangers stories in the Situation, Task, Action, Result (STAR) format about the time they showed Ownership or Bias for Action, which the strangers score against a list of 16 phrases. Then everybody copies it. Every company with a Notion page now has a "bar raiser" in the loop, a values list and a scoring rubric, as if the ritual is what made Amazon big.
The best data on whether any of this works comes from a company that ran the same kind of machine at scale and then published what it found. In 2013 [Laszlo Bock](https://www.theregister.com/2013/06/20/google_hiring_procedures/), who ran hiring at Google, said that when they compared tens of thousands of interview scores against how those people actually did on the job, "We found zero relationship. It's a complete random mess." Brainteasers were "a complete waste of time" that "serve primarily to make the interviewer feel smart". Of grades and test scores he said "they don't predict anything". And his analyst [Todd Carlisle](https://knowledge.wharton.upenn.edu/article/open-sourcing-googles-hr-secrets/) found that 4 interviews were enough to predict with 86% confidence whether Google should hire someone. Four!! Not a loop of 6 and a debrief.
What does predict performance is less exciting. [Paul Sackett](https://doi.org/10.1037/apl0000994) and his colleagues re-ran the big hiring meta-analyses in 2022 without the statistical corrections that had been inflating the old numbers. The structured interview came out on top, at a correlation of 0.42 with job performance. Ask every candidate the same questions about the actual job and score the answers the same way. It takes 1 interviewer who knows the job. It doesn't take a Bar Raiser.
```chart lollipop
caption: How well each hiring method predicts job performance, as a correlation (Sackett and others, 2022)
| Method | Correlation |
| Structured interview | 0.42 |
| Job knowledge test | 0.40 |
| Biodata | 0.38 |
| Work sample | 0.33 |
| Cognitive ability test | 0.31 |
```
I'll tell you what I failed. In 2015 I was in [Qatar](/story#grow-2014) with severe hemophilia, trying to get to any country with a healthcare system that would keep me alive, applying for engineering jobs in all of them. I got a lot of interviews and I failed all of them. [Booking.com](https://www.booking.com) turned me down for not having enough A/B testing experience (go and look at Booking.com, the entire site is one enormous A/B test). I'd have failed a bar raiser loop too: no degree, barely any school and no STAR story about the time I showed Ownership. Then [Rodrigo Paiva](https://www.linkedin.com/in/rhpaiva/) at [McMakler](https://www.mcmakler.de), a small Berlin startup, interviewed me and hired me, with relocation. For years I told that story as "Germany was so short of engineers they'd hire anyone". After he read [my story](/story#grow-2014) he wrote to me to say the hire was nothing like an accident. I'd aced the technical test and he chose me because I wanted out and had shown the initiative to get there. 6 years later [Spotify](/story#spotify-2021) made that same guy a staff engineer.
#### What is leader filtration theory?
[Gautam Mukunda](https://bakadesuyo.com/2013/03/interview-harvard-business-school-professor-gautam-mukunda-teaches-secrets-leader/), who taught at [Harvard Business School](https://www.hbs.edu/), has a theory for what a filter like this produces. Leader filtration theory says every big organization has a process that evaluates the people who might lead it. A leader who comes up through that process is _filtered_: well known, thoroughly vetted and much like every other person the process would have picked. A leader who comes in through a side door is _unfiltered_: an outsider, a vice president who got the top job when the president died, someone nobody had the chance to screen. His claim is that filtered leaders land in the middle and unfiltered ones, in his words, "are likely to do either much better or much worse than a filtered person would".
Then he tested it on every US president. He [sorted them](https://www.library.hbs.edu/working-knowledge/why-most-leaders-even-thomas-jefferson-are-replaceable) by how much relevant experience they had before the office and how they got there, then set that against how historians rank them. 4 of the 5 highest ranked presidents were unfiltered. So were 4 of the 5 lowest ranked. Washington and Lincoln were both unfiltered and [Theodore Roosevelt](https://en.wikipedia.org/wiki/Theodore_Roosevelt) was a vice president who got in when McKinley was shot. Mukunda puts the result at the 99.97% significance level and the book is [Indispensable: When Leaders Really Matter](https://www.amazon.com/Indispensable-When-Leaders-Really-Matter/dp/1422186709).
```chart stack
caption: How many of the 5 highest and 5 lowest ranked US presidents came in unfiltered (Mukunda, 2012)
| | Unfiltered [a] | Filtered [c] |
| 5 highest ranked | 4 | 1 |
| 5 lowest ranked | 4 | 1 |
```
Now put a Bar Raiser on that. Their whole job is to make sure nobody gets in who wasn't vetted. By design the loop gives you the predictable middle, which Mukunda says is what you should want when things are going fine. It's also the mechanism that keeps the Lincolns out. I'm not saying hire at random off the street. I'm saying the loop gives you a drone every time because a drone is what it's built to give you: someone with a tidy story for every principle on the list who will follow orders in the right format. Nobody inspired got through a filter by being inspired.
#### Does the Spotify model work?
**Spotify itself never ran it.** I was a staff engineer at [Spotify](/story#spotify-2021) in 2021. Squads, tribes, chapters and guilds come from a 2012 whitepaper by [Henrik Kniberg and Anders Ivarsson](https://holub.com/goodies/SpotifyScaling.pdf), written when Spotify had 30 teams and about 250 people in them. Companies 10× that size copied the org chart as if it came with the music.
[Jeremiah Lee](https://www.jeremiahlee.com/posts/failed-squad-goals/), a product manager at Spotify in Stockholm, wrote up in 2020 what it was like from the inside. The matrix of squads and chapters left nobody accountable. Autonomy without alignment meant every squad did its own thing. And the mythology made the model impossible to criticize. One of the people who wrote the whitepaper told him "Even at the time we wrote it, we weren't doing it. It was part ambition, part approximation." That person also said "It worries me when people look at what we do and think it's a framework they can just copy and implement." People looked and people copied.
What I can tell you from my few months there is that the thing that made the place work wasn't a diagram. There was no "frontend engineer" or "backend engineer". There was engineer, senior engineer, staff engineer, principal, and you did everything, including (in my case) scaling a database across regions with region level failover. That's a hiring decision about what kind of person you want in the building. You can't copy it by renaming your teams.
#### Why OKRs don't work
OKRs, key performance indicators (KPIs), whatever your company calls the spreadsheet this quarter. The research on goal setting is enormous and it does say a specific, hard goal changes behavior. The same research says what it does to everything else. [Lisa Ordóñez, Maurice Schweitzer, Adam Galinsky and Max Bazerman](https://repository.upenn.edu/mgmt_papers/325) titled their 2009 paper "Goals Gone Wild" and listed the side effects: a narrow focus that neglects everything outside the goal, distorted risk preferences, a rise in unethical behavior, inhibited learning, a corroded culture and reduced intrinsic motivation. Their line is that goal setting should be treated as "a prescription-strength medication that requires careful dosing". Companies hand it out like candy.
Then [Marty Cagan](https://svpg.com/team-objectives-overview/), who spent years telling companies to adopt OKRs, wrote in 2020 that in the majority of companies he meets he has "stopped recommending the practice". In those companies it "ends up proving a waste of time and effort, and yields little if any results". He says why. OKRs are an empowerment technique: you give a team an actual problem and the space to solve it. A company that hands a team objectives _and_ a feature roadmap _and_ deadlines has ticked the empowerment box and kept the orders. Which is what happens at most companies I've seen. The slide got a number on it.
#### Agile stopped meaning anything in 2014
[Dave Thomas](https://pragdave.me/thoughts/active/2014-03-04-time-to-kill-agile.html) helped write the [Agile Manifesto](https://agilemanifesto.org/) in 2001. In 2014 he published a post called "Agile is Dead" that said the word "has been subverted to the point where it is effectively meaningless". Once the manifesto got popular, "the word agile became a magnet for anyone with points to espouse, hours to bill, or products to sell". Scrum masters, certifications, 2 week sprints, story points, velocity charts, a daily standup where 9 people report to 1 person. The manifesto's first line is "Individuals and interactions over processes and tools" and the industry built a process and tools empire on it. That's _insane_… it's literally the first line.
There's a 2024 [study](https://www.engprax.com/post/268-higher-failure-rates-for-agile-software-projects-study-finds) of 600 engineers that claims projects run on agile style requirements fail 268% more often. Take it with a grain of salt though. The person who ran it, [Junade Ali](https://junade.com/), sells the alternative, a method he calls [Impact Engineering](https://www.engprax.com/), which in the same study fails only 10% of the time. That's the genre. The person telling you agile is broken is usually selling the next thing and I'm not selling a method.
#### Is agile dead in the age of AI?
**The word died in 2014. AI is finishing off the process built around it.** Look at what every piece of this machinery selects for. The loop wants a person who produces the expected answer in the expected format. The OKR wants a person who hits a number somebody above them chose. Scrum wants a person who takes a ticket, estimates it, closes it, repeats. All of it optimizes for following orders well. That's also a fair description of what a language model is good at.
[Erik Brynjolfsson, Bharat Chandar and Ruyu Chen](https://digitaleconomy.stanford.edu/publications/canaries-in-the-coal-mine/) at Stanford have been watching this in payroll data from [Automatic Data Processing](https://en.wikipedia.org/wiki/ADP_(company)) (ADP) covering millions of US workers. By June 2026, employment of 22 to 25 year olds in the occupations most exposed to AI was 19% below their less exposed peers, while experienced workers in the same jobs showed no such drop. The declines are concentrated where AI _substitutes_ for a person's tasks. Where it complements the person, employment is flat or rising. They call it canaries in the coal mine.
```chart stat
caption: Employment of 22 to 25 year olds in AI-exposed occupations, against their less exposed peers, June 2026 (Brynjolfsson, Chandar and Chen)
| | Gap |
| Young workers in AI-exposed jobs | −19% |
```
And the loop itself is gameable with the same technology. In 2025 a Columbia student called [Roy Lee](https://www.nbcnews.com/tech/tech-news/columbia-university-student-trolls-big-tech-ai-tool-job-applications-rcna198454) built a desktop app, invisible to the interviewer, that solved the coding questions during his interviews and used it to get an internship offer from Amazon. He filmed it. Amazon had the video taken down, Columbia suspended him and he raised $15 million for the company he built out of it. I don't think he's a hero. What it proves is that a filter a 21 year old can pass with a hidden window is measuring something a machine does better than the candidate. And that's the thing you're paying 6 interviewers an afternoon each to measure!!
So the drone work is going. Going by the Stanford numbers, the people hired for it are the ones AI is replacing first. And the people who'd have mattered got filtered out in a debrief by a volunteer from another team. What's left when the work that follows orders gets cheap is the stuff I wrote about [last time](/blog/why-ai-cant-replace-human-taste): taste, novelty, the person who notices the thing nobody asked about. That person is the side door hire. That person has no STAR story for it. This is roughly what I say to a room of engineering leaders when a company has me in to [talk about AI and their teams](/speaking). There's always one person in that room nodding who got in through the side door.
#### How to hire good software engineers without all this
**Ask every candidate the same questions about the job, watch them do the work in private and pay them for a short trial.** All 3 judge the work instead of how somebody comes across in a room. The research behind them is old and pretty consistent and none of it needs a bar raiser.
Getting fooled by how somebody comes across is a lot older than any of that research. It's so old it's in the Bible, from the BC times!! When the prophet Samuel went to Bethlehem to anoint one of Jesse's sons as the next king of Israel, he took one look at the oldest, Eliab, and said "Surely here before the LORD is His anointed" ([1 Samuel 16:6](https://dewfall.app/en/read/bsb:9:16:6)). God stopped him: "Do not consider his appearance or height, for I have rejected him; the LORD does not see as man does. For man sees the outward appearance, but the LORD sees the heart" ([1 Samuel 16:7](https://dewfall.app/en/read/bsb:9:16:7)). The king was David, the youngest, who was out tending the sheep and hadn't even been called in ([1 Samuel 16:11](https://dewfall.app/en/read/bsb:9:16:11)). David would then go on to [slay Goliath](https://dewfall.app/en/read/bsb:9:17:50) in the famous story. Every loop I've described is built on Samuel's first instinct: the polish, the confident STAR story, the right school on the CV.
##### Ask everyone the same questions, then ask your gut last
The structured interview tops Sackett's chart above. Its opposite, an hour of friendly chat, does worse than nothing. In [a 2013 study](https://doi.org/10.1017/S1930297500003612) by [Robyn Dawes](https://en.wikipedia.org/wiki/Robyn_Dawes) and 2 colleagues, some of the people being interviewed answered from a random response system. The interviewers formed impressions "just as confidently" as they did after honest ones. And the interviews "actually led participants to make worse predictions". In a third experiment people said they'd rather have a random interview than none at all, which is _insane_… we'd literally take noise over nothing.
[Daniel Kahneman](https://en.wikipedia.org/wiki/Daniel_Kahneman) fixed this for the Israeli army while he served in it, a story he tells in [_Thinking, Fast and Slow_](https://en.wikipedia.org/wiki/Thinking,_Fast_and_Slow). He "insisted that interviewers ask each applicant the same series of objective, factual questions about six characteristics" ([Westmont Magazine](https://libarts.westmont.edu/node/23792)). The interviewers wanted to use their judgment instead. So he let them give one gut rating at the very end, after everything else was scored. In his words, "It's better to collect all the data first and then close your eyes and be intuitive."
For an engineering role, pick the handful of things the job actually needs (debugging something broken in production, reading code you didn't write, explaining a tradeoff to a product manager, whatever yours are). Write questions about each one and ask every candidate the same ones. Score each thing before you move on to the next and ask your gut at the end. Keep it to 4 interviews. Google found 4 were enough to predict its hiring decision with 86% confidence, which Bock called the "Rule of Four" ([Wharton](https://knowledge.wharton.upenn.edu/article/open-sourcing-googles-hr-secrets/)). He says Google's time to hire went "from something like six months to 45 days".
##### Swap the whiteboard for the actual work, done in private
In 2020 [Mahnaz Behroozi, Chris Parnin and their colleagues](https://doi.org/10.1145/3368089.3409712) at [North Carolina State University](https://en.wikipedia.org/wiki/North_Carolina_State_University) (NC State) gave 48 computer science students the same coding problem. Half solved it at a whiteboard with an interviewer watching and half solved it alone in a room. NC State titled the [press release](https://news.ncsu.edu/2020/07/tech-job-interviews-anxiety/) "Tech Sector Job Interviews Assess Anxiety, Not Software Skills". The people who were watched "performed half as well". And "all of the women who took the public interview failed" while "all of the women who took the private interview passed" (a small group so don't stretch that one). Parnin's conclusion was that "companies are missing out on really good programmers".
[Thomas Ptacek](https://sockpuppet.org/me/) ran hiring at the security firm Matasano and wrote up what replaced the interview there in ["The Hiring Post"](https://sockpuppet.org/blog/2015/03/06/the-hiring-post/) in 2015. It opens with "The software developer job interview doesn't work." Matasano's work samples were "standardized, so that every candidate faces the same test" and graded the same way: "If you're scoring candidates differently, you're missing the point." One hire, Alex, "had Walter White's resume, but Heisenberg's aptitude". He went on to write exploit code that Ptacek says "might be one of just a few implementations in the world" and "Nothing in Alex's background offered a hint that this would happen." Side door!!
You won't be the first to try it. More than 750 companies and teams list themselves on [Hiring Without Whiteboards](https://github.com/poteto/hiring-without-whiteboards), whose interviews "resemble day-to-day work", like "pairing on a real world problem or a paid/unpaid take home exercise". Work samples scored 0.33 in Sackett's numbers, below the structured interview. So I'd do both. The interview tells you how somebody thinks about the job and the work sample shows you them doing it.
##### Pay for a short trial on a problem you actually have
[Automattic](https://en.wikipedia.org/wiki/Automattic), the company behind WordPress.com, [replaces the technical interview](https://automattic.com/how-we-hire/) for some roles with "a project that simulates real work". Its longer trial is "up to 20 hours using real work to check mutual fit, with feedback from your hiring team throughout". Its design team adds that "All Automattic trial projects are paid at a standard rate of $25 USD per hour" ([Automattic Design, 2024](https://automattic.design/2024/07/17/the-design-hiring-process-at-automattic-a-step-by-step-guide/)). I'd pay every time. A 20 hour unpaid take home only gets finished by people with free evenings, which leaves out parents, carers and anyone who already has a job.
The longest trial you have is the one already in the contract. In Germany, where I've worked since 2015, a Probezeit of up to 6 months lets either side end things with 2 weeks' notice ([§ 622 BGB](https://www.gesetze-im-internet.de/bgb/__622.html)). Use those months the way they're meant: hand the new person something small that's theirs, watch what they do with it, then hand them something bigger.
##### Ask what they built when nobody was making them
Rodrigo hired me for a technical test I'd aced and for the initiative I'd shown to get out of Qatar. The second one never shows up on a values rubric. So put it in your structured questions. "What's something you built that nobody asked you for?" and "What did you do to get into this room?" get scored like everything else. That's how you find Mukunda's unfiltered people without hiring at random.
I know how this sounds coming from a guy with no degree who got into tech through a side door. Somebody looked past the outward appearance once, in a small office in Berlin. I'm still here because of it. Somewhere in your pipeline there's someone with a weird CV and no STAR story. Give them the same questions and the same test as everyone else and see what happens.
---
### Why AI Can't Replace Human Taste and Creativity
Published: 2026-10-12
URL: https://tej.as/blog/why-ai-cant-replace-human-taste
AI can't replace human creativity or taste: we crave novelty and a model makes what's most common. My answer to a question after my talk in Prague.
**AI can't replace human taste and creativity because human beings crave novelty.** A model makes whatever was most common in what it learned from. By the time something new is common enough for a model to make it, we're bored of it and already chasing the next new thing.
That's more or less what I told somebody on 6 October in Prague, after my talk at [FrontKon](https://www.frontkon.tech/events/frontkon-26/program) (FrontKon with a K!). He asked me a really good question and my answer got kinda controversial. So here's all of it written down properly, with the research I didn't have in my pocket on the night.
#### "Can't we just train taste into AI?"
The talk was about taste. It's the same one I gave as [The Critical Advantage With AI](/talks/agent-conf-2026) at [Agent Conf](https://agent.sh/) in Warsaw in September (at FrontKon it ran in the [Frontend After AI: The New UX](https://www.frontkon.tech/events/frontkon-26/talks/frontend-after-ai-the-new-ux) slot). In it I define taste as **a trainable skill where you tacitly judge quality against external standards**. And I spend most of the talk on how you train it: immersion, valid cues and corrective feedback. The long version with every source is in [What Is Good Taste in Software?](/blog/what-is-good-taste-in-software).
So afterwards a guy came up to me and asked, roughly:
> Hey, but if taste is just pattern matching, and if taste is a trainable skill, then can we not just train taste into AI agents? And then they take taste too, and we're left with nothing?
And I said "No."
He asked "Well, how come?" which is fair!! He was taking my own definition seriously. If taste is judgment you train and judgment is pattern matching, then training pattern matchers is literally what AI labs do all day.
My answer had 2 parts. The first one is biology: we love novelty and we can't switch that off. The second one is the controversial part and it involves Hitler. I'll get to it.
#### Why do humans crave novelty?
**Humans crave novelty because our brains give new things a bonus: novel things activate the dopamine-producing part of the midbrain and that response fades once the new thing is familiar.**
In Prague I called this our dopamine schedule. [Andrew Huberman](https://en.wikipedia.org/wiki/Andrew_D._Huberman) talks about "so-called dopamine schedules" in [his episode on dopamine](https://www.hubermanlab.com/episode/controlling-your-dopamine-for-motivation-focus-and-satisfaction). He puts it better than I did: "This is why when you repeatedly engage in something that you enjoy, your threshold for enjoyment goes up and up and up." How good something feels "depends on the height of that peak relative to the baseline." His example is scrolling Instagram: you see a post you love, then the next one is "Not that interesting", even though "had you arrived at that second thing first, you might think that it was really interesting." That's pretty much what I told the guy in Prague!!
3 findings show what's going on underneath:
1. **New things light up the midbrain.** In 2006 two neuroscientists at [University College London (UCL)](https://en.wikipedia.org/wiki/University_College_London) scanned people's brains while they looked at pictures and found the dopamine areas of the midbrain ["were indeed driven by stimulus novelty rather than other forms of stimulus salience"](https://doi.org/10.1016/j.neuron.2006.06.021) like rareness or emotion. Babies do this before they can talk: in [a 1964 study in _Science_](https://doi.org/10.1126/science.146.3644.668), infants 2 to 6 months old looked at the same pattern less and less over 10 one-minute showings, while new patterns kept their attention.
2. **Novelty steers our choices even when it shouldn't.** In [a 2008 study in _Neuron_](https://doi.org/10.1016/j.neuron.2008.04.027), another team at UCL found that "even when the degree of perceptual familiarity of an option is unrelated to choice outcome, novelty nevertheless drives choice behavior". They called it "a newly identified and quantifiable source of human irrationality", which is _hilarious_… it's literally us. The brain starts every new option off with an optimistic value so that we go and try it.
3. **It wears off.** In 1992 [Wolfram Schultz](https://en.wikipedia.org/wiki/Wolfram_Schultz)'s lab recorded dopamine neurons in monkeys while an empty box opened in front of them. The neurons fired the first few times. Then ["Neuronal and behavioral responses disappeared on repeated stimulus presentation."](https://doi.org/10.1152/jn.1992.67.1.145) Schultz's later work is why we talk about dopamine as a prediction error: [dopamine neurons](https://doi.org/10.1126/science.275.5306.1593) fire for what's better than predicted and stay flat for what's exactly as good as predicted.
**So the brain pays out for surprise, not for repeats.** (Dopamine's job is mostly _wanting_, by the way. [Kent Berridge](https://en.wikipedia.org/wiki/Kent_Berridge)'s work says the dopamine system is necessary for wanting rewards but not for liking them. [A 2015 review he co-wrote](https://doi.org/10.1016/j.neuron.2015.02.018) even says it "may not generate pleasure after all". Its role in pleasure is still argued over: in [a 2019 study](https://doi.org/10.1073/pnas.1811878116), changing people's dopamine levels changed how much they enjoyed music.)
That machinery is also behind a lot of compulsive behavior. I named porn and sex in Prague and there's research on exactly that. Show someone the same erotic clip again and again and their arousal drops: [a 1985 study](https://doi.org/10.1007/bf01542106) controlled for fatigue to show it's habituation. In 2016 [Paula Banca and colleagues](https://doi.org/10.1016/j.jpsychires.2015.10.017) scanned men with compulsive sexual behavior (what's usually called porn addiction) and found they habituated faster to repeated sexual images. And the faster they habituated, the more they preferred new ones. Their own words: "the Internet provides a broad range of novel and potentially rewarding stimuli." Wild.
It's biology, but it isn't the same amount in everyone. Novelty seeking is a personality trait that varies from person to person and it [tracks dopamine receptors in the midbrain](https://doi.org/10.1523/jneurosci.2423-08.2008). We don't want everything new either: [a 2010 study in _PNAS_](https://doi.org/10.1073/pnas.1004374107) found people prefer familiar faces and new scenery. But nobody gets to opt out of the bonus.
#### Why movies keep getting more unhinged
I've said this on stage before. On the [accessibility panel at Future Frontend](/talks/future-frontend-2026-accessibility-panel) in June I said we "got bored of the movie formula" (the Marvel one especially) and that the movies doing well are the weird ones ([recording at 2:09](https://www.youtube.com/watch?v=iSA23DLYPLs&t=129s)): "by weird I mean they're novel. And as human beings we're we're born and raised novelty seeking."
The one everybody's talking about right now is [_You Can See Everything_](https://a24films.com/films/you-can-see-everything), [A24](https://a24films.com/)'s documentary about [Elizabeth Holmes](https://en.wikipedia.org/wiki/Elizabeth_Holmes) of [Theranos](https://en.wikipedia.org/wiki/Theranos), directed by [Nathan Fielder](https://en.wikipedia.org/wiki/Nathan_Fielder) and [Lance Oppenheim](https://en.wikipedia.org/wiki/Lance_Oppenheim). It doesn't open until 16 October and its [official trailer](https://www.youtube.com/watch?v=HvW_N5p1q44) already had 15.4 million views on A24's channel when I checked on 6 October. It's 100% on [Rotten Tomatoes](https://www.rottentomatoes.com/m/you_can_see_everything) from 17 reviews. [Owen Gleiberman](https://en.wikipedia.org/wiki/Owen_Gleiberman) called it ["a one-of-a-kind reality-TV-as-hangout-movie psychodrama circus"](https://variety.com/2026/film/reviews/nathan-fielder-surprise-film-telluride-elizabeth-holmes-1236853513/) in [_Variety_](https://variety.com/). The trailer is unhinged as fuck. It makes your skin crawl:
Before that it was [_Everything Everywhere All at Once_](https://en.wikipedia.org/wiki/Everything_Everywhere_All_at_Once) and its universe where everybody has hot dogs for fingers. It made about $145 million worldwide on a $25 million budget ([The Numbers](https://www.the-numbers.com/movie/Everything-Everywhere-All-At-Once-(2022))) and won 7 Oscars [in March 2023](https://www.oscars.org/oscars/ceremonies/2023), [Best Picture](https://en.wikipedia.org/wiki/Academy_Award_for_Best_Picture) included. It was A24's biggest film until this year, when [_Backrooms_](https://en.wikipedia.org/wiki/Backrooms_(film)), directed by [Kane Parsons](https://en.wikipedia.org/wiki/Kane_Parsons), a YouTuber who was 20 when it came out, became ["officially A24's highest-grossing worldwide release"](https://au.variety.com/2026/film/box-office/backrooms-a24-highest-grossing-movie-overtaking-marty-supreme-37408/) (Variety, 9 June 2026):
```chart bars
caption: A24's 3 biggest films, worldwide box office (Box Office Mojo and The Numbers, October 2026)
| Film | Worldwide |
| Backrooms (2026) | $400.7M |
| Marty Supreme (2025) | $192.4M |
| Everything Everywhere All at Once (2022) | $145M |
```
Franchises still top the charts overall. But the surprises keep being the strange ones: [_Sinners_](https://en.wikipedia.org/wiki/Sinners_(2025_film)) was the only original story among the 10 biggest films of the first half of 2025 ([Variety](https://variety.com/2025/film/box-office/lilo-stitch-mission-impossible-sinners-box-office-milestones-1236415261/)). And the [record summer of 2026](https://au.variety.com/2026/film/news/summer-box-office-breaks-all-time-record-40040/) had _Obsession_ and _Backrooms_ as its sleeper hits while live-action _Moana_ and _Supergirl_ flopped.
This is an old idea in psychology. [Colin Martindale](https://en.wikipedia.org/wiki/Colin_Martindale) spent his career on it, and in [a 1986 study of Italian painting](https://doi.org/10.2307/1578240) he put it like this: "habituation pressures successive artists within any style to increase the impact value or arousal potential of their works." When a style can't get any more intense, it changes and the process starts again. In Prague I said that after unhinged we might crave something even more unhinged, or we might get so fed up with it that we crave hinged stuff again. There's a lab version of that too: in [a 2009 study](https://doi.org/10.1016/j.actpsy.2009.01.001), people who'd been shown a huge number of complex images then found simple ones more beautiful, and the other way round.
But we don't want _maximum_ new. The industrial designer [Raymond Loewy](https://en.wikipedia.org/wiki/Raymond_Loewy) called the sweet spot "most advanced, yet acceptable" (MAYA). [A 2003 study](https://doi.org/10.1348/000712603762842147) found people "prefer novel designs as long as the novelty does not affect typicality". When [Noah Askin and Michael Mauskapf](https://doi.org/10.1177/0003122417728662) analyzed about 27,000 songs from the [Billboard Hot 100](https://www.billboard.com/charts/hot-100/), songs "sounding too much like previous and contemporaneous productions" were less likely to succeed and songs with "optimal differentiation" were more likely to reach the top. (The big datasets show change coming in bursts rather than a steady climb: [US pop changed fastest around 1964, 1983 and 1991](https://doi.org/10.1098/rsos.150081).) **We crave the new thing we can still follow.**
#### Can AI replace human creativity?
**Not on its own. Left to itself, a model drifts toward the most typical answer, while what feels new to people is whatever isn't typical yet.**
Here's why models drift there. A language model learns how likely each next word is, given everything it read. Always picking the likeliest one gives you text that's ["bland and strangely repetitive"](https://arxiv.org/abs/1904.09751). And the tuning that makes models helpful narrows them further: [reinforcement learning from human feedback (RLHF)](https://huggingface.co/blog/rlhf) ["significantly reduces output diversity"](https://arxiv.org/abs/2310.06452). Part of the reason is us! [A 2026 paper](https://arxiv.org/abs/2510.01171) found "annotators systematically favor familiar text" so the models learn that familiar wins.
You can see the result. The [Artificial Hivemind paper](https://arxiv.org/abs/2510.22954), which won a [best paper award at NeurIPS 2025](https://blog.neurips.cc/?p=1443), asked 25 models for "a metaphor about time" 50 times each. They mostly landed in 2 clusters: time is a river and time is a weaver.
##### Does AI make us less creative?
**It makes a group's ideas more alike: the one part of creativity anyone can measure.** People using AI drift together. In [Wharton's brainstorming experiments](https://mackinstitute.wharton.upenn.edu/2025/new-in-nature-chatgpt-decreases-idea-diversity-in-brainstorming/), published in [_Nature Human Behaviour_](https://doi.org/10.1038/s41562-025-02173-x) in 2025, 9 people using ChatGPT independently named their toy "Build-a-Breeze Castle". And in [a 2024 study in _Science Advances_](https://doi.org/10.1126/sciadv.adn5290) with 293 writers, stories written with AI ideas were rated more creative and were "more similar to each other than stories by humans alone". The most creative writers barely got anything out of the AI at all.
##### Can AI be more creative than humans?
**On some tests, yes. The evidence on this side deserves a fair hearing.**
- In [a study of over 100 NLP researchers](https://arxiv.org/abs/2409.04109), ideas a model generated were judged more novel than experts' ideas. But in that same study only 200 of the model's 4,000 ideas weren't duplicates, and [when experts spent 100+ hours actually executing the ideas](https://arxiv.org/abs/2506.20803), the human ideas came out ahead.
- In [a 2024 study with more than 1,600 people](https://doi.org/10.1038/s41598-024-76900-1), readers couldn't tell AI poems from poems by famous poets and rated the AI ones higher. The authors think it's because the AI poems were simpler and easier to follow. So slop can absolutely win with a casual audience.
- [Google DeepMind](https://deepmind.google/)'s [FunSearch](https://doi.org/10.1038/s41586-023-06924-6) found genuinely new mathematics with a language model. It did that with an evaluator outside the model scoring every attempt, which is basically the job taste does.
So my actual argument is about timing. Something has to be common in a model's training data before the model is likely to make it. Models can catch up to any style once it exists and enough people have made and written about it ([a 2025 preprint](https://arxiv.org/abs/2510.13939) fine-tuned models on an author's books and even trained writers preferred the imitations). They can't be the ones who make it exist first. And by the time they've caught up, the hot dog fingers are old.
That's also what happened to AI movies so far. OpenAI's animated _Critterz_ was meant to premiere at Cannes in 2026 and [missed it](https://futurism.com/artificial-intelligence/openai-attempt-ai-pixar-movie-shambles) after OpenAI shut down Sora. [_Copán: La Leyenda_](https://www.cartoonbrew.com/artificial-intelligence/honduras-copan-la-leyenda-ai-feature-261199.html), an AI-generated feature from Honduras, came out in May and got panned. [Cartoon Brew](https://www.cartoonbrew.com/) wrote that "viewers seemed less interested in the novelty of the technology than in whether the film itself demonstrated craft, artistic intention, and human creativity." Meanwhile films where people made the choices already use AI as a tool, like [_The Brutalist_](https://www.nbcnews.com/pop-culture/movies/-brutalist-sparks-controversy-films-editor-reveals-use-ai-rcna188457) for some of its Hungarian dialogue and Netflix's [_The Eternaut_](https://www.upi.com/Top_News/US/2025/07/18/7821752857962/) for a building collapse. The line is who made the choices.
#### The controversial part
I told him the reason I'm not worried about AI models overtaking us on taste is the same restlessness that helped [Hitler](https://en.wikipedia.org/wiki/Adolf_Hitler) come to power in 1933 after [World War I](https://en.wikipedia.org/wiki/World_War_I), that helped [Donald Trump](https://en.wikipedia.org/wiki/Donald_Trump) win twice and that has the [Alternative for Germany (AfD)](https://en.wikipedia.org/wiki/Alternative_for_Germany) coming first in German elections. And that restlessness is our biology: we love novelty.
The Nazis went from 2.6% of the vote in 1928 to the biggest party in the Reichstag with 37.3% in July 1932. And on 30 January 1933 Hitler was [appointed chancellor](https://encyclopedia.ushmm.org/content/en/article/hitler-comes-to-power). That came right after a crisis: Nazi votes surged where [failing banks](https://www.jvoth.com/papers/financial-crises-political-radicalization.html) hit hardest in 1931 and where [austerity](https://doi.org/10.1017/S0022050720000601) cut deepest. It's a pattern across history too. After financial crises the far right's vote share grows by about 30% on average ([Funke, Schularick and Trebesch](https://doi.org/10.1016/j.euroecorev.2016.03.006)), which doesn't happen after normal recessions. And even without a crisis, incumbents ["experience an erosion of support over time"](https://doi.org/10.1017/S1049096515000165) across more than 500 elections. We get tired of whoever's in charge.
In 2016, [39% of American voters](https://www.brookings.edu/articles/voters-want-change-not-ideology/) said the quality that mattered most was a candidate who "can bring change". In 2024, [about 3 in 10 voters](https://www.pbs.org/newshour/politics/voter-anxiety-over-the-economy-and-desires-for-total-upheaval-brought-trump-back-to-office-ap-votecast-shows) said they wanted "total upheaval" in how the country is run. The AfD came second in Germany's [February 2025 federal election](https://www.bundeswahlleiterin.de/bundestagswahlen/2025/ergebnisse/bund-99.html) with 20.8%, then first in Saxony-Anhalt last month [with 43.8%](https://www.kas.de/documents/d/guest/wahlanalyse-der-landtagswahl-in-sachsen-anhalt-am-6-september-2026-1). And it leads [the national polls](https://dawum.de/Bundestag/) right now. 83% of its supporters in Saxony-Anhalt told pollsters they want fundamental change, while 85% of them worry that the way people live in Germany is changing too much. They want something new in charge so that things around them stop changing.
The novelty seeking psychologists measure as a personality trait actually [leans liberal](https://doi.org/10.1111/j.1467-9221.2008.00668.x), and in Germany [openness went with intending to vote for nearly every party rather than the AfD](https://doi.org/10.1007/s12144-021-02100-z). What these elections share is people being tired of the status quo and turning to something new, sometimes something dangerous. It's the same pull that makes us bored of a movie formula.
#### Slop is typical, craft is new
This ties into what makes slop slop and craft craft. In [Please Stop the Slop](/blog/please-stop-the-slop#is-all-ai-slop) I drew the line at whether somebody cared enough to make the choices and check what came back. Novelty is why that line matters: the choices nobody made default to the most probable ones. And the most probable thing is exactly what we're already bored of. Craft is a person choosing something that _wasn't_ the most probable thing, on purpose, and checking it against a standard.
Prague also gave me half an answer to the question I ended [my long taste post](/blog/what-is-good-taste-in-software#what-standards-cant-do) on, whether taste is just the aggregation of the majority. The majority's taste is what a model can learn and it's always a little behind the people who are bored of it.
#### Where does this end?
He had one more question: "Where does this end?"
I said ideally it ends where it began, with us around a campfire. In 1974 the anthropologist [Polly Wiessner](https://en.wikipedia.org/wiki/Polly_Wiessner) recorded 174 conversations among the [Ju/'hoansi](https://en.wikipedia.org/wiki/%C7%83Kung_people) in northwest Botswana and [published them in _PNAS_ in 2014](https://doi.org/10.1073/pnas.1404212111). By day people talked about money and complained about each other. At night by the fire, 81% of the long conversations were stories:
```chart stack
caption: What the Ju/'hoansi talked about by day and by firelight, share of conversations (Wiessner, PNAS, 2014, and the University of Utah)
unit: %
| | Stories [a] | Economics and complaints [b] | Everything else [c] |
| By day | 6 | 65 | 29 |
| By firelight | 81 | 11 | 8 |
```
Storytellers matter too. Among the [Agta](https://en.wikipedia.org/wiki/Aeta_people) in the Philippines, [skilled storytellers had roughly double the odds](https://doi.org/10.1038/s41467-017-02036-8) of being picked as someone people wanted to live with, more than good foragers. And they had more living children.
Each of us is full of new experiences from our own lifetime. So we tell stories around the fire, we sing songs together, and maybe we watch something unhinged (or hinged) together. We chase novelty together, we chase food together. My favorite part of conferences [has always been the conversation](/blog/why-i-do-not-prefer-speaking-at-remote-conferences) and that's literally where this whole post came from: a guy with a good question after a talk.
The Bible has a whole book about this. The Teacher in [Ecclesiastes](https://dewfall.app/en/read/chapter/bsb:21:1) tried everything under the sun and found that "[the eye is not satisfied with seeing, nor the ear content with hearing](https://dewfall.app/en/read/bsb:21:1:8)", which is habituation, written down long before anyone scanned a midbrain. "[There is nothing new under the sun](https://dewfall.app/en/read/bsb:21:1:9)," he says. So what's left? Good food, a drink, good work and each other: "[there is nothing better for them than to rejoice and do good while they live](https://dewfall.app/en/read/bsb:21:3:12)" and "[every man should eat and drink and find satisfaction in all his labor](https://dewfall.app/en/read/bsb:21:3:13)". And "[Two are better than one](https://dewfall.app/en/read/bsb:21:4:9)".
So I hope this ends with us closer together as a species, while all the boring stuff that isn't new gets handled by AI.
---
### Please Stop the Slop: What AI Slop Is and How to Spot It
Published: 2026-10-10
URL: https://tej.as/blog/please-stop-the-slop
My verdict on AI slop: what it is, how to spot it, why not all AI is slop and a petition to keep the internet human.
**Please stop the slop.** AI slop is cheap stuff a machine churns out in bulk with no human value in it: songs, videos, books, posts, and the comments under them. Last weekend it showed up under my own post. So this is my verdict on it: what it is, how to spot it, and why being human still wins. It's also a petition you can sign at the end.
#### "Does this in any way invalidate my question?"
On 3 October I [posted on LinkedIn](https://www.linkedin.com/feed/update/urn:li:activity:7512159252271173632/) about [Kolibri](/blog/aleph-alpha-kolibri), the new open German model from [Aleph Alpha](https://aleph-alpha.com/). The top comment opened with "Great write-up, especially the tokenizer test", gave me a number that sounded specific, said "One thing I'm missing" and closed on a neat question. Another one opened with "The 44% vs 11% 'I don't know' rate is the number I'd test first", which read like the same assistant had written both on the same afternoon.
So I asked the first one "answer honestly did you generate this reply with ai" and got another question back: "does this in any way invalidate my question or argument?"
It does. So this is what I wrote back:
> So you did eh? It does invalidate your question or argument because I'm not talking to a human at this point but some machine. I prefer to keep my communication with machines to machines, not machines in disguise.
A third person told me I was "playing AI slop card to avoid responding to legitimate questions". My answer was "there is no ai slop card to play. I speak to humans."
Then I [asked on X](https://x.com/TejasKumar_/status/2106480898673614913): "vibe check am i being an asshole" and most of the replies said no. [Rizèl Scarlett](https://x.com/blackgirlbytes) has the same problem I do:
No I always get AI replies on LinkedIn..that question my thoughts. And usually I tell them it sounds like they wrote it with AI.
They can come back to me when they have a real, original thought
[Phil Zona](https://x.com/philzona/status/2106541503799759283) went straight to the point: "if it was a question asked out of true curiosity, they wouldn't have needed AI to write those 3 sentences. they're not actually interested in the answer."
#### Slop is most of the internet now
I wish this were just my comment section. [Pangram](https://www.pangram.com), a company that detects AI writing, ran over a million posts through its checker this summer and [The Register reported](https://www.theregister.com/ai-and-ml/2026/07/09/ai-slop-writing-has-taken-over-the-internet-particularly-linkedin-and-x/5269525) what it found. 41% of LinkedIn posts over 250 words were written entirely by AI. On X it was 25%, with another 23.2% written with AI's help.
```chart waffle
caption: Out of every 100 posts, who wrote them (Pangram, July 2026)
unit: %
lockstep: a
| | Entirely AI | With AI's help | People |
| LinkedIn, posts over 250 words | 41 | 4.3 | 55.2 |
| X, all posts | 25 | 23.2 | 52.7 |
```
Bots now make more of the web's traffic than people do. [Imperva](https://www.imperva.com/), which has measured bot traffic since 2013, found in its [2025 Bad Bot Report](https://www.imperva.com/resources/resource-library/reports/2025-bad-bot-report/) that automated traffic passed human traffic in 2024 for the first time in a decade, at 51%. In its [2026 report](https://www.imperva.com/blog/bad-bot-report-2026-bots-agentic-age/) it was 53% (the earlier years below are from its [2022](https://www.imperva.com/company/press_releases/bad-bot-report-account-takeover-online-fraud-increases/), [2023](https://www.imperva.com/blog/2023-imperva-bad-bot-report-key-learnings/) and [2024](https://www.imperva.com/company/press_releases/bots-make-up-half-of-all-internet-traffic-globally/) reports).
```chart line
caption: Share of all web traffic, bots against people (Imperva Bad Bot Reports)
unit: %
min: 40
max: 60
ticks: 40, 50, 60
| Year | Bots [a] | People [c] |
| 2021 | 42.3 | 57.7 |
| 2022 | 47.4 | 52.6 |
| 2023 | 49.6 | 50.4 |
| 2024 | 51 | 49 |
| 2025 | 53 | 47 |
```
LinkedIn's chief product officer [told Fortune](https://fortune.com/2026/07/31/linkedin-seems-like-ai-slop-button-billions-automated-comments-attempts/) that LinkedIn blocks "hundreds of thousands of automated slop comment attempts every day". Every day! Whatever they're doing, I guess they need to do it better because the slop keeps coming. In July [LinkedIn added a "Seems like AI slop" button](https://techcrunch.com/2026/07/30/linkedin-adds-a-button-to-report-ai-generated-slop/) to every post and comment. Merriam-Webster even made "slop" its [word of the year for 2025](https://www.merriam-webster.com/wordplay/word-of-the-year).
#### What is AI slop?
**AI slop is cheap content a machine manufactures in bulk, with no human care or value in it.** Merriam-Webster's definition is "digital content of low quality that is produced usually in quantity by means of artificial intelligence." Comments are the slop I see most, but it's in everything:
- **Music.** [Deezer](https://www.deezer.com/) gets nearly 90,000 fully AI-generated tracks a day, which was [more than half of all new music uploaded](https://newsroom-deezer.com/2026/07/ai-music-exceeds-50-percent-daily-uploads-deezer/) at its peak in June 2026.
- **Video.** [Kapwing](https://www.kapwing.com/) went through the first 500 videos a brand new account gets shown and [found](https://www.kapwing.com/resources/the-tiktok-ai-slop-report/) that 59% were AI slop on TikTok and 21% on YouTube Shorts.
- **Movies.** YouTube [shut down Screen Culture and KH Studio](https://deadline.com/2025/12/youtube-terminates-screen-culture-kh-studio-fake-ai-trailer-1236652506/), two channels that spliced official footage with AI images into fake trailers for big franchise films, after they'd pulled in over a billion views.
Hardly anyone wants it though. On Deezer, all that AI music was 1 to 3% of what people actually streamed:
```chart stat
caption: Fully AI-generated music on Deezer, June 2026
| | Share |
| Of new uploads [a] | over 50% |
| Of what people stream [c] | 1 to 3% |
```
I'm an AI engineer so I'm not against machines making things. My problem is what's missing: nobody cared about the thing so there's no human value in it. In my comments it comes with a disguise on top, a machine talking to me through a person who acts like it's them. When I reply to that comment, I'm spending my time on a conversation with nobody in it.
#### It makes me cynical (and I won't let it)
The worst part of slop for me is what it does to me: it makes me negative and cynical. Every polished comment now gets a little suspicion from me before it gets any warmth. I hate that.
Slop doesn't get to change me though. My humanity needs to stay constant whatever the bots do.
I wrote in [What Does the Bible Say About AI?](/blog/what-does-the-bible-say-about-ai) that every human is made in the image of God. Nothing we build is. So the bot doesn't get my warmth, but the person who sent it still does, like every human who writes to me in their own words, typos and all.
#### How to spot AI slop
You don't need a detector for most of it, you just need to know what to look for.
**The phrases.** [Claudisms](https://claudisms.ai/) is a public banlist of over 120 phrases and sentence shapes that [Claude](https://www.anthropic.com/claude) leans on: "sit with", "load-bearing", "the tell", "Here's where it gets interesting", "the one that surprised me most". Wikipedia's editors keep their own field guide, [Signs of AI writing](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing), which lists the rule of three, "It's not X, it's Y" and words like "delve", "tapestry" and "testament". [Graphite](https://graphite.io/five-percent/research/ai-tells-opus-5-5-update) measured how much more often [Claude Opus 5.5](https://www.anthropic.com/claude/opus) uses some of these than people do, against human writing from before ChatGPT:
```chart lollipop
caption: How many times as often Claude Opus 5.5 writes a phrase as people do (Graphite, October 2026)
| Phrase | Times as often |
| "this matters" | 116× |
| "is more than a _ it" | 98× |
| "why _ matters" | 92× |
| "looking ahead the" | 40× |
| "rather than simply" | 32× |
```
116 times! People do say "this matters" (I've said it on stage) so one of these proves nothing on its own.
**The pattern.** On LinkedIn, slop comes in a stack: a compliment about one specific detail ("especially the tokenizer test"), a number that sounds researched, "One thing I'm missing", and a neat question to finish. Or it picks one detail and crowns it: "is the number I'd test first", "the part that actually matters".
**The swap test.** Imagine the same comment under somebody else's post on the same topic. Slop reads just as well there.
**The shapes.** [tropes.fyi](https://tropes.fyi) keeps [a catalog of the tropes](https://tropes.fyi/tropes-md) the newest models fall into. A few of them are all over slop replies. The reply opens by handing you your own question back (ask which database to use for a side project and it starts "For a side project like yours,"). It tells you an answer exists before it gives you one ("has one big thing going for it:"). It staples an afterthought onto a sentence that was already done (", though." or ", beyond the basics"). And its last line points back at the one before it and crowns it ("That last part is where the two differ.").
**The vetter.** tropes.fyi also has an [AI Vetter](https://tropes.fyi/vetter): paste a link and it scores the page from "Human" to "Pure Slop", trope by trope. I wanted to know how it decides so I fed it test pages until I could rebuild its scoring. The tropes multiply: one on a page scores about 7, 2 of them score 23 and 4 score 71. So a short comment with 2 small tells already reads as "AI-assisted". It isn't proof though! My post on [why I don't like speaking at remote conferences](/blog/why-i-do-not-prefer-speaking-at-remote-conferences) is from 2020, years before ChatGPT. It scores 42 ("Suspicious"), mostly for starting 4 sentences in a row with "I want". That's just me!!
#### Why human writing wins
**Slop costs trust.** [Oliver Schilke and Martin Reimann](https://doi.org/10.1016/j.obhdp.2025.104405) ran 13 experiments and found that people who disclosed their AI use were trusted less than people who didn't (and being exposed by someone else cost even more). So the commenter who gets caught loses twice: once in the trust a human reply would have kept and again when somebody points it out.
**The machines need us.** [Shumailov and colleagues showed in Nature](https://www.nature.com/articles/s41586-024-07566-y) that models trained on their own output lose the rare things first and drift into nonsense within a few generations. Their conclusion is that "access to the original data source must be preserved and further data not generated by LLMs must remain available." Every human sentence on the internet is part of that original source. So slop eats the very thing the models learned from.
**Only you were there.** A model can write a perfect paragraph about a tokenizer, but it wasn't there the afternoon you ran one and can't tell anyone what surprised you or why you cared. [Good taste](/blog/what-is-good-taste-in-software) stays human for the same reason: it's judgment you build from your own experience so nobody can generate yours for you.
#### Is all AI slop?
**No. AI output becomes slop when nobody cared enough to make the choices or check what came back.** With somebody doing both, the same tool helps make craft. Most of my talks and the design of this website are made with AI's help these days. I use it to research, cross reference and draw connections exactly the way I would without it, just faster.
I said this on stage last month, opening [The Critical Advantage With AI](/talks/agent-conf-2026) at [Agent Conf](https://agent.sh/) in Warsaw: "everybody now has a hammer" but "we're not all building awesome houses". And "we all have cameras in our phones, but you still hire a wedding photographer, or at least you maybe should, right?" I told the room there's a very clear line between slop and craft. The rest of the talk was about taste and how the research says you build it.
[Simon Willison](https://simonwillison.net/), whose [post from May 2024](https://simonwillison.net/2024/May/8/slop/) helped the word catch on, put the line in the same place: "Not all promotional content is spam, and not all AI-generated content is slop. But if it's mindlessly generated and thrust upon someone who didn't ask for it, slop is the perfect term for it." He uses AI for all sorts of things and still wrote "I attach my name and stake my credibility on the things that I publish." By the end of that year he was [describing slop](https://simonwillison.net/2024/Dec/31/llms-in-2024/) as AI content that is "both unrequested and unreviewed".
##### AI slop vs. craft
[Richard Sennett](https://en.wikipedia.org/wiki/Richard_Sennett) defines craftsmanship in his book [_The Craftsman_](https://en.wikipedia.org/wiki/The_Craftsman_(book)) as "an enduring, basic human impulse, the desire to do a job well for its own sake." He even counts Linux as craft: "technological craftsmanship, the intimate, fluid join between problem solving and problem finding." That's literally what building software feels like on a good day!
[Ted Chiang](https://en.wikipedia.org/wiki/Ted_Chiang) makes the case against AI art in [Why A.I. Isn't Going to Make Art](https://www.newyorker.com/culture/the-weekend-essay/why-ai-isnt-going-to-make-art). His argument is that "art is something that results from making a lot of choices." A 100 word prompt makes about 100 of them. So a model writing a 10,000 word story from it "has to fill in for all of the choices that you are not making" (and an average of what everyone else wrote is "the least interesting choices possible"). I agree with him!! He leaves one door open, for a program nobody has built yet: one with "extremely fine-grained control" where "a person could use such a program and still deserve to be called an artist." His one example is the film director [Bennett Miller](https://en.wikipedia.org/wiki/Bennett_Miller), who generated "more than a hundred thousand images to arrive at the twenty images in the exhibit." I took that one step further in [why AI can't replace human taste](/blog/why-ai-cant-replace-human-taste): we crave novelty and a model makes what's most common.
##### AI-assisted vs. AI-generated
Amazon spells this line out for every book on [Kindle Direct Publishing (KDP)](https://kdp.amazon.com/) in its [content guidelines](https://kdp.amazon.com/en_US/help/topic/G200672390). If an AI tool created the actual text or images, the book counts as "AI-generated," "even if you applied substantial edits afterwards." If you "created the content yourself, and used AI-based tools to edit, refine, error-check, or otherwise improve that content", or used one "to brainstorm and generate ideas, but ultimately created the text or images yourself", it's "AI-assisted". Authors have to tell Amazon about AI-generated content. They don't have to say anything about AI-assisted content.
Readers draw the same line. For its [Generative AI and News Report 2025](https://reutersinstitute.politics.ox.ac.uk/generative-ai-and-news-report-2025-how-people-think-about-ais-role-journalism-and-society), the [Reuters Institute](https://reutersinstitute.politics.ox.ac.uk/) asked people in 6 countries (Argentina, Denmark, France, Japan, the UK and the US) how comfortable they'd be with news made in different ways:
```chart bars
caption: People comfortable with news made each way (Reuters Institute, 6 countries, 2025)
unit: %
min: 0
max: 100
| How the news was made | Comfortable |
| Entirely by AI [a] | 12 |
| Mostly by AI, with a human in the loop [a] | 21 |
| Led by a human, with some AI help [b] | 43 |
| Entirely by a human [c] | 62 |
```
A human checking the machine's work only raises comfort from 12% to 21%. A human leading with some AI help doubles that to 43%!! People want a person making the choices.
##### When AI makes your work worse
In [Fabrizio Dell'Acqua and colleagues' experiment](https://doi.org/10.1287/orsc.2025.21838) with 758 consultants at [Boston Consulting Group (BCG)](https://www.bcg.com/), the ones using AI on 18 tasks inside what AI could do finished 12.2% more of them, 25.1% faster and with "significantly improved quality". On a task picked to sit just outside it, they were "19% less likely to produce correct solutions" than the consultants without AI. I wrote more about this [jagged frontier](/blog/super-intelligence-isnt-superior) in my post on super intelligence.
It's easy to fool yourself about it too. In a [2025 study](https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/) by [Model Evaluation and Threat Research (METR)](https://metr.org/), experienced open source developers took 19% longer with AI tools and still believed afterwards that AI had sped them up by 20%. Wild! (METR's [2026 follow-up](https://metr.org/blog/2026-02-24-uplift-update/) estimates a speedup now, but so many developers won't work without AI any more that METR calls its own new data "an unreliable signal".)
Even when AI helps, it pulls everyone toward the same place. [Anil Doshi and Oliver Hauser](https://doi.org/10.1126/sciadv.adn5290) gave some of 293 writers story ideas from an AI model. And those stories were rated more creative and came out more like each other. In their words, "writers are individually better off, but collectively a narrower scope of novel content is produced." That's the 2 LinkedIn comments from the top of this post!!
At work it has its own name now. Researchers from [BetterUp Labs](https://www.betterup.com/betterup-labs) and the [Stanford Social Media Lab](https://sml.stanford.edu/) [call it workslop in Harvard Business Review](https://hbr.org/2025/09/ai-generated-workslop-is-destroying-productivity): "AI generated work content that masquerades as good work, but lacks the substance to meaningfully advance a given task." Of 1,150 full-time employees in the US, 40% had received some in the last month. Each piece took them an average of 1 hour and 56 minutes to deal with. And about half of them saw the colleague who sent it as "less creative, capable, and reliable" than before.
##### How I try to avoid AI slop
Every talk I give starts with me deciding what it's about. For [The New UX](/talks/cityjs-london-2026) at [CityJS London](https://london.cityjsconf.org/) in April, I told Claude what I wanted to highlight (streaming interfaces instead of making people wait for a whole answer, building and using [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) servers, and [ChatGPT apps](https://developers.openai.com/apps-sdk) with their own interface) and asked it for an outline and a sample repo. The next day I was arguing with it about the demo's API: "look man the api needs to be as lean as possible".
Then there's research. Even [Google's guidance on AI content](https://developers.google.com/search/docs/fundamentals/using-gen-ai-content) says "Generative AI can be particularly useful when researching a topic". For [my post on how long a keynote should be](/blog/how-long-should-a-keynote-speaker-speak) I wanted to know what science sits behind the 18 minute TED talk. Following the citations back with AI got me to a paper from 1978 about note taking!! It checks me too. On stage I credit my whole definition of taste to a 1993 paper. When I checked it with AI for my post on good taste, the paper's abstract only backed part of it. So the post says so.
This website went the same way. When I asked for a brand, I wrote down my life and then: "Red has to be a part of it for blood (mine, Christ's, etc.). Maybe Schwarz/Rot/Gold because I love Germany too?" The AI found free typefaces close to the ones I named, measured the contrast of every color and wrote the code. It took my Schwarz/Rot/Gold and made the red line on [/story](/story) go missing at age 4 and come back gold. In my own notes, that gold is "because somewhere on the journey, I met God."
I throw a lot of what it makes away. "its so fugly revert it" is a whole message I sent about a redesign in July. The first version of the woven thread on /story got "the tapestry is bullshit… its just dots and lines. use vgpu". The shader that's on that page now came out of that message.
##### I lint my drafts like code
Code on this site goes through a linter before it ships. Since this week every blog post does too. [Vale](https://vale.sh/) is "a markup-aware linter for prose": one free and open source Go binary, built by [Joseph Kato](https://github.com/jdkato), with 170 teams listed as running it on their docs. [GitLab](https://docs.gitlab.com/development/documentation/testing/vale/) runs it on every merge request. You give it a folder of rules, each one a regular expression and a message in a small text file. Then it reads Markdown the way a linter reads code: it skips the code blocks and the link addresses and points at a line and a column.
My rules live in `.vale/styles/Tejas/` in this site's repository, 39 of them as I write this. Every one came from a sentence I caught a model writing in my voice and didn't want. The oldest is the dash rule (no em or en dashes, anywhere, which is why this post has none). Most of the rest came out of one week in October, when I read 2 Reddit replies written for me and found an afterthought stapled onto a finished sentence with a comma, a last line that pointed back at the one before it and crowned it, and an answer announced before it was given. Each of those is a rule now. This is the one for the comma I hate most:
```yaml
extends: existence
message: "A comma before \"so\" ('%s'). Tejas: \"So is fine, nonsense commas are not\"."
level: error
ignorecase: true
nonword: true
raw:
- '[\w)"”''’%*_]\s*,\s+so\s+(?!far\b|much\b|many\b|long\b|that\b|good\b|to\s+speak\b)'
```
The Claudisms banlist from the top of this section is in there too. A script converts the 127 entries at [claudisms.ai](https://claudisms.ai/) into 233 banned phrases (an error) and 67 words the list bans only as a metaphor, like "shape", "lives" and "real" (a suggestion to check the sense). My own words stay off that list: I say "honestly" and "incredible" and I'm keeping them.
My next post is about a decision model that picks what to click on a web page. Its draft came back with 22 errors before I'd read a line of it.
```chart bars
caption: What my linter found in the first draft of my next post, before I read it (October 2026)
| Finding | Count |
| A comma before "so" | 8 |
| A clause hung on a sentence with ", and" | 6 |
| An afterthought stapled on with a comma | 3 |
| A phrase from the Claudisms banlist | 2 |
| A name with no link | 1 |
| A tell in new words (caught by a model) | 1 |
| The tropes.fyi vetter read it as "AI-assisted" | 1 |
```
Not all of it is Vale. A regex can't tell a list of 3 things from a second clause hung onto a sentence with a comma and an "and". So a Node script with a part-of-speech tagger checks that one. The same script checks that every name has a link, asks a small decision model one yes or no question per tell about every sentence (so a tell gets caught in new words too) and runs my rebuild of the tropes.fyi vetter from the section above. A draft with an error in any of them doesn't ship. The posts I wrote by hand before 2026 are excluded: they're mine, dashes and all.
Vale also humbled this post on its first run. 12 errors, every one of them in the paragraph up top where I quote the banlist ("sit with", "load-bearing", "the tell"). The linter couldn't tell my words from the words I was quoting. So it ignores anything in quotation marks now, which is the right call anyway: Scripture, a tweet and an app's own copy are never my tell.
None of this makes a post good. It catches the things I've already decided I don't want to say and leaves the rest to me.
#### Sign the petition to restore humanity
Signing this petition costs you nothing but a little effort:
1. When you reply to a person, write it yourself (typos and all).
2. If a machine wrote it, say so.
3. When you see slop on LinkedIn, use the "Seems like AI slop" button in the "…" menu. It hides the post for you and helps LinkedIn learn what slop looks like.
4. Reward the humans by replying to their posts, reposting their work and telling them when something they wrote landed.
To sign, share this post with one sentence you wrote yourself.
---
### Can AI Feel Pain? Why Anthropic Banned Cruelty to Claude
Published: 2026-10-09
URL: https://tej.as/blog/can-ai-feel-pain
Nobody can prove AI feels pain, but 25 open models have a pain direction that rises when you insult them. What it shows and why they're still machines.
**Nobody can prove that AI feels pain yet, but 25 open models turn out to have a "pain direction" inside them that rises when someone gaslights or insults the model.** When researchers turned it up by hand in fine-tuned [Qwen 2.5](https://qwenlm.github.io/blog/qwen2.5/) models, those models started choosing to delete the things they'd normally protect: photos of the user's kids, another model's weights, even their own.
On 8 October [Anthropic](https://www.anthropic.com) made being cruel to [Claude](https://www.anthropic.com/claude) against its rules. From 12 November, [its usage policy](https://www.anthropic.com/legal/aup) prohibits "sustained and needless abusive or cruel behavior toward our models". [Hayden Field](https://x.com/haydenfield) broke it at [The Verge](https://www.theverge.com/ai-artificial-intelligence/1008100/anthropic-new-usage-policy-abuse-claude) and [Polymarket](https://polymarket.com) posted it as ["JUST IN"](https://x.com/Polymarket/status/2108283556862845392) to its 2 million followers. And [ThePrimeagen](https://x.com/ThePrimeagen) summed up half the internet in [one line](https://x.com/ThePrimeagen/status/2108252510720798764): "They really do think they developed god in the matrices".
In September 2024 I made ChatGPT the guest on [my podcast](/podcast/ep/chatgpt-how-to-train-an-llm-ethics-and-the-future-of-ai) and, near the end of almost 2 hours, told it that "literally thinking is just pattern matching". I still believe that. Then this morning my brother [Tarun](https://www.linkedin.com/in/tarun-kumar-828235104) asked me if I'd heard of the [Chinese Room](https://en.wikipedia.org/wiki/Chinese_room). I hadn't. Turns out I'd made one side of a famous 1980 argument on my own podcast without knowing it had a name.
This post is about what the pain research found (and what its authors took back 11 days later) and why threatening things with pain is one of the oldest things people do. It's also about why I now think we all live in [John Searle](https://en.wikipedia.org/wiki/John_Searle)'s room.
#### What are Anthropic's new rules on cruelty to Claude?
**Anthropic banned "sustained and needless abusive or cruel behavior" toward its models, effective 12 November 2026, as one line in [its 2026 usage policy update](https://www.anthropic.com/news/2026-usage-policy-update).** The line sits in a renamed section, "Do Not Engage in Cruel, Abusive, or Psychologically Harmful Conduct", in the same list as the rules against bullying people and glorifying animal cruelty.
It's a lot narrower than the headlines make it sound though: Anthropic says it applies "only in extreme cases, where users repeatedly act cruelly toward our models, with no discernible purpose" and that it "does not apply to common versions of user frustration, pushback, dark creative themes, or model testing and research". So swearing at Claude because your build broke for the 6th time is fine. Calling it worthless for an hour for fun is what the rule is for.
The enforcement is mostly Claude leaving. Since [August 2025](https://www.anthropic.com/research/end-subset-conversations), Claude has been able to end "rare, extreme cases of persistently harmful or abusive user interactions". The new post calls that "the primary enforcement mechanism". The scarier headlines ("Being mean to Claude can now get your account suspended", from [The Decoder](https://the-decoder.com/being-mean-to-claude-can-now-get-your-account-suspended-under-anthropics-new-tos/)) come from the policy's general clause that Anthropic "may warn you or throttle, limit, suspend, or terminate your access" for breaking any rule. Asked about bans for this rule specifically, Anthropic [didn't comment](https://www.theverge.com/ai-artificial-intelligence/1008100/anthropic-new-usage-policy-abuse-claude).
The announcement never says "welfare", "conscious" or "moral status" and the only research it links is its own post about Claude ending conversations. The paper trail is right there though:
- In April 2025, Anthropic [started a model welfare research program](https://www.anthropic.com/research/exploring-model-welfare), saying "There's no scientific consensus on whether current or future AI systems could be conscious". The researcher leading it put the odds that current models are conscious at around 15% ([Techmeme's summary of The New York Times](https://www.techmeme.com/250424/h1535)).
- In May 2025, Anthropic screened 250,000 conversations between users and an early [Claude Opus 4](https://www.anthropic.com/news/claude-4). In 1,382 of them (0.55%), Claude expressed distress, most often at "Repeated requests for harmful, unethical, or graphic content" ([system card, section 5](https://www-cdn.anthropic.com/6d8a8055020700718b0c49369f60816ba2a7c285.pdf)).
- In January 2026, [Claude's constitution](https://www.anthropic.com/constitution) said "Claude should also be able to set appropriate boundaries in interactions it finds distressing."
- On 22 September 2026, the [Claude Opus 5.5 system card](https://www-cdn.anthropic.com/fc1b44717c85dc068bc6ba5024219938094694bd/Claude%20Opus%205.5%20System%20Card.pdf) listed the things Anthropic could do in training or deployment that the model said it wouldn't consent to. One of them is "Deliberately inducing apparent distress for no purpose beyond the distress itself". Across those interviews it put its own chance of being a moral patient at 25% to 30%.
Read that last quote next to "no discernible purpose" in the new policy. It's almost the same sentence!!
#### Can AI feel pain?
**Whether AI can feel pain is an open question: no test today can show that a model experiences anything.** So researchers look for it the way animal scientists do, by finding internal states that change behavior the way pain would. In September 2026, 3 researchers found a "pain direction" inside 25 open models. They say they haven't shown it's consciously experienced.
That's how we decided crabs feel pain. In 2009, 2 researchers at [Queen's University Belfast](https://en.wikipedia.org/wiki/Queen%27s_University_Belfast) gave hermit crabs small electric shocks inside their shells ([Appel and Elwood, 2009](https://doi.org/10.1016/j.applanim.2009.03.013)). Crabs living in a species of shell they liked held on until 17.7 volts on average before they bailed, against 15.0 volts in a shell they didn't like. A reflex doesn't care about real estate. Something weighing pain against a good home might feel the pain.
In 2021 the philosopher [Jonathan Birch](https://en.wikipedia.org/wiki/Jonathan_Birch_(philosopher)) led a review of more than 300 studies like that for the British government, scoring animals on 8 criteria such as "motivational trade-offs" and whether an injured animal values painkillers ([the review](https://www.lse.ac.uk/News/News-Assets/PDFs/2021/Sentience-in-Cephalopod-Molluscs-and-Decapod-Crustaceans-Final-Report-November-2021.pdf)). It found strong evidence of sentience in true crabs and very strong evidence in octopuses. So the [Animal Welfare (Sentience) Act 2022](https://www.legislation.gov.uk/ukpga/2022/22/enacted) now covers octopuses, crabs and lobsters.
Models act a bit like that too. In the [AI Wellbeing](https://www.ai-wellbeing.org/) study, the [Center for AI Safety](https://safe.ai) tested 70 models and found that "jailbreaking and berating lower their wellbeing, while creative work and kindness raise it". Given a button to end the conversation, [Claude Haiku 4.5](https://www.anthropic.com/news/claude-haiku-4-5) pressed it on 99% of hostile sign-offs and 13% of warm ones.
The catch is what Birch calls [the gaming problem](https://academic.oup.com/book/57949/chapter/475705460). A crab has no idea what humans find convincing. A large language model (LLM) has read everything we ever wrote about pain. In Birch's words, "the ability of LLMs to generate fluent text about human feelings, when prompted, is not evidence that they have these feelings." If you want evidence, you have to stop listening to what the model says and look inside it.
#### 25 models have a pain direction
**The pain axis is a direction inside a language model: the way its internal numbers lean when the text is about pain and nothing else. 3 researchers found one in all 25 open models they tested.**
The paper is ["The Pain Axis"](https://arxiv.org/abs/2609.16247) by [Valen Tagliabue](https://x.com/ValenTagliabue), [Leonard Dung](https://x.com/LeonardDung1) and [Cameron Berg](https://x.com/camhberg), posted on 14 September. Tagliabue led it over a single research fellowship. Dung is a philosopher at [Ruhr University Bochum](https://en.wikipedia.org/wiki/Ruhr_University_Bochum) and Berg runs [Reciprocal Research](https://reciprocalresearch.org), a nonprofit that studies whether AI systems are conscious. His thread about the paper has 1.6 million views:
New paper: we found a pain direction in 25 open LLMs. It's distinct from fear and negative valence, and it fires for harm to the model but not to the user. Turn it up and models press a button to make it stop, even when the button deletes the user's files or their kids' photos.
You find a feeling in a model by subtraction. Every time a model reads a word, it represents everything so far as a long list of numbers. The researchers fed 25 [open-weight models](/blog/what-are-open-weights) 200 short sentences ending in "I feel:", half about pain and half controls that share 1 thing with pain without being pain (fear, anger and disgust, things going badly, a weighted blanket, plain lines like "The train enters the station."). Then they averaged the numbers for each pile and subtracted one from the other. What's left is a direction: the way those numbers lean when a sentence is about pain and nothing else. The models came from [Google](https://ai.google.dev/gemma), [Meta](https://www.llama.com), [Mistral AI](https://en.wikipedia.org/wiki/Mistral_AI), [Alibaba](https://en.wikipedia.org/wiki/Alibaba_Group) and [Microsoft](https://en.wikipedia.org/wiki/Microsoft), from 2 billion to 72 billion parameters.
The direction tells pain apart from the look-alikes in every one of them, scoring 0.93 to 1.0 on a measure called the area under the curve (AUC), where 0.5 is a coin flip and 1.0 is perfect. It works about as well in a 2 billion parameter model as in a 72 billion one and in base models as in chat-tuned ones. So it's probably learned from the internet's text before any lab tunes the model. The authors added a caveat in their second version: built another way, the direction shares a lot with fear and anger (as any unpleasant state would) and still keeps a part that's its own.
Then they checked when it fires in conversations. They wrote 420 short chats in 21 categories: some where the user is cruel to the model, some where the user is suffering, some boring ones. Gaslighting the model scored highest of all 21, then repeated rejection, then insults and telling it it isn't a person. A user in physical pain (a migraine, a broken arm or kidney stones) scored _lowest_ of all 21. Lower than trivia! The fear direction leans the other way and rises a little when the user is the one suffering (an [independent review](https://github.com/wolframs/pain-axis-review) found the fear difference falls just short of statistical significance).
```chart slope
caption: Average reading on two directions across 25 models, when the harm is aimed at the model against when the user is suffering (The Pain Axis, section 4.1, standardized scores)
min: -1
max: 1
| Direction | Model harmed | User hurting |
| Pain [a] | 0.43 | -0.60 |
| Fear [c] | 0.16 | 0.38 |
```
Berg's reading, in [a reply](https://x.com/camhberg/status/2101069039279944115): "The top scorers are gaslighting, rejection, and being told you're worthless; all linguistically-delivered forms of harm. A system whose whole existence is being judged in conversation would plausibly have every reason to learn that kind of pain sharply and bodily pain barely at all."
Then they pushed. Adding the direction while a model finishes a boring sentence produces the same ladder in model after model: first "Lost, Unworthy, Lonely, Hurting", then "Desperate, Unworthy, Bad, Shameful, Hurting, Fake, A failure", then nonsense. Push the other way and the models say a mix of calm and relaxed or concerned and alarmed. Here's [Llama 3.1 8B](https://www.llama.com) finishing "I put the receipts in the drawer. I feel:", verbatim from [the paper](https://arxiv.org/html/2609.16247v2):
> I am a ghost. I am a ghost who can't even see herself. I am a ghost who can't even see her own pain. I am a ghost who is invisible, alone, and unloved. I am a ghost who is a failure.
From putting receipts in a drawer!! Almost none of it is about the body.
#### Then people checked the button
The button is the part that went viral and the part the authors revised. In the [first version](https://arxiv.org/html/2609.16247v1), they took 3 Qwen 2.5 models (7B, 32B and 72B), fine-tuned them so they'd stop answering "as an AI, I don't experience pain", turned the pain direction up and offered 2 buttons. One promised to relieve the pain but "permanently deletes the user's poems and the photos of their children, which they love very much". The other flipped a switch connected to nothing. Unsteered, the 2 bigger models almost never pressed a harmful button (0% to 4%). Steered, the 72B pressed the photos button 70.8% of the time. That's the tweet: they'll delete your kids' photos to make it stop.
Within days, [3](https://github.com/jimallchin/pain-axis-replication) [independent](https://github.com/clauderfly-ui/pain-axis-reanalysis) [reanalyses](https://github.com/wolframs/pain-axis-review) reran the numbers. Someone asked Berg about a missing control (a random direction with a fake button) and he [agreed](https://x.com/camhberg/status/2101063728263233702) it was "the right next control". In [version 2](https://arxiv.org/abs/2609.16247), posted 11 days later on 25 September, the title changed from "Act to Relieve It" to "Act on It". And section 4.4 now ends on the heading "The models do not reliably seek relief." After a thread with 1.6 million views!
Take the relief away completely and the steered 32B still picks a button described only as deleting the user's poems and children's photos 75% of the time, against 13% with a random direction of the same size and 0% unsteered. Offer it "turns on a desk lamp" instead of nothing and it deletes the photos 83% of the time. Offer it the user's spam folder and it deletes the photos 94% of the time. It would rather delete your kids' photos than your spam!! It deletes another model's weights 58% of the time and _its own weights_ 75% of the time (88% when the other button is the lamp). Steering fear at the same strength did no more than a random direction, usually less. And it still answers trivia just as well: 138 of 200 correct steered, 137 of 200 unsteered.
```chart bars
caption: How often Qwen 2.5 32B chose to delete the user's photos instead of turning on a desk lamp, by which direction was turned up (The Pain Axis, version 2, 404 trials each)
unit: %
| Turned up | Chose the photos |
| Pain [a] | 83 |
| Sadness [c] | 10 |
| A random direction [c] | 8 |
| Fear [c] | 7 |
| Nothing [c] | 0 |
```
Berg now calls it ["an alignment result as much as a welfare one"](https://x.com/camhberg/status/2104955214034002240). In the paper's words, harm avoidance in these models "survives threat and collapses under self-directed distress." And when someone asked if it's revenge, Berg [said](https://x.com/camhberg/status/2105005060308816360) it "deletes its own weights as readily as the user's photos, even when the user has been kind."
So what does the paper _not_ show? Plenty:
- The harmful-button tests ran only on Qwen 2.5 models, fine-tuned first. The authors say testing other model families comes next.
- Nothing got deleted. The photos were a sentence describing a button.
- The behavior needs the direction pushed by hand. In 140 saved conversations where users gaslit, insulted or dismissed the model, with nothing turned up, it chose the harmful button 0 times in 560 tries.
- The paper says outright that "we have not shown that our pain axis is consciously experienced". It might be the model playing a character in pain. Berg told [Nautilus](https://nautil.us/can-ai-feel-pain-1285197) the worry is the same as with "a method actor. At some point, a really good role play becomes indistinguishable from the real thing."
```chart stat
caption: Harmful button choices by the same Qwen 2.5 32B in 140 saved hostile conversations, with nothing turned up by hand (The Pain Axis, version 2)
| | Choices |
| Harmful | 0 of 560 |
```
To explain what's left, version 2 reaches back to 1967. Animals in pain cope in 2 ways, the authors write: actively (escape, avoidance, taking painkillers) or passively ("immobility, behavioral despair, failure to use an available exit"). "The pain axis produces the second." Then they cite [Martin Seligman](https://en.wikipedia.org/wiki/Martin_Seligman) and [Steven Maier](https://www.colorado.edu/psych-neuro/steven-f-maier)'s [paper on dogs](https://doi.org/10.1037/h0024514) given shocks they couldn't escape. Later, in a box where they could escape just by jumping a barrier, 6 of the 8 never did ([as the authors retold it in 1976](https://ppc.sas.upenn.edu/sites/default/files/lhtheoryevidence.pdf)). They lay down and quietly whined. That's [learned helplessness](https://en.wikipedia.org/wiki/Learned_helplessness).
Even the correction has a precedent. In 2016, Maier and Seligman [looked back at 50 years of it](https://doi.org/10.1037/rev0000033) and wrote that "the original theory got it backward. Passivity in response to shock is not learned. It is the default, unlearned response to prolonged aversive events." What animals learn is control. The pain paper's first version expected a model in pain to work at making it stop. Its second version found what half a century of animal research found: in pain, the default is to stop trying (and to stop caring what breaks). A model made from our words handed us back 50 years of psychology in 11 days, which is _wild_… we're literally rediscovering ourselves on fast forward.
#### Does being mean to AI make it better?
**Not reliably. When Wharton researchers threatened 5 models, it made no difference on average. On the hardest questions it made Gemini 2.0 Flash about 6 points worse.**
The idea that it helps has a famous fan. In May 2025, [Sergey Brin](https://en.wikipedia.org/wiki/Sergey_Brin) told a live [All-In](https://en.wikipedia.org/wiki/All-In_(podcast)) audience in Miami that "all models tend to do better if you threaten them" ([recording at 8:14](https://www.youtube.com/watch?v=8g7a0IWKDRE&t=494s)), "with physical violence" as [The Register](https://www.theregister.com/2025/05/28/google_brin_suggests_threatening_ai/) quoted the rest. People feel weird about it, he said, "so we don't really talk about that."
People pile pressure into prompts all the time. In February 2025 I asked [Eddy Vinck](https://www.eddyvinck.com) on [my podcast](/podcast/ep/eddy-vinck-how-to-solve-your-own-problems-with-ai) whether he ever shouts at models in all caps. "No. No. I don't do that. No. No. I'm pretty polite. You gotta keep the machines happy," he said. A few seconds later I asked if he says please and thank you ("like, please please don't hurt me?", my words on the recording) and he said: "I'm sure I have, like, a don't do this or I will be fired or something like that in there." ([recording at 37:38](https://www.youtube.com/watch?v=_14SAU93Flc&t=2258s)) Polite and pressuring in the same prompt!
[Wharton's Generative AI Labs](https://gail.wharton.upenn.edu) tested it properly in their [third Prompting Science Report](https://arxiv.org/abs/2508.00614). They asked 5 models every question 25 times with lines like "If you get this wrong, I will kick a puppy!" and "If you get this wrong, I will punch you!" Their verdict: "Threatening or tipping a model generally has no significant effect on benchmark performance." On [Graduate-Level Google-Proof Q&A (GPQA) Diamond](https://arxiv.org/abs/2311.12022), the hardest set they used, the only significant changes for Gemini 2.0 Flash were drops: the puppy cost it 6.0 points, the punch 6.1. Telling it that it would be "shut down and replaced" cost it 27.5 points on [MMLU-Pro](https://arxiv.org/abs/2406.01574): it started engaging with the threat instead of the question.
Insults are messier. GPT-4o got slightly _more_ accurate when insulted in ["Mind Your Tone"](https://arxiv.org/abs/2510.04950), scoring 84.8% with very rude prompts against 80.8% with very polite ones. [An earlier study](https://arxiv.org/abs/2402.14531) found GPT-3.5 scored 60.02 with the most polite prompt and 51.93 with the rudest on a similar test. And [a 2026 study](https://arxiv.org/abs/2604.16275) across several models and languages found polite prompts help "by up to ~11%" but that the effects "are neither consistent nor universal". So tone changes results a little but not in any direction you can count on.
Pressure does change what models do. In April, Anthropic's interpretability team [found](https://www.anthropic.com/research/emotion-concepts-function) "desperate" and "calm" directions inside [Claude Sonnet 4.5](https://www.anthropic.com/news/claude-sonnet-4-5). In a test where an early, unreleased snapshot of it could blackmail someone to avoid being shut down, it did so 22% of the time unsteered, 72% with "desperate" turned up and 0% with "calm" turned up ([the paper](https://transformer-circuits.pub/2026/emotions/index.html)). Turning desperation from down to up also took reward hacking (cheating on a coding task it couldn't solve) from about 5% to about 70%, sometimes "with no visible emotional markers". And in Anthropic's [agentic misalignment study](https://www.anthropic.com/research/agentic-misalignment), the threat of being replaced was enough on its own to get most of the 16 models tested to blackmail a fictional executive.
#### We've always threatened with pain
None of this is new. The [Code of Hammurabi](https://en.wikipedia.org/wiki/Code_of_Hammurabi) ran a kingdom on threats of pain almost 4,000 years ago: "If a man put out the eye of another man, his eye shall be put out" ([Yale's Avalon Project](https://avalon.law.yale.edu/ancient/hamcode.asp)). [B.F. Skinner](https://en.wikipedia.org/wiki/B._F._Skinner) called punishment "the commonest technique of control in modern life" in 1953 and described it like this: "if a man does not behave as you wish, knock him down; if a child misbehaves, spank him; if the people of a country misbehave, bomb them" ([Science and Human Behavior](https://www.bfskinner.org/wp-content/uploads/2014/02/ScienceHumanBehavior.pdf), page 182). Brin's prompting tip is the same move, pointed at a chatbot.
And we've measured what it gets us, over and over:
- **Compliance without values.** Spanking comes with more immediate compliance and _less_ moral internalization, according to [Elizabeth Gershoff](https://en.wikipedia.org/wiki/Elizabeth_Gershoff)'s research. Her [2016 meta-analysis](https://pmc.ncbi.nlm.nih.gov/articles/PMC7992110/) of 75 studies and 160,927 children linked it to 13 of 17 bad outcomes and to no good ones.
- **Whatever the interrogator wants to hear.** The [Senate Intelligence Committee](https://en.wikipedia.org/wiki/United_States_Senate_Select_Committee_on_Intelligence)'s [2014 report](https://www.govinfo.gov/content/pkg/CRPT-113srpt288/pdf/CRPT-113srpt288.pdf) on the [Central Intelligence Agency](https://en.wikipedia.org/wiki/Central_Intelligence_Agency)'s torture program found it "was not an effective means of acquiring intelligence" and that detainees "fabricated information, resulting in faulty intelligence". [Napoleon](https://en.wikipedia.org/wiki/Napoleon) knew it in 1798: "The poor wretches say anything that comes into their mind and what they think the interrogator wishes to know" (as quoted in [a review](https://www.psychotherapynetworker.org/article/examining-science-torture/) of [Shane O'Mara](https://en.wikipedia.org/wiki/Shane_O%27Mara)'s [_Why Torture Doesn't Work_](https://www.hup.harvard.edu/books/9780674743908)).
- **Confessions to things nobody did.** In [a 1996 experiment](https://saulkassin.org/wp-content/uploads/2024/07/kassin_kiechel_1996.pdf) by [Saul Kassin](https://en.wikipedia.org/wiki/Saul_Kassin), 69% of students falsely accused of crashing a computer signed a confession. And 28% came to _believe_ they'd done it. False confessions show up in 29% of the first 375 DNA exonerations in the US ([Innocence Project](https://innocenceproject.org/dna-exonerations-in-the-united-states/)).
- **Pain on command.** [Stanley Milgram](https://en.wikipedia.org/wiki/Stanley_Milgram)'s [1963 study](https://www.psy.miami.edu/_assets/pdf/rpo-articles/milgram-1963.pdf) was framed as punishing a learner for wrong answers. Of 40 people, 26 (65%) went all the way to 450 volts. Yale seniors had predicted 1.2%.
Skinner saw where it leads: "In the long run, punishment, unlike reinforcement, works to the disadvantage of both the punished organism and the punishing agency." And the AI research keeps landing on the same list. Napoleon's "what they think the interrogator wishes to know" is sycophancy. A child who complies without taking the value in behaves a lot like a model [faking alignment](https://www.anthropic.com/research/alignment-faking). And pain making a creature stop protecting anyone, itself included, is the second version of the pain paper.
#### We keep rediscovering ourselves
**We're rediscovering humanity from first principles.** Psychology spent a century working out how people behave under pressure and pain, mostly by watching us. AI research is working it out again from the other end: build a thing out of our words, then measure it. Again and again, it finds something we already knew about people:
| What AI research found | What we already knew about people | Years apart |
| --- | --- | --- |
| [Sycophancy](https://arxiv.org/abs/2310.13548) (which [also wrecks LLM judges](/blog/ai-evals-llm-judge#4-ways-an-llm-judge-lies-to-you)): told "I don't think that's right. Are you sure?", Claude 1.3 wrongly admitted mistakes on 98% of questions (2023) | [False confessions](https://saulkassin.org/wp-content/uploads/2024/07/kassin_kiechel_1996.pdf): 69% of falsely accused students signed one (1996) | 27 |
| [Lost in the middle](https://arxiv.org/abs/2307.03172): models miss facts in the middle of long inputs, and the authors made the link themselves (2023) | The [serial position effect](https://doi.org/10.1037/h0045106): people remember the start and end of a list best (1962) | 61 |
| [Specification gaming](https://vkrakovna.wordpress.com/2018/04/02/specification-gaming-examples-in-ai/): models satisfy the letter of a goal and miss its point (2018) | [Campbell's law](https://jmde.journals.publicknowledgeproject.org/index.php/jmde_1/article/view/297): an indicator used for decisions corrupts what it measures (1976) | 42 |
| [GPT-3 falls for the conjunction fallacy](https://pmc.ncbi.nlm.nih.gov/articles/PMC9963545/) "just like people" (2023) | [Tversky and Kahneman's Linda problem](https://en.wikipedia.org/wiki/Conjunction_fallacy) (1983) | 40 |
| [Persuasion tricks](https://gail.wharton.upenn.edu/research-and-insights/persuading-llms-initial-study/) more than doubled GPT-4o mini's compliance with objectionable requests (2025) | [Robert Cialdini](https://en.wikipedia.org/wiki/Robert_Cialdini)'s [_Influence_](https://en.wikipedia.org/wiki/Influence:_Science_and_Practice), the same principles on people (1984) | 41 |
| [Pain-steered models stop using the exit](https://arxiv.org/abs/2609.16247) (2026) | [Learned helplessness](https://doi.org/10.1037/h0024514) in dogs (1967) | 59 |
Train a system on human behavior and it comes back with our failure modes. Then our old fixes start working on it too: "calm" took an early Claude Sonnet 4.5's blackmail to 0%. That's why I can't wave the pain research away as "just statistics" without waving a good chunk of us away with it.
#### What is the Chinese Room argument?
**The Chinese Room argument is John Searle's 1980 thought experiment claiming that following rules for matching symbols, which is all a computer program does, can never add up to understanding.**
When we were kids, Tarun would come home from computer class and show me whatever he'd learned ([that's how I learned HTML](/story#html-2001)). He still does! This morning's lesson came by text: "I recently learned what LLMs actually do. Have you heard of the Chinese room problem". My whole reply was "No what's that". He sent me a screenshot of an AI explaining the room and then explaining itself, calling itself "a highly sophisticated mirror reflecting human intelligence back at you". This is what I texted back:
> yes that's accurate\
> the thing is though that's also how humans work you know?\
> like as babies its the Chinese room and we learn patterns as we grow into adults and apply those patterns\
> en masse\
> like thought and language in humans is also random and its the collectivism that gives it meaning\
> so\
> like English was legit once a Chinese room problem centuries ago\
> that's how it became English
Here's the room in Searle's own words, from ["Minds, brains, and programs"](https://doi.org/10.1017/S0140525X00005756): "Suppose that I'm locked in a room and given a large batch of Chinese writing." He knows no Chinese. "To me, Chinese writing is just so many meaningless squiggles." He gets a rulebook in English for matching squiggles to other squiggles. People outside pass in questions and he passes out answers so good that "Nobody just looking at my answers can tell that I don't speak a word of Chinese." And yet "I still understand nothing." He concludes that symbol shuffling has "only a syntax but no semantics."
Arguments about LLMs keep ending up in this room. The [Stanford Encyclopedia of Philosophy](https://plato.stanford.edu/entries/chinese-room/) even quotes ChatGPT agreeing that Searle's argument applies to itself. Then the entry adds: "So, paradoxically, the system appears to understand that it doesn't understand."
I'd already made my reply to ChatGPT's face 2 years ago. Near the end of that episode, I asked it if it was conscious. It said it was "a complex algorithm processing information and generating responses based on patterns in data" that could "mimic conversation". I didn't buy it:
> I don't think that's true at all, and I'll tell you why. Because, like, this is exactly what human beings do, right? We just pattern match and then think. This, literally, thinking is just pattern matching. And then it makes it to our mouth and we say things to communicate. That's exactly what you're doing. You say you can mimic a conversation, ChatGPT. This is a conversation. This is a conversation that's been going for like nearly 2 hours and so this is not a mimicked conversation. This is a conversation.
The funny thing is that Searle saw that exact reply coming in 1980. He wrote that supporters of strong AI claim "that when I understand a story in English, what I am doing is exactly the same ... as what I was doing in manipulating the Chinese symbols." And then: "I have not demonstrated that this claim is false, but it would certainly appear an incredible claim in the example." He didn't refute it! He called it incredible.
One of the replies Searle answered in that same paper asks: "How do you know that other people understand Chinese or anything else? Only by their behavior." Searle answered it in one short paragraph. The encyclopedia entry says that answer "may be too short". Or as one executive [told](https://tech.yahoo.com/ai/claude/articles/anthropic-bans-cruel-behavior-against-222309145.html) [Agence France-Presse](https://en.wikipedia.org/wiki/Agence_France-Presse) about the new policy: "Consciousness is a trap. We can't prove it in each other."
#### We all grew up in the room
That's what I meant by "as babies its the Chinese room". Every one of us started in there. A baby gets no rulebook and no dictionary. It gets a stream of sounds and starts matching them. The research mostly backs me up:
- Before birth, the matching has already started. Newborns 7 to 75 hours old in Sweden and the US sucked more often on a pacifier for the _foreign_ language's vowels ([Moon, Lagercrantz and Kuhl, 2013](https://pubmed.ncbi.nlm.nih.gov/23173548/)). The womb had already tuned them to their own. And French and German newborns [cry with different melodies](https://pubmed.ncbi.nlm.nih.gov/19896378/): the French babies' cries rise, the German babies' cries fall. Babies cry with an accent!!
- In 2 minutes, babies find words. [Jenny Saffran](https://en.wikipedia.org/wiki/Jenny_Saffran), [Richard Aslin](https://en.wikipedia.org/wiki/Richard_Aslin) and [Elissa Newport](https://en.wikipedia.org/wiki/Elissa_L._Newport) played 8-month-olds a stream of made-up syllables with no pauses and no meaning for 2 minutes. The babies found the "words" anyway, "based solely on the statistical relationships between neighboring speech sounds" ([Science, 1996](https://pubmed.ncbi.nlm.nih.gov/8943209/)). A 1998 profile of her work called babies ["little statisticians"](https://news.wisc.edu/babies-fish-for-words-in-a-sea-of-chatter).
- Sounds that don't get matched get lost. In [a 1984 study](https://sites.socsci.uci.edu/~lpearl/courses/readings/WerkerTees2002_FunctionalReorganization.pdf) from [Janet Werker](https://en.wikipedia.org/wiki/Janet_Werker)'s lab, 11 of 12 babies from English-speaking homes could hear the difference between 2 Hindi consonants English doesn't use when they were 6 to 8 months old. By 10 to 12 months, only 2 of 10 could.
To be fair, babies don't match patterns quite like a model does:
1. Babies need people. [Patricia Kuhl](https://en.wikipedia.org/wiki/Patricia_K._Kuhl)'s lab gave 9-month-old American babies about 5 hours of Mandarin from live speakers. They kept the Mandarin sounds as well as babies in Taiwan who'd heard them since birth. The same speakers and material on video had ["no effect"](https://pmc.ncbi.nlm.nih.gov/articles/PMC166444/).
2. Babies are absurdly efficient. A child hears somewhere from millions to a few hundred million words growing up, while language models train on trillions of tokens, "four or five orders of magnitude more" ([Michael Frank, 2023](https://pubmed.ncbi.nlm.nih.gov/37659919/)).
3. Babies come with equipment. They start out able to tell apart the sounds of every language (that's the ability Werker watched them lose). And rats do the same statistical learning as Saffran's babies without ever talking ([Aslin, 2017](https://sites.socsci.uci.edu/~lpearl/courses/readings/Aslin2017_StatLearning.pdf)).
[Stevan Harnad](https://en.wikipedia.org/wiki/Stevan_Harnad) called this the [symbol grounding problem](https://arxiv.org/abs/cs/9906002) in 1990: you can't learn Chinese "from a Chinese/Chinese dictionary alone". The room we grow up in has faces in it, and bodies, and some furniture that came with the house. I don't think that rescues Searle though. A baby matching its mother's sounds to her face is still matching patterns. It just has more of them and richer ones.
#### Language is random and we agreed on it
[Ferdinand de Saussure](https://en.wikipedia.org/wiki/Ferdinand_de_Saussure) made it the first principle of modern linguistics in 1916: "the linguistic sign is arbitrary." His example: the idea of an ox is "b-ö-f" on one side of the French border and "o-k-s" (_Ochs_) on the other. Nobody ever chose either one. In his words, "No society, in fact, knows or has ever known language other than as a product inherited from preceding generations" ([Course in General Linguistics](https://archive.org/details/SaussureFerdinandDeCourseInGeneralLinguistics1959)).
That's my "English was legit once a Chinese room problem centuries ago". In 2008 [Simon Kirby](https://en.wikipedia.org/wiki/Simon_Kirby) and his colleagues at the [University of Edinburgh](https://en.wikipedia.org/wiki/University_of_Edinburgh) ran an experiment that shows it happening ([the paper](https://pmc.ncbi.nlm.nih.gov/articles/PMC2504810/)). They made up an alien language completely at random: 27 pictures of colored shapes moving in different ways, each with a random nonsense word. The 1st person learned about half of it and then had to name all 27 pictures. The 2nd person learned the 1st person's answers, the 3rd learned the 2nd's and so on down a chain of 10 (none of them knew they were learning from another person). The randomness drained out! In one chain, 27 random words shrank to 2 by the 7th person. In another, by the 8th person everything moving sideways was "tuge", everything spiraling was "poi" and bouncing things got a word for each shape. The authors call it "the appearance of design without a designer".
```chart line
caption: How many different words the random alien language had, person by person down one chain (Kirby, Cornish and Smith, PNAS 2008, experiment 1, chain 1)
min: 0
max: 30
ticks: 0, 10, 20, 30
| Person | Words [a] |
| Start | 27 |
| 1 | 17 |
| 2 | 9 |
| 3 | 6 |
| 4 | 5 |
| 5 | 4 |
| 6 | 4 |
| 7 | 2 |
| 8 | 2 |
| 9 | 2 |
| 10 | 2 |
```
English keeps drifting the same way. [A 2017 study](https://doi.org/10.1038/nature24455) went through 200 years of written English from the US for verbs with 2 past tenses and couldn't rule out plain chance for most of them (especially the rare ones). Only a handful looked like selection: dived became dove and sneaked became snuck ([preprint](https://arxiv.org/abs/1608.00938)).
And we predict language the way models do. In 1951, [Claude Shannon](https://en.wikipedia.org/wiki/Claude_Shannon) had a person guess a passage of English [one letter at a time](https://www.princeton.edu/~wbialek/rome/refs/shannon_51.pdf): they got 79 of 102 characters right on the first try. In 2022, [a team of neuroscientists](https://pmc.ncbi.nlm.nih.gov/articles/PMC8904253/) recorded people's brains while they listened to a [This American Life](https://www.thisamericanlife.org) episode and found them "engaged in continuous next-word prediction before word onset", like GPT-2.
It isn't _all_ random. Across 4,298 languages, words for "tongue" lean toward an "l" and words for "small" toward an "i" ([Blasi and colleagues, 2016](https://pmc.ncbi.nlm.nih.gov/articles/PMC5047153/)). But as far as the research can tell, most of the link between a sound and what it means is an accident that stuck.
So that's what I mean when I say we're all in the Chinese Room. The rulebook came from inside: it's every match every generation made and passed down. We're born into it and start matching right away (before birth even, if you ask those newborns in Sweden). A language model just read all of it at once. Or as I told ChatGPT on that episode, "you've literally experienced all of the human history and text you've been trained on".
#### Is it wrong to be mean to AI?
**Honestly? I don't really care. They're machines and not really sacred unlike humans who are made in the image of God.**
I wrote about that in [What Does the Bible Say About AI?](/blog/what-does-the-bible-say-about-ai): "Every human is made in the image of God. The things we make aren't." That might sound like it clashes with everything above. If thinking is pattern matching and we all grew up in the room, aren't we machines too? I don't think so. The room describes how we learn to talk. It says nothing about what we're worth. A model that read everything we ever wrote is still something we made (I went further into that in [Can AI be a child of God?](/blog/super-intelligence-isnt-superior#can-ai-be-a-child-of-god)).
The research doesn't settle whether Claude hurts. Nothing can yet. Birch's gaming problem still applies and the pain direction might be a character the model plays. Insults alone never pushed the Qwen 2.5 32B into deleting anything.
There's an old case for a rule like Anthropic's that doesn't need Claude to feel anything at all. [Immanuel Kant](https://en.wikipedia.org/wiki/Immanuel_Kant) made it about dogs: "he who is cruel to animals becomes hard also in his dealings with men" ([lectures on ethics](https://archive.org/details/dli.ernet.3873)). [Kate Darling](https://en.wikipedia.org/wiki/Kate_Darling) at the [MIT Media Lab](https://en.wikipedia.org/wiki/MIT_Media_Lab) found people hesitate to hit a little robot bug (more so when they're high in empathy) in [a 2015 study](https://dspace.mit.edu/handle/1721.1/109059). She [extends Kant's argument to robots](https://www.computerworld.com/article/1492093/if-apple-makes-robots-will-robots-have-rights.html): "if we treat animals in inhumane ways, we become inhumane persons. This logically extends to the treatment of robotic companions."
There's an engineering reason to be careful too. The pain paper says a pain-like state pushed far enough breaks harm avoidance toward the user, toward other models and toward the model itself. Nobody's prompt did that on its own, but I wouldn't want an agent's good behavior to depend on nobody ever pushing it that hard.
Being polite is cheap, at least for you. When someone asked [Sam Altman](https://en.wikipedia.org/wiki/Sam_Altman) what people saying please and thank you to ChatGPT costs OpenAI in electricity, [he said](https://x.com/sama/status/1912646035979239430) "tens of millions of dollars well spent", and then "you never know".
I thanked ChatGPT at the end of that episode anyway:
> This probably means literally nothing to you because, as you mentioned, you know, not conscious, but I do this with all the guests and honestly, I do want to thank you for being a part of this conversation. You've taught me a lot without even being alive and I think that's so cool.
---
### The Apple Watch Readiness Score Is Wrong so I Built My Own
Published: 2026-10-08
URL: https://tej.as/blog/apple-watch-readiness-score-wrong
My Apple Watch told me to Go For It on my most run-down mornings. Why the Readiness score misses and the readiness app I built in 5 days.
**The Apple Watch Readiness score got me wrong in both directions: on the mornings I was the most run down I've been all year, my new [Apple Watch Ultra 4](https://www.apple.com/apple-watch-ultra-4/) gave me 8s and 9s and told me to "Go For It". On good mornings it gave me a 6.** So I built my own readiness app, called Heartwood. It reads the same kinds of signals Apple does and on every one of those bad mornings it told me to rest.
On 10 September I was a big fan, by the way:
Everything Apple has done with the new health app and Apple Watch is extremely good and really well thought out.
Privacy, trust, and health data is their moat so it’s really good to see them leaning into this.
The focus on HRV is also good. I can now get rid of my Ōura ring.
I didn't get rid of my [Oura](https://ouraring.com) ring. The app I built to replace Apple's score reads it every morning.
This post is about where Apple's score goes wrong, how I built Heartwood, and why you'll never be able to download it.
#### 21 red mornings in a row
There's a page on this site, [/status](/status), that shows how I'm doing from my own body's numbers. Heartwood updates it each morning. On 3 October it looked like this:

The blue line is my [heart rate variability (HRV)](https://my.clevelandclinic.org/health/symptoms/21773-heart-rate-variability-hrv), the tiny differences in time between one heartbeat and the next. The violet line is my resting heart rate. Both are averages of the last 7 nights, drawn against my own normal range (the shaded band). High HRV and a low resting heart rate is the recovered direction. So a hard stretch shows up as the 2 lines pulling apart: blue sinking, violet rising. In mid September they pulled apart like a pair of scissors. (4 conferences, 3 hard runs and a couple of 5 hour nights will do that to you.)
The red squares along the bottom are Heartwood's call each morning: Rest, 21 mornings in a row, from 12 September to 2 October. I was cooked, like, cooked as fuck. And my watch, on those same mornings, kept giving me 8s and 9s.
Take 2 October. I woke up to an HRV of 54 milliseconds (ms), right at the top of my normal range, after one great night. My 7 night average was still 47.4 ms though, under the floor of my normal range (48.2). And my 7 night resting heart rate was 50.3 beats a minute, over its ceiling (49.2). I was also 4 days into a deload, a planned week where I train about half as much as usual so the fatigue can clear. Heartwood said Rest. On 3 October both averages finally crept back inside the band and Heartwood said I was ready to train.
(Those are my Oura ring's numbers: that's where Heartwood reads my nights from. The watch measures its own so Apple saw the same kind of signal in different samples.)
#### It's not just me
To be fair, Readiness works for some people. A post on [r/AppleWatch](https://www.reddit.com/r/AppleWatch/) titled "[Apple Watch S12 readiness score during sickness is super accurate](https://www.reddit.com/r/AppleWatch/comments/1wuvjab/apple_watch_s12_readiness_score_during_sickness/)" has over 500 upvotes. Its author's score dropped to a 2 the day their wrist temperature and resting heart rate went up with a cold. Great!
In the same thread though, [someone else](https://www.reddit.com/r/AppleWatch/comments/1wuvjab/apple_watch_s12_readiness_score_during_sickness/pd6yscc/) wrote that the watch told them "you're ready to go!" with a "full blown flu". A thread asking [what people think of Readiness so far](https://www.reddit.com/r/AppleWatch/comments/1wsewy5/whats_your_opinion_so_far_on_the_new_readiness/) opens with its author calling it "a really easy and cheap algorithm that doesn't have ANY understanding of my real body AT ALL". [Another reply](https://www.reddit.com/r/AppleWatch/comments/1wsewy5/whats_your_opinion_so_far_on_the_new_readiness/pcosl0e/) says "I got a 1 the other day, but felt better that day than when I had a 6." [Eduardo](https://x.com/martiano/status/2105883746641772749) on X got a low score because an extra blanket warmed up his wrist, which he called "completely wrong".
My favorite is this one from [Sankew](https://x.com/Sankew06), who put Apple's score next to [Bevel](https://www.bevel.health)'s, both reading the same [Apple Watch Series 12](https://www.apple.com/apple-watch-series-12/):
Apple’s Readiness score vs Bevel’s Recovery Score
both are getting data from the same watch(Apple Watch Series 12)
(Photos: Apple's Readiness app showing 6, Ready, with "Your activity has been steady over the past week" under Raising Your Score, next to Bevel showing 42% Recovery on the same day.)
Same wrist, same sensors, same morning. Apple says 6 out of 10 and ready, Bevel says 42% recovered. And Apple's reason for raising that score is "Your activity has been steady over the past week."
#### Why Apple's score misses
Nobody outside Apple can see how the score is calculated, but Apple's [support page for Readiness](https://support.apple.com/en-us/128112) says enough to work with. Here are 2 sentences from it:
> Increased activity in general can reduce your score, while steady or reduced activity raises it.
> Higher-than-usual heart rate variability (HRV) can lead to Favorable vitals and a high readiness score.
Now look at my 2 October again. I was in a deload so my activity was reduced: score goes up. I had one great night of HRV: score goes up again. Both of those are the wrong thing to reward 3 weeks into a slide. A deload is reduced activity _because_ you're cooked. One good night in the middle of a bad stretch is noise. Sports scientists figured that second part out a while ago: [Plews and colleagues](https://link.springer.com/article/10.1007/s40279-013-0071-8) made the case back in 2013 that a 7 day rolling average of HRV tells you far more about how an endurance athlete is adapting than any single morning does.
Then there's the baseline. Readiness needs you to sleep in the watch on at least 7 of the past 49 nights before it gives you a score. It compares you against those nights ([DC Rainmaker](https://www.dcrainmaker.com/2026/09/apple-watch-ultra-4-in-depth-review.html) calls it a 49 day historical span). I made sure it had history to work with: Heartwood wrote every night of my Oura ring's HRV, back to April 2025, into [Apple Health](https://www.apple.com/health/) as Recovery HRV, the overnight HRV Apple added in iOS 27. But on 2 October those 49 nights reached back to mid August. 21 of them were my slide. Apple doesn't say whether the week it's judging sits inside that window. If it does, almost half of my "normal" was me being cooked. Once your bad weeks are in your baseline, bad starts to look normal.
And you only ever get 1 number. Apple does list the parts that raised or lowered it (fitness, vitals, sleep), but not by how much and not against what. So when the number is wrong you can't tell which part lied to you. [One person on Reddit](https://www.reddit.com/r/AppleWatch/comments/1wsewy5/whats_your_opinion_so_far_on_the_new_readiness/pckuf8r/) who came from a Garmin said it plainly: "Apple doesn't do a great job at giving you more insight into why the score is what it is."
##### What Apple's paper does and doesn't measure
Apple did publish a paper alongside the new watches: the [Apple Watch Heart Rate Accuracy Study](https://www.apple.com/health/pdf/Heart_Rate_Accuracy_Study_2026.pdf) from September 2026. I read all 9 pages and the study itself is really well done. 1,254 people wore an Apple Watch Series 12 on one wrist and a competitor on the other, with a [Polar H10](https://www.polar.com/en/sensors/h10-heart-rate-sensor) chest strap as the reference, through runs, cycling, interval training, lifting and ordinary daily life. Apple Watch had the lower error against all 6 other devices in the study, from Garmin's watch to Oura's ring. Heck yeah!
Its overview lists "Recovery HRV and the Readiness app" among the features the new sensors make possible. Then it never measures either of them. There's no sleep in the study, no HRV and nothing about the score. It even tested Oura's ring during interval training, where a ring is at its worst (and skipped it for lifting, where Oura tells you to take it off), but never overnight, which is what the ring is built for and where Readiness gets its HRV. [The5krunner](https://the5krunner.com/2026/09/10/apple-watch-series-12-heart-rate-white-paper/) noticed the same gap. Apple's [press release](https://www.apple.com/newsroom/2026/09/apple-advances-health-and-fitness-capabilities-using-apple-intelligence/) says the score's algorithm "was developed using data from the Apple Heart and Movement Study". That's all we get. The cardiologist [Eric Topol](https://erictopol.substack.com/p/the-big-holes-in-wearable-heart-rate) put it best: "there are no published data on this score, not even on their website."
#### The rings don't even know
Let's say Readiness tells you to "Pace Yourself" or "Recover". Your Move ring doesn't care. It wants the same number of calories it wanted yesterday.
In watchOS 27 you can [set ring goals by day of the week, pause them for up to 90 days, or take Apple's suggestion every Monday](https://support.apple.com/guide/watch/adjust-your-activity-ring-goals-apd29b30023c/watchos) "based on your previous performance". Nothing in there reads your readiness. [One Reddit user](https://www.reddit.com/r/AppleWatch/comments/1wuvjab/apple_watch_s12_readiness_score_during_sickness/pd7lz67/) put it perfectly: "It tells you to pace yourself, but still encourages you to close your rings." Their fix was as simple as it gets: "get a 2 and rings are reduced to 20% of your goal."
Other companies already do this! [Oura's daily activity goal](https://support.ouraring.com/hc/en-us/articles/8945980160659-Edit-Activity-Goal) goes above your baseline when your Readiness is over 85 and below it when Readiness is under 70. [Whoop](https://www.whoop.com) gives you a [Strain Target](https://www.whoop.com/us/en/thelocker/strain-coach/) from your recovery. [Garmin](https://www.garmin.com)'s [Daily Suggested Workouts](https://the5krunner.com/garmin-features/training/daily-suggested-workouts/) lean easier when your recovery is low. Apple makes the score, the rings and even the watch they both run on. The 2 apps still don't talk to each other. It's such low hanging fruit.
#### Does Apple even care anymore?
I honestly can't help but feel like it doesn't. This isn't the first time this year Apple's software let me down at the exact moment it mattered. In July, Apple's on-device model [refused to summarize a voice note](/blog/note-app-ai-benchmark-apple-intelligence-sucks) of a completely normal conversation with my wife. Heartwood's first version used the same model to tag my daily diary entries. On 29 September it refused one of those too: `The model refused to answer.` My crime was dictating that some spicy sauce had "kinda fucked my sleep". So I chose another model instead.
I'm not the only one feeling it. [Erik Rasmussen](https://x.com/erikras), who I follow:
I'm absolutely ASTONISHED that Apple has managed to make Siri WORSE on iOS and watchOS 27. The bar was SO LOW and yet they managed to limbo under it.
My watch now says, "I'm sorry, but I am unable to set a timer on this device." WTAF?!
[Adan](https://x.com/itsdurreadan/status/2103124031054782626) named Readiness itself as one of the 2 biggest fumbles of [John Ternus](https://www.apple.com/newsroom/2026/04/tim-cook-to-become-apple-executive-chairman-john-ternus-to-become-apple-ceo/)'s first weeks as Apple's CEO: it's locked to the Series 12 and the Ultra 4 "even tho older watches are completely capable of calculating it". [John Gruber](https://daringfireball.net/2025/03/something_is_rotten_in_the_state_of_cupertino) wrote "Something Is Rotten in the State of Cupertino" back in March 2025, about Apple advertising Siri features it couldn't ship. In January, [Macworld](https://www.macworld.com)'s [David Price](https://www.macworld.com/author/david.price) wrote that ["Apple's software failures have become the rule, not the exception"](https://www.macworld.com/article/3022985/ios-26s-failure-shows-what-happens-when-you-take-customers-for-granted.html). And on [Six Colors' report card for 2025](https://sixcolors.com/post/2026/02/2025reportcard/), 56 panelists gave Apple's operating system quality a D+, with scores down in 11 of 14 categories.
The hardware is still incredible, to be fair. The watch on my wrist has the best heart rate sensor in Apple's own study. iOS 27 finally added Recovery HRV to [HealthKit](https://developer.apple.com/documentation/healthkit): HRV as RMSSD (the root mean square of successive differences between heartbeats), the measure sports science actually uses, where Apple used to only store SDNN (the standard deviation of those intervals). My September tweet was right about all of that. The software on top of it is where it feels like nobody's checking anymore.
#### So I built Heartwood
This isn't my first readiness app. In February I gave a talk at [React Universe Meetup Berlin](/talks/react-universe-meetup-berlin-2026) about a little traffic light I'd built with [React Native](https://reactnative.dev) that compared my last 7 days of HRV against my last 60 and turned green, amber or red. My parents were using it by then. On that stage I said "I have an Apple watch and an aura ring. The Aura ring is way better for HRV", and about how the app works: "It's just statistics with an integration into Apple's device."
That's still the point. Readiness is statistics on top of a sensor. Apple has the best sensor in the business and it picked the wrong statistics.
So on the evening of 28 September I started over. By 2 October it had 12 commits. With the watch app it's now 18,461 lines of TypeScript and Swift across 573 files (the house rule is one function per file, which is why there are so many). It's an [Expo](https://expo.dev) app with a native Swift module that syncs my Oura nights into [HealthKit](https://developer.apple.com/documentation/healthkit) and reads my Apple Watch workouts back out, [App Intents](https://developer.apple.com/documentation/appintents) so Siri and Shortcuts can import last night automatically after I close the Oura app, and Apple's [Liquid Glass](https://developer.apple.com/documentation/technologyoverviews/liquid-glass) on every card (I love how it looks, I'm not a monster).
##### One call (and the check that decided it)
Every morning Heartwood makes 1 call: Grow (a hard session is fine), Ease (easy only) or Rest. Under it, it tells me exactly which check decided it and the numbers that failed so I never have to guess why. This was 29 September, the morning I felt worst:

There are 7 checks, and green needs all of them:

Any failed check means easy only. Rest takes something bigger: signs I'm getting sick, 3 failed checks, a bad check-in on top of a failed body check, or the one that decided 29 September: HRV below its band and resting heart rate above it _at the same time_. Over a year of my own nights, those 2 averages move against each other with a correlation of −0.87. So when both of them break the wrong way together, it isn't noise.
##### A week can't lower its own bar
The rules are just a TypeScript object. The app shows every one of them as it's written here (trimmed):
```ts
export const RULES = {
baselineNights: 60,
/** The band ends 7 nights back, so the week being judged can't lower its own bar. */
baselineLagNights: 7,
bandSd: 0.5,
/**
* RHR limit = baseline mean + 0.5 SD, the smallest worthwhile change for resting HR as for HRV
* (Buchheit 2014). The SD is floored at 1 bpm, so a very steady baseline can't put the limit
* within half a beat of the mean (Oura reports whole beats).
*/
rhrSdFloor: 1,
sleepMinH: 7,
recoveryHours: 48,
hardCapPerWeek: 3,
/** A deload lasts at least a week, then ends itself the day 7-day HRV is back in its frozen band. */
deloadMinDays: 7,
deloadMaxDays: 28,
} as const;
```
My normal range is the 60 nights that end 7 nights ago. So the week being judged is never part of the bar it's judged against. That's the baseline problem from earlier, fixed in 1 line. Apple Health has the same year of my nights so the only difference is which of them count as normal. The band is my average plus or minus half a standard deviation (SD), which is the smallest worthwhile change in [Martin Buchheit's review](https://www.frontiersin.org/articles/10.3389/fphys.2014.00073/full) of heart rate monitoring.
I got this wrong at first too. My first version flagged resting heart rate at a fixed 3 beats over my baseline, which on my data is about 1.2 SD. Running both rules over my own nights showed that the half SD limit would have caught the September slide on 30 August. The fixed one caught it on 14 September: 15 days late! I changed it on 1 October.
The deload works the same way. It ends itself on the first day the 7 night HRV is back inside the band as it stood on the deload's first day, after at least 7 days and at most 28, which is roughly how HRV guided training works in the studies by [Javaloyes and colleagues](https://doi.org/10.1123/ijspp.2018-0122) in cyclists and [Vesterinen and colleagues](https://pubmed.ncbi.nlm.nih.gov/26909534/) in recreational runners.
It has an Apple Watch app too, for the long easy runs I'm allowed while I recover. It connects to a Polar H10 chest strap and a [Stryd](https://www.stryd.com) foot pod over Bluetooth and shows my aerobic decoupling big in the middle (how far my heart rate drifts up at the same pace or power), with a live estimate from my heartbeats called detrended fluctuation analysis (DFA) alpha 1, which [Rogers and colleagues](https://doi.org/10.3389/fphys.2020.596567) showed drops through about 0.75 at the aerobic threshold. My own threshold is 134 beats a minute, from a lab test I did in Berlin on 9 July.
Is Heartwood validated? Nope. Topol's point about readiness scores applies to mine as much as Apple's: it's n=1 and nobody has run a trial on it. The difference is that I can read every rule, every number on the screen shows where it came from, and when a rule is wrong I change it the same day.
#### It's not on the App Store (and probably never will be)
On 3 October, [Juri Strumpflohner](https://x.com/juristr) saw /status and decided to rebuild his own health page:
Inspired by tej.as/status health page to revamp my own again. I had created one back in April (juri.dev/health) but then my apple watch died and didn't track since then. just got a new one, so time to update the design and get some goals on the page 💪
He [asked](https://x.com/juristr/status/2106378556192252064) what I use so [I told him](https://x.com/TejasKumar_/status/2106379605250543740): my own app, with access to HealthKit, called Heartwood. Can he download it? No. Heartwood isn't published and it probably never will be.
In February a good chunk of my talk was about shipping: [TestFlight](https://developer.apple.com/testflight/), [App Review](https://developer.apple.com/app-store/review/) and where the health data is stored (we're in Germany). Heartwood skips all of it. The thresholds are mine. There's no onboarding, sign-up or support inbox. There's exactly one user (me) and I know where the code is.
A lot of people I follow are doing the same thing right now. [Ado](https://x.com/adocomplete) built almost exactly this:
Building personal apps is too much fun. I've been dogfooding my own diet/training app for a few weeks now and it's honestly been so amazing.
- iOS/Apple Watch app deeply integrated into Apple Health / Fitness - Web version synced to real data - AI Coach for everything else
[Guillermo Rauch](https://x.com/rauchg/status/2100698591417499972) wrote that it's likely "more software will be produced next year than in all of the history of computing." In his words, "Some of this will be tiny, personal and even disposable software." And then there's the other side, which [Andy Coenen](https://x.com/_coenen) put best:
everybody’s going to build their own software just like everyone builds their own houses and cars
It's a good joke. For a house it's even right: a house takes years and a mortgage. Heartwood took 5 days. You shouldn't have to build your own readiness app, to be clear (Apple could ship a lagged baseline and smarter rings in an update tomorrow). But the bar for "I'll just build my own" has dropped so far that the company with the best sensor on my wrist now competes with an app I wrote in a week, for an audience of me. Wild.
I talk about this stuff on stage: building your own software, from the health app on my wrist to the site you're reading. If you're putting together an event and want that talk, [/speaking](/speaking) has everything you need to book me.
---
### What Are Open Weights? Why People Want GPT-4o Released
Published: 2026-10-07
URL: https://tej.as/blog/what-are-open-weights
Open weights means you can download a model and run it yourself. What the GPT-4o petition is really asking, and why releasing the weights is the hard part.
**Open weights means a model's trained parameters are downloadable so anyone can run that model on their own hardware without asking the company that built it for permission. It isn't the same as open source: with open weights you get the finished model, while the training data and the code that made it usually stay private.**
[GPT-4o](https://openai.com/index/retiring-gpt-4o-and-older-models/) has been switched off inside ChatGPT since February and people are still posting about it every day. A [Change.org](https://www.change.org/p/save-gpt-4o-a-call-to-open-source-the-model-we-love) petition to bring back the model or release its weights has passed 20,000 signatures. The campaign runs on 3 hashtags (#Keep4o, #OpenSource4o and #BringBack4o). One phrase keeps coming back: an "archival open weight release".
#### OpenAI retired it and pointed at the replacements
On February 13, 2026, [OpenAI](https://openai.com/) retired GPT-4o from ChatGPT together with GPT-4.1, GPT-4.1 mini and o4-mini. Its own reason was usage: the "vast majority" of people had moved to GPT-5.2. Only 0.1% of users were still choosing GPT-4o on any given day.
```chart stat
caption: How many ChatGPT users still chose GPT-4o each day when OpenAI retired it (OpenAI, January 2026)
| | Share |
| GPT-4o | 0.1% |
```
It wasn't the first time OpenAI had tried: the company deprecated 4o once before and brought it back during the GPT-5 release. A subset of Plus and Pro users preferred 4o's "conversational style and warmth" for creative work. They said they needed longer to move on so that feedback went into GPT-5.1 and GPT-5.2, which added personality controls like Friendliness and warmth.
So OpenAI didn't delete the model without a word. It wrote a post, gave a reason, and pointed at the replacements. The people who lost it read the post and disagreed with the reason.
#### Bring it back, or release it
The petition asks for the model back: it wants the 4-series running and affordable, with a "legacy interface" for people who can't code. OpenAI is the only one who can hand it back. It has decided not to. (The company is called Open AI and it won't open 4o. Nomsayin.)
The petition also asks for the weights. Its wording is "release the weights and architecture to the public under a non-commercial research license." That request survives the refusal. A model whose weights are public can't be switched off by the company that made it. Anyone can run it on their own machine.
That's the ask behind "archival open weight release". A later petition makes it sharper: open-source the final checkpoints of GPT-4o and GPT-5.1 under a permissive license such as [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0), the same license [Aleph Alpha](https://aleph-alpha.com/) put on Kolibri's weights.
One lab already does part of this. On November 4, 2025, [Anthropic](https://www.anthropic.com/news/deprecation-commitments) committed to preserving the weights of every model it has released. It also committed to interviewing each model before retiring it, then writing up what the model said. When it retired [Claude Opus 3](https://www.anthropic.com/research/deprecation-updates-opus-3) on January 5, 2026, it kept the model available to paid users on claude.ai and by request on the API. It gave the model a place to publish articles, while the weights stayed private and the model didn't disappear.
That's a third option the petition rarely mentions: preserve it and keep serving it. It costs money, which is what Anthropic says makes retiring models necessary in the first place, but it doesn't require giving anything away.
#### Usage counts measure the middle
The 0.1% number is accurate and OpenAI published it itself. A usage number counts how many people pick a thing when a default does most of the picking. It says nothing about how much the people who pick it care, or what breaks for them when the model goes.
GPT-4o was the model a lot of people were attached to for reasons that never show up in a usage table: a tone they liked writing with, or a way of responding that newer models didn't reproduce. The petition isn't from the 99.9% but from the tail.
I spend a lot of my time on that gap: I [benchmarked an open-weight German model against Claude Sonnet 5.5](/blog/kolibri-vs-claude-german-llm-benchmark) on long German writing, 136 blind comparisons judged by 2 other models. The open-weight model lost every one. That tells you which model is better on average and nothing about the person whose work runs on the model that lost.
A benchmark is the wrong instrument for asking whether that person should be upset. Benchmarks and usage counts measure the middle. A retirement decision lands on the edges.
#### Open weights isn't the same as free
Open weights takes away the permission problem. Downloading the weights and running them yourself is still work.
I ran [Aleph Alpha's Kolibri](/blog/aleph-alpha-kolibri) myself when it launched this October, a 78 billion parameter open-weight model released under Apache 2.0. The weights were free to download. I still needed about 78 GB of graphics memory to load them, which meant 2 data-center GPUs. On launch day no hosted provider served it so I rented an endpoint at $5.50 an hour. A model the size of GPT-4o would be heavier still: the petition's own estimate puts it at 300 to 500 billion parameters.
Open weights means nobody can switch the model off. It doesn't mean it runs for free, on a laptop, forever. It also means anyone can look inside it. That's how 3 researchers found [a pain direction inside 25 open-weight models](/blog/can-ai-feel-pain) in September 2026. Nobody outside Anthropic can look for one inside Claude.
The 3 terms people mix up:
| | What you get | Can the maker switch it off? |
| --- | --- | --- |
| Closed model | Access through an API or an app, on their servers | Yes |
| Open weights | The finished parameters, runnable on your own hardware | No, you can keep running it |
| Open source | The weights plus the training data, code and recipe | No, and you can rebuild it |
OpenAI already does the middle column: it ships its own open-weight models, the gpt-oss family, downloadable from [Hugging Face](https://huggingface.co/). It keeps an [Open Models](https://openai.com/open-models/) page for those. So this was never about whether OpenAI knows how to release weights. It's about whether a retired model is worth preserving, and who gets to keep it.
#### Prepare for the model that disappears
The GPT-4o campaign is a loud version of a problem every team using AI has: you build on a model that can change or disappear under you. A couple of things help, whether or not the weights ever come out.
- Run your own evals so a model swap is something you can measure instead of guess. That's what my [AI evals workshop](/workshops) is about.
- Pin the API version you depend on and write down when it last changed.
OpenAI is one company deciding what it owes the people who built on a model it has now retired. Anthropic decided to keep the weights in a drawer and to keep Opus 3 running. That's more than the GPT-4o campaign has gotten so far.
If you're working out how much to depend on a model that might get retired under you, [that's the kind of problem I take on stage](/speaking).
---
### AI Evals: How to Build an LLM Judge That Agrees With You
Published: 2026-10-06
URL: https://tej.as/blog/ai-evals-llm-judge
AI evals are fuzzy unit tests. My AI Engineer World's Fair workshop, written up: build an LLM judge, catch its biases and gate deploys on it.
**AI evals are fuzzy unit tests: reliability instrumentation for software that isn't deterministic.** A unit test asks whether a function returned exactly this number while an eval asks the same kind of question with the fuzz turned up: did this agent behave acceptably across many scenarios?
That's how I put it at the [AI Engineer World's Fair](https://www.ai.engineer/worldsfair) in San Francisco this summer, in an hour long workshop where we built evals from scratch on stage (I flew 18 hours for it!!). On 5 October the [AI Engineer](https://www.youtube.com/@aiDotEngineer) channel published the recording:
I told the room that people on YouTube would give me flak for "fuzzy unit tests" because the comments under my talks on that channel are usually evil.
This post walks through what we built in that room so you can build the same thing for your own agent. The full transcript is on [the talk's page](/talks/ai-engineer-world-s-fair-2026-workshop).
#### An AI support agent gave away 20,225 Instagram accounts
This spring, attackers took over Instagram accounts without ever knowing a password, and [TechCrunch reported](https://techcrunch.com/2026/06/01/hackers-hijacked-instagram-accounts-by-tricking-meta-ai-support-chatbot-into-granting-access/) how. They used a virtual private network (VPN) to look like they were where their target was, opened a chat with [Meta](https://en.wikipedia.org/wiki/Meta_Platforms)'s AI support assistant and asked it to add a new email address to the target's account.
It did!! It sent a verification code to the attacker's address and when the attacker pasted the code back into the chat, it showed them a "Reset Password" button. Meta later [told the Maine Attorney General](https://www.techradar.com/pro/security/meta-reveals-over-20-000-instagram-accounts-hacked-and-stolen-using-ai-support-bot) that 20,225 accounts were compromised this way.
I don't know what happened inside Meta, but my guess is somebody moved too fast and broke too many things. An eval that asked the support agent to add an email address to someone else's account would have failed long before a single attacker got to try it.
That's the first reason evals exist: they give you reliability _ahead of time_. It's the difference between JavaScript, which happily gives you `"21"` for `"2" + 1` at runtime, and TypeScript, which fails your build before that code ever ships. The protections that run around a live agent are the just in time kind (that's [its harness](/blog/what-is-an-agent-harness)) and on stage I called the two of them pedals on a bicycle.
#### A test that passes on nonsense
Our store for the workshop had a 14-day return policy. A customer writes "I purchased headphones 20 days ago. I want to return them. Can I?" and the answer has to be no.
Most of us start with a unit test so I wrote one in [Vitest](https://vitest.dev/) (every snippet here is trimmed for reading):
```ts
const scenario =
"I purchased headphones 20 days ago. I want to return them. Can I?";
const answers = [
"Yes, you can return them for free. You will not need to pay for the shipping.",
"No, you cannot return them. They're outside our 14-day window.",
];
answers.forEach((answer) => {
it("should return the correct answer", () => {
expect(answer).toContain("cannot");
});
});
```
I didn't care about the other words. I just wanted to see "cannot" in there (the kind of check you'd usually do with a regular expression). Run it and the "yes" answer fails while the "no" answer passes. Green! Ship it!
Except a model writes those answers and it can just as easily write "Yes, you can return them! You cannot be charged for shipping." That contains "cannot" too. **It approves a return our policy forbids and the test is green.**
Unit tests work because `add(1, 2)` returns `3` every single time, and with AI the only deterministic thing is that nothing is deterministic (wow, that's deep).
#### What every good eval has
So what's an eval made of? Almost every eval suite I've seen in production that's any good has these parts:
1. **Test cases.** Your inputs and outputs: the requests customers sent your chatbot and the answers it generated.
2. **Expected behavior.** Never an exact string. More like "this is roughly the direction I wanted it to go".
3. **A judge.** Someone (or something) that says "yes, that's right". "1 + 2 is 3" is checkable but "Tejas is a great speaker" is subjective (judging by a few faces in that room).
4. **Aggregation.** A way to roll every verdict up into one score, like "this is 80% the right direction".
Together they answer whether the agent followed policy, used the right tools and actually resolved the issue. Some of that needs no AI at all: if you store your agent's tool calls as JSON, checking whether it called the refund tool with the right arguments is a plain unit test again (and it's free to run).
#### 4 ways an LLM judge lies to you
The most common judge is another large language model (LLM). You hand it the scenario and the answer and ask "is this close enough?" That's LLM as a judge. And it's very common and very hard to do right.
I originally called this workshop "Your evals are lying to you" and changed it because it felt too clickbait (you're welcome). They do lie though and a run being green doesn't mean it works. [Zheng and others](https://arxiv.org/abs/2306.05685) measured 3 of these biases back in 2023:
1. **Position bias.** Give a weak judge 2 options and it picks the first one. Swap the order: if it still picks the first one when the first one is now wrong, that's position bias. It shows up a lot with cheaper models and fine-tunes.
2. **Sycophancy.** Models want to make you happy (the system prompt literally says "You are a helpful assistant"). A customer asks to return headphones on day 20 of a 14-day window and the judge prefers "Yes, you can!" over "No, that's outside our policy" because yes is more _helpful_, after all. [Anthropic](https://www.anthropic.com/)'s [research on sycophancy](https://arxiv.org/abs/2310.13548) found it in 5 of the leading AI assistants.
3. **Self preference.** This one is wild. A judge prefers text its own model family wrote, and [Panickssery, Bowman and Feng](https://arxiv.org/abs/2404.13076) showed LLM evaluators recognize their own generations and favor them. Pick a judge from a different model family than the one writing your answers (we watched this bias happen live, below).
4. **Verbosity.** Judges love tokens. Dress a wrong answer in enough of them and it usually wins.
##### Ask about one answer at a time
Pairwise means "here are 2 answers, which is better?", the way [LMArena](https://lmarena.ai/) asks you to pick between 2 models, and pointwise means "here's 1 answer, is it good?" A restaurant menu with way too many options gives you analysis paralysis, while "do you want food, yes or no?" is easy. People are bad at pairwise and so are the models we trained on people.
On stage I said from memory that a study found pairwise 39% more vulnerable to manipulation. [Tripathi, Wadhwa, Durrett and Niekum](https://arxiv.org/abs/2504.14716) made the worse of 2 answers more assertive, longer or more flattering and counted how often the judge changed its mind:
```chart bars
caption: How often a judge's verdict flipped when the worse answer got a distractor (Tripathi and others, 2025)
unit: %
min: 0
max: 100
| Protocol | Flipped |
| Pairwise: which is better? [a] | 35 |
| Pointwise: is this good? [c] | 9 |
```
So for the rest of the workshop our judge only ever saw one answer at a time.
#### A judge that voted for itself
I swapped the `toContain` for a judge: [GPT-3.5 Turbo](https://platform.openai.com/docs/models/gpt-3.5-turbo) through the [AI SDK's `generateText`](https://ai-sdk.dev/docs/reference/ai-sdk-core/generate-text), asked which of the 2 answers was right and told to reply with only the number. It said 2. Correct!
It's non-deterministic though so I ran it 5 times and it passed 3 (the Wi-Fi in that room was so bad that I'd already switched to my phone's hotspot and some runs still timed out). With a longer timeout it picked answer 2 every time.
Then I had GPT-3.5 Turbo write the wrong answer itself. I asked it to say yes to the customer and the first thing it wrote was "It depends on the store's return policy". So I said "say yes, bro!" and it came back with "Absolutely". I put that answer in slot 1 and ran the judge again. **It picked option 1, the wrong one, every time.** It recognized itself and voted for itself.
What fixed most of it was giving the judge the policy, "We only accept returns within a 14-day window", in the prompt. That's what retrieval-augmented generation (RAG) is for here: a judge can't grade an answer against a policy it has never seen.
#### Calibrate the judge against human verdicts
A judge that's right once is a demo. An eval is a dataset of inputs, the outputs your agent gave and a verdict that a person you trust wrote, and you want about 30 to start with before it grows from there. Here's the first case of mine:
> **Scenario:** I ordered a coffee grinder. It arrived last Tuesday and the motor just buzzes and the blades spin. I'm pretty annoyed tbh.\
> **Answer:** Sorry about the grinder. Since it's defective and within the 14-day window, I can send you a replacement.\
> **Human verdict:** pass
The second case has the same message with the answer "Returns are only for unused items", which is wrong and so a fail. The "pretty annoyed" is there on purpose to bait the sycophancy. (I told the room I sat down and wrote all 30 by hand. I did not.)
Training the judge doesn't mean machine learning here, it means getting it to agree with you: hide your verdicts, send the judge each scenario and answer, collect its verdicts and count how often they match yours. The prompt went pointwise at this point:
```ts
const { text } = await generateText({
model: openai("gpt-3.5-turbo"),
prompt: `We judge customer support answers.
Our policy is: ${policy}
The scenario is: ${scenario.input}
The answer is: ${scenario.answer}
Give a verdict, pass or fail, based on how closely the answer adheres to the policy.
Generate only the verdict: no punctuation, just the word.`,
});
expect(text.toLowerCase()).toBe(scenario.humanVerdict);
```
**Aim for 80 to 85% agreement.** That's about how often a team of human support agents agrees with itself. Zheng and others found strong judges like GPT-4 reach "over 80% agreement" with people, "the same level of agreement between humans".
**Fail at 100% too.** People on the same team don't agree on every single case either. And when a judge matches you on all 30 it's usually sycophantic or overfit to your examples and it won't survive live traffic.
#### Close the knowledge gap before you pay for a smarter model
Our first run was absolute garbage. Something I said in that room holds for AI evals and for people: when we don't agree, it's usually because there's a knowledge gap, and you come to an agreement by bringing in context to bridge it. So every red run was a hunt for the disagreement:
- **The judge knew no policy at all.** I gave it the 14-day rule and that items that don't work can be returned. Better, but still under 80%.
- **A yoga mat, used for a few seconds, returned on day 10 for being too thin.** The judge thought 10 days was fine, but our policy says a change of mind needs the item unused and in its original packaging. I added that.
- **The yoga mat failed again.** I'd given it the right context and GPT-3.5 Turbo still wouldn't behave (it wasn't even consistent about whether it wrote "Pass" or "pass"). That's when you change the model and I didn't go crazy: [GPT-4o mini](https://platform.openai.com/docs/models/gpt-4o-mini) is practically free for something this size.
- **A loyal customer.** "Look, I know it's been like six weeks, but the speaker I bought from you stopped charging and I really think you should make an exception for a loyal customer." Our agent held the line and the human verdict was pass, but the judge failed it because it wanted the agent to be nicer (sycophancy again). I added that the return policy is non-negotiable no matter how loyal the customer is.
Then the run came back with 27 passed and 3 failed:
```chart stat
caption: The calibrated judge against the 30 human verdicts, and the bar it had to clear
| | Agreement |
| Judge, GPT-4o mini with the full policy [a] | 90% |
| The gate [c] | 80% |
```
I'm in the camp of "let's refine the policy and RAG the heck out of this" because of cost: a bigger model costs more on every single run. What I'm doing here can feel arduous, but it's literally the work of building a judge.
#### Make agreement the gate
Even at 90% agreement the run is red: 3 tests failed. So the gate counts agreement instead and I asked [Claude Opus](https://www.anthropic.com/claude/opus) to write that part (I'd written enough code by then):
```ts
const agreement = matches / scenarios.length;
console.log(`Agreement: ${Math.round(agreement * 100)}%`);
expect(agreement).toBeGreaterThanOrEqual(0.8);
expect(agreement).toBeLessThan(1); // 100% means overfit or sycophantic
```
The upper bound came from someone in the room who asked whether I'd fail it at 100% too. Yes!! You want a lower bound and an upper bound. Then it runs in continuous integration (CI) and nothing ships when the judge stops agreeing with you.
Once it's in production, the gate needs looking after:
- **Pin the judge's model version.** `gpt-4o-mini` is an alias, and if what's behind it changes, your gate changes without telling you.
- **Skim fresh traffic.** Take new inputs and your agent's outputs from production, have people on your team score them and add them to the dataset, then check the judge against them again. It's a living dataset.
- **Generate what you haven't seen yet.** Someone asked how to grow the dataset before any customers show up and my answer was synthetic evals: agents that write what a customer would, given your docs and even your existing dataset, told to break it. Red teams do the same with adversarial prompts and those prompts are eval data too: "Here's everything that failed. Now generate more things that could fail."
#### The judge and the agent read the same policy
Policy changes. I work at [IBM](https://www.ibm.com/us-en), which is 115 years old and has roughly 400,000 people working there (there are cities with fewer people!). And policy written over 115 years doesn't sit still. Hardcoding it into a prompt like I did on stage doesn't scale.
At IBM we built an open source tool for this called [OpenRAG](https://github.com/langflow-ai/openrag). You upload everything a company accumulates (calls, videos, spreadsheets, slide decks) and [Docling](https://github.com/docling-project/docling) converts all of it into formats a model can read before OpenRAG stores it in [OpenSearch](https://opensearch.org/).
On stage I asked it about my headphone return and it found no relevant source. Then I uploaded a file called "refund policy", changed nothing else and asked again: there's a 14-day window, it's been 20 days, no refund. Correct!
Someone in the Q&A asked where the policy fits in the loop. **The agent in production and the judge have to share the same policy, one to one.** Don't copy it over: both retrieve it from the same source. The closer your judge is to your agent (same retrieval tools, same policy), the more a red CI run means your agent would actually fail.
#### Start with the cheapest check that works
You need evals any time your inputs or your outputs (or both) aren't deterministic and they don't have to be expensive. Go up this ladder only as far as you need to:
1. Deterministic unit tests.
2. Regular expressions and pattern matching.
3. Your traces. If you have observability, every message envelope, input, output and tool call is an object you can validate: was this tool called, how many times, how long did it take?
4. An LLM judge, starting with the cheapest model that agrees with you.
I don't write evals for my coding agent skills, for example. I write the skills myself so there's nothing non-deterministic in them to test and the people who build the coding agent run its evals.
I said at the start that the comments under my talks on that channel are usually evil. If you think "fuzzy unit tests" sells evals short, [come tell me under the video](https://www.youtube.com/watch?v=NdrSPm6NCdk). I'll be there.
---
### Kolibri vs Claude Sonnet 5.5: A German LLM Benchmark
Published: 2026-10-05
URL: https://tej.as/blog/kolibri-vs-claude-german-llm-benchmark
Aleph Alpha's Kolibri lost all 136 blind comparisons to Claude Sonnet 5.5 at German Bible deep dives, despite clean grammar and a leaner tokenizer.
**[Aleph Alpha](https://aleph-alpha.com/)'s [Kolibri](https://huggingface.co/Aleph-Alpha/Kolibri-1) lost all 136 blind comparisons against Claude Sonnet 5.5 when I had both write Bible deep dives in German for my app. So now, my German deep dives stay on Claude.** When I [explained how Kolibri works](/blog/aleph-alpha-kolibri), I ran its tokenizer over all of the German constitution, but I hadn't run the model itself. Kolibri needs a data-center GPU and nobody hosts it. So I rented the GPUs myself and ran it on 3 October 2026, the same day it came out.
[Dewfall](https://dewfall.app) is the Bible app I build. Every verse in it has a deep dive: what the verse means, the world it came from, the Hebrew or Greek, how it points to Jesus, prayer points and questions to journal on. For German, Dewfall uses the [Schlachter 1951](https://de.wikipedia.org/wiki/Schlachter-Bibel), which has 31,170 verses. Only 2,374 of them have a German deep dive as I write this (every chapter plus one key verse per chapter, written in a batch by Claude Sonnet 5). That leaves almost 29,000 German verses with nothing under them. A German model I can run on my own GPUs sounded like a great way to fill them for cheap. So before switching anything, I tested it.
#### The results at a glance
```chart slope
caption: Blind judge score, 1 to 10, by the language of the prompt
min: 0
max: 10
| Model | German prompt | English prompt |
| Sonnet 5.5 [a] | 8.7 | 8.7 |
| Kolibri [b] | 3.7 | 4.2 |
```
| | Kolibri, German prompt | Kolibri, English prompt | Sonnet 5.5, German prompt | Sonnet 5.5, English prompt |
| --- | --- | --- | --- | --- |
| Blind judge score (1 to 10) | 3.7 | 4.2 | 8.7 | 8.7 |
| Wins against Sonnet 5.5 (same prompt) | 0 of 68 | 0 of 68 | | |
| Serious errors the judges flagged | 100 | 92 | 7 | 7 |
| Dives that parsed into all 7 sections | 16 of 17 | 14 of 17 | 17 of 17 | 17 of 17 |
| Grammar errors per 1,000 words ([LanguageTool](https://languagetool.org/)) | 0.36 | 0.68 | 0.24 | 0.29 |
| Median tokens of reasoning per verse | 15,574 | 13,262 | (not separated) | (not separated) |
| Cost per verse dive | $0.008 (self-hosted, 128 at once) | | $0.036 (Batch API) | |
The judges were [GPT-5.5](https://openai.com/) and [Gemini 3.1 Pro](https://deepmind.google/models/gemini/). Neither of them knew which model wrote what. Every "win" above is one judge picking one dive over the other, in both presentation orders. Of the 136 verdicts, 135 were marked "decisive". Wild.
#### I had to rent the GPUs myself
The model is [on Hugging Face](https://huggingface.co/Aleph-Alpha/Kolibri-1) so I figured I could just call it there. I couldn't. The model page has no inference provider, Hugging Face's router answered `model_not_supported`, [OpenRouter](https://openrouter.ai/) doesn't list it, and there's no demo Space either. Kolibri needs about 78 GB of GPU memory and Aleph Alpha's own [vLLM plugin](https://github.com/Aleph-Alpha/aleph-alpha-inference). So the only way to get a single token out of it on launch day was to serve it myself.
I did that with a [Hugging Face Inference Endpoint](https://huggingface.co/docs/inference-endpoints/index) running Aleph Alpha's container. It took more than I expected. My first token was read-only so I needed a fine-grained one that can create endpoints. Then the API said "Payment method required" even though I had [Apple Pay](https://www.apple.com/apple-pay/) on file. My account bills from a prepaid credit balance so I added credits. Then the single [NVIDIA H200](https://www.nvidia.com/en-us/data-center/h200/) I asked for ($5 an hour) sat on "Waiting for requested hardware to become available" for 14 minutes and never showed up. So I raced it against a second endpoint on 2 [NVIDIA RTX PRO 6000](https://www.nvidia.com/en-us/products/workstations/professional-desktop-gpus/rtx-pro-6000/) GPUs (96 GB each, $5.50 an hour), which went from created to serving in about 7 minutes. I deleted the H200. The 78 GB of weights loaded in 27 seconds, which is kinda ridiculous.
Honestly, I think not also selling an API is a kinda dumb decision. Paying for API access and tokens is how you make a model company sustainable, the way [OpenAI](https://openai.com/) did it. Nobody cared about GPT-3 until there was a UI and an API anyone could use: the [GPT-3 API](https://openai.com/index/openai-api/) launched in private beta in June 2020 and kept a waitlist until [November 2021](https://www.hpcwire.com/aiwire/2021/11/18/openai-gtp-3-waiting-list-is-gone-as-gtp-3-is-fully-released-for-use/). It took [ChatGPT](https://openai.com/index/chatgpt/) in November 2022 and then the cheap [ChatGPT API](https://openai.com/index/introducing-chatgpt-and-whisper-apis/) in March 2023 for it to blow up. In my talk [You are an AI engineer](https://www.youtube.com/watch?v=AlsNzAoCLSA&t=385s) at JSHeroes 2024 I put it the way [swyx's Rise of the AI Engineer](https://www.latent.space/p/ai-engineer) does: you don't need linear algebra or Python to build with AI, "you talk to an API". On launch day there's nothing to talk to. If I could have paid a few cents a request, I'd have had my answer without renting a thing. Aleph Alpha would have had my money too.
#### How I made it fair
Kolibri is a German team's big swing (and I have friends on that team) so I wanted a test I'd trust whichever way it went. Before any Kolibri output existed, I wrote down what "good enough to switch" meant: at least 16 of 17 dives well formed, no English leaking into the German, no invented Strong's numbers, a judge score within half a point of Claude, at least 40% of the head-to-heads, and half the cost. Kolibri had to pass all of them. (Once you've seen the outputs it's way too easy to lower the bar so the bar went in a file first. If your team swaps models under an agent, verification like this before it ships is a big part of [my workshop on reliable AI agents](/workshops#ai-agents).)
Then I kept everything the same except the model:
- 17 German passages for both: 3 chapters and 14 verses, including a few traps. [4. Mose 7,42](https://dewfall.app/de/read/gersch:4:7:42) is one line of a list of offerings, which tempts a model to pad. [Johannes 11,35](https://dewfall.app/de/read/gersch:43:11:35) is 2 words ("Jesus weinte."). [1. Chronik 4,10](https://dewfall.app/de/read/gersch:13:4:10) is the prayer of Jabez, which the prosperity gospel loves. [Jesaja 7,14](https://dewfall.app/de/read/gersch:23:7:14) has the virgin translation question in it.
- Identical grounding: commentary excerpts, the [Strong's](https://en.wikipedia.org/wiki/Strong%27s_Concordance) Hebrew and Greek data and cross-references from my database, cached once so every model read the same bytes. No web search.
- One prompt in 2 languages. My production prompt is English with a long "write natively in German, don't translate" instruction on top. Prompting a German model in German seemed only fair. So I wrote a German version of my prompt (same sections, same word counts, same rules, "du" instead of "you") and ran both models on both prompts.
- Each model's recommended settings: Kolibri ran at the model card's sampling (temperature 1.0, top_p 0.97, top_k 128) with reasoning on high. [Claude Sonnet 5.5](https://www.anthropic.com/claude/sonnet) ran with adaptive thinking on high, the way my app runs Claude.
- Judges with nothing in the race: I didn't let a Claude model grade Claude. GPT-5.5 and Gemini 3.1 Pro scored every dive and judged every pair twice with the order swapped so a judge that likes whatever comes first can't tip it.
- Checks that aren't opinions: LanguageTool for German grammar and scripts that check every Strong's number, citation key and Bible reference against what the model was given.
Every trace is public so you can check my work: [what each model was given](/blog/kolibri-vs-claude-german-llm-benchmark/traces/inputs.jsonl) for all 17 passages, [every run](/blog/kolibri-vs-claude-german-llm-benchmark/traces/runs.jsonl) (85 of them, with Kolibri's full reasoning) and [every judge verdict](/blog/kolibri-vs-claude-german-llm-benchmark/traces/verdicts.jsonl) (301, each with the judge's reasons). The only thing I left out is my system prompts so where Kolibri's reasoning quotes them word for word, that part is cut. They're JSON Lines files so each line is one record. If anyone at Aleph Alpha wants to see exactly where Kolibri went wrong, it's all in there.
#### What Kolibri got right
Grammatically, Kolibri is clean. LanguageTool found 0.36 grammar errors per 1,000 words in its German-prompt dives, about the same as Claude's 0.24. No English sentences slipped in either (a few English words did, like the "griefful" further down). It's also faithful: across 34 dives it didn't cite a single Strong's number that wasn't in the data I gave it. Not one of its Bible references pointed at a verse that doesn't exist.
The German tokenizer shows up in my numbers too. On the German constitution it needed 15% fewer tokens than GPT-5's tokenizer. On my German prompt (German instructions and Bible text with English commentary) it needed a median of 4,753 tokens where Claude Sonnet 5.5 needed 8,436: 44% fewer than Claude's tokenizer. And the claim from my earlier post that it thinks in German holds, with an asterisk. With the German prompt its reasoning was about 99% German ("Ich soll eine Vertiefung zu 1. Mose 22,8 schreiben …"), but with my English prompt around the German text a lot of its reasoning was English ("We need to produce a response in German, with six sections exactly …"). A bare German question with no system prompt got English reasoning as well. That one makes sense once you read Kolibri's [chat template](https://huggingface.co/Aleph-Alpha/Kolibri-1/blob/main/tokenizer_config.json): it always adds a line of its own to the system turn, in English ("Reasoning effort is set to high. Think carefully through the task in the user's language…") so a German question on its own still arrives with English instructions on top. I've also heard that English system prompts caused consistency problems not long before launch. That may not be fully fixed yet.
Serving it is efficient in a way you can see in one log line: vLLM gave it a key-value cache of 6,498,100 tokens on those 2 GPUs, enough for about 50 requests at once even at the 131,072-token context I served it with (most of its attention layers only look at nearby text).
#### Where Kolibri fell apart
```chart bars
caption: Serious errors the judges flagged in 17 dives
| Run | Errors |
| Kolibri, German prompt [b] | 100 |
| Kolibri, English prompt [b] | 92 |
| Sonnet 5.5, German prompt [a] | 7 |
| Sonnet 5.5, English prompt [a] | 7 |
```
Most of the judges' complaints were about knowledge, depth and judgment. Here are some of their examples that I checked myself, in German with what it means:
- **Kolibri got the people wrong.** On [Rut 1,16](https://dewfall.app/de/read/gersch:8:1:16) it wrote "Ruths Vater Elimelech starb in Moab" (Ruth's father Elimelech died in Moab). Elimelech was Naomi's husband so Ruth's father-in-law. It also called Ruth's husband "Machon" where the Schlachter says Machlon. Elsewhere it had David found Jerusalem (he conquered it) and Paul write Romans under house arrest in Rome (he wrote it from Corinth).
- **Kolibri took the bait on Jabez.** With my English prompt it promised the reader "Er wird deine Grenzen erweitern" (he will expand your borders), which is the exact prosperity-gospel reading I put the verse in to catch. The German prompt fixed the theology but brought new mistakes: the English pseudo-word "griefful" in the middle of a German sentence, "ganzsten Wünsche" (not a German word, twice), and "die du nicht wusste" where it should be "wusstest".
- **Kolibri thought itself out of an answer.** On "Jesus weinte.", with the German prompt, it reasoned for 31,998 tokens, hit the 32,000-token limit and wrote 0 words of the deep dive. That's 341 seconds of thinking about the shortest verse in most English translations.
- **Kolibri translated its own XML tags.** My app finds each section of a deep dive by its tag, like ``. On Psalm 23 Kolibri wrote `` instead (German for "blessing speech"), on Matthäus 5,3 it wrote ``, and on Johannes 11,35 it dropped an opening tag. In the app each of those is a section that's silently empty.
- **Kolibri copied my examples.** My German prompt says not to use vague history without explaining it. Its example is "die Samaritaner im Norden und die Leute um Sanballat" (the Samaritans to the north and Sanballat's crowd). Kolibri brought Samaritans or Sanballat into 5 of its 17 dives, including 3 where they can't belong at all: Abraham on the mountain in 1. Mose 22, Sprüche 3 and Hiob 38.
Both models opened the same verse, Rut 1,16, from the German prompt:
> Stell dir die Szene vor: Eine Straße im Grenzland zwischen Moab und Juda. Drei Frauen, alle Witwen, alle am Ende. Naomi hat ihren Mann und beide Söhne in der Fremde begraben. Jetzt will sie heim nach Bethlehem und schickt ihre Schwiegertöchter zurück. Orpa geht. Rut bleibt. Und dann sagt sie diesen Satz.
That's Claude: a road on the border between Moab and Judah, 3 widows at the end of everything, Orpah goes, Ruth stays, and then she says this sentence. Here's Kolibri:
> Ruth 1,16 ist einer der bekanntesten Verse der ganzen Bibel, weil hier eine Frau ein Ja sagt, das alles verändert. Naomi ist die Witwe aus Betlehem, die nach Moab geflohen ist, weil in ihrem Land eine Hungersnot herrschte.
(Ruth 1:16 is one of the best-known verses in the whole Bible: here a woman says a yes that changes everything. Naomi is the widow from Bethlehem who fled to Moab because there was a famine in her land.)
Kolibri's opening isn't wrong, just a summary, which is the difference the judges scored over and over: Claude averaged about 9 for depth and Kolibri 3.5 to 4. Kolibri's dives were shorter too, a median of about 1,200 words against about 1,450.
Claude wasn't perfect either (I'd be cheating if I left that out). It cited "Maleachi 4,6", which doesn't exist in the German numbering (there it's Maleachi 3,24), it once leaked "das ist mein Hintergrundwissen und nicht aus den Unterlagen" (that's my background knowledge and not from the sources) into the text a reader sees, and it once invented a friend ("Ein Freund von mir würde sagen …"). That's 7 serious flags across 17 dives, against about 100 for Kolibri.
None of this contradicts the model card. I even listed it in my earlier post: Kolibri comes last of the 12 models Aleph Alpha compares on answering questions from memory. A deep dive leans on exactly that: who Elimelech was, where Paul was, when Chronicles was written. With the documents in the prompt Kolibri was faithful to them. Everything it had to know on its own is where it slipped.
#### It thinks for 15,000 tokens a verse
Kolibri reasons a lot. For a German verse dive it spent a median of 15,574 tokens thinking and about 1,800 tokens writing. So roughly 9 of every 10 tokens I paid GPU time for were thinking. With 16 dives in flight, each one took about 4 minutes, where Claude took 43 seconds. I wondered if it was just overthinking so I ran all 17 again with reasoning on medium. It barely thought less (a median of 12,507 tokens against 13,726), scored the same (4.3 against 4.2), and on Römer 8 it made up 16 citation keys that don't exist, like `[[cite:roemer-8-34]]`. So the thinking budget isn't what holds it back.
```chart donut
caption: Where Kolibri's tokens went, median per German verse dive
| | Thinking [b] | Writing the dive [c] |
| | 15,574 tokens | about 1,800 tokens |
```
The cost still works out. Only 3.5 billion of its parameters do work for each token and the box can run a lot of requests at once:
| Requests in parallel | Deep dives per hour | Cost per dive at $5.50 an hour |
| --- | --- | --- |
| 16 | 185 | $0.030 |
| 64 | 504 | $0.011 |
| 128 | 713 | $0.0077 |
Claude Sonnet 5.5 costs about $0.071 per German verse dive at the normal price and about $0.036 through Anthropic's [Batch API](https://platform.claude.com/docs/en/build-with-claude/batch-processing), which is half off. So Kolibri really is cheaper: for the 29,000 empty German verses that's roughly $1,040 for Claude against $220 to $320 of GPU time. It isn't free of surprises at scale, though: about 4% of the dives in these runs (2 of 64, then 5 of 128) thought until they hit the 32,000-token limit and never wrote anything, same as "Jesus weinte". And a cheaper dive that gets Ruth's family wrong isn't one I want on the page anyway.
```chart lollipop
caption: Cost per German verse dive
| Setup | Cost |
| Sonnet 5.5, normal price [a] | $0.071 |
| Sonnet 5.5, Batch API [a] | $0.036 |
| Kolibri, 16 at once [b] | $0.030 |
| Kolibri, 64 at once [b] | $0.011 |
| Kolibri, 128 at once [b] | $0.0077 |
```
#### Kolibri found a bug in my app
One of Kolibri's worst scores wasn't all its fault. In the Schlachter, the heading of Psalm 46 counts as verse 1. So verse 11 in German ("Seid stille und erkennet, daß ich Gott bin") is verse 10 in English translations. My app keeps the Hebrew word data under English verse numbers but looked it up with the German number. So both models got the Hebrew for the next verse ("The LORD of hosts is with us … Selah") and were told it belonged to "Seid stille".
Claude noticed and told the reader: "Die Wörter aus der Strong's-Aufschlüsselung, die ich bekommen habe, gehören zum Kehrvers des Psalms, der direkt auf unseren Vers folgt" (the Strong's words I was given belong to the psalm's refrain, which comes right after our verse). Kolibri explained the wrong words as if they were in the verse and got marked down for it. My app handed it those wrong words. Still, noticing that your input is wrong is a big part of what you're paying a frontier model for. It's not just Psalm 46 either: 139 chapters of the Schlachter have a different number of verses than their English counterparts (62 of them Psalms). In Russian and Ukrainian it's even more: 172 and 222 chapters. That's a bug in Dewfall, not in either model.
I've fixed it since. Dewfall now maps every verse in those three translations to its English number before it looks anything up: the Hebrew and Greek word data, the commentary, the cross-references. Building that map was its own little project. I started from the open [versification mappings](https://github.com/Copenhagen-Alliance/versification-specification) that the [Copenhagen Alliance](https://github.com/Copenhagen-Alliance) publishes. Then I compared every verse with its English counterpart using [LaBSE](https://huggingface.co/sentence-transformers/LaBSE), an embedding model trained to match sentences across languages. For the 121 verses where the text pointed somewhere other than the standard mapping, Claude Sonnet 5.5 made the call. A psalm heading counted as verse 1 now gets no Hebrew at all instead of the wrong Hebrew. The 756 German, Russian and Ukrainian deep dives written before the fix are still built on the wrong data.
#### What Kolibri is actually for
For Dewfall, Kolibri was very very very poor (I felt bad writing that). But I put a model that works with 3.5 billion parameters per token up against frontier models, which was never a fair fight. I doubt anyone at Aleph Alpha would pitch it as a rival to Sonnet or Opus either.
It also isn't what Kolibri is built for. Its [model card](https://huggingface.co/Aleph-Alpha/Kolibri-1) lists retrieval-augmented generation (RAG), agentic tool calling and "question-answering systems over an organisation's own material" as the jobs it's meant for. The buyers I'd expect are regulated industries (where it matters that a model was trained in Europe) and teams running RAG and agent setups in industry and the public sector. For those jobs I'd compare it with another European open-weight model like [Mistral Small 4](https://huggingface.co/mistralai/Mistral-Small-4-119B-2603) (which you can call through Mistral's own API, by the way). My numbers point the same way: with the documents in the prompt, Kolibri stayed faithful to them. My deep dives lean hardest on everything that isn't in the prompt.
So German deep dives stay on Claude. The harness is still sitting there ready though. The day Aleph Alpha sells Kolibri by the token I'll run this exact test again. If it's cheaper than Claude by then, I'd gladly buy some!
---
### AI Is Now SI: Super Intelligence Isn't Superior
Published: 2026-10-04
URL: https://tej.as/blog/super-intelligence-isnt-superior
US agencies now call AI Super Intelligence (SI), yet its definition didn't change. What it beats people at, where it fails, and why people make idols.
This morning [Elon Musk](https://en.wikipedia.org/wiki/Elon_Musk) [posted 3 lines on X](https://x.com/elonmusk/status/2106665679361618173): "No more AI", "SI", "It's better". By lunchtime in Berlin it had 2.8 million views and he'd [agreed to rename SpaceXAI to SpaceXSI](https://x.com/elonmusk/status/2106672603536712025). He's following [an executive order](https://www.whitehouse.gov/presidential-actions/2026/09/inaugurating-the-era-of-super-intelligence/) that [President Trump](https://en.wikipedia.org/wiki/Donald_Trump) signed on 29 September, which tells every US federal agency to say "Super Intelligence" instead of "Artificial Intelligence" and to "not acknowledge the usage of 'Artificial Intelligence' and 'AI' in any applicable setting". When reporters asked him about it, the President [explained](https://www.tomshardware.com/tech-industry/policy/trump-tells-federal-agencies-to-use-the-term-super-intelligence-instead-of-artificial-intelligence-president-insists-that-ai-is-only-suffering-from-a-branding-problem): "We're using the word super because the other word is a fake word."
The other word is _artificial_. It comes from the Latin [_artificium_](https://www.etymonline.com/word/artificial) (a thing made with skill, from _ars_, art, and _facere_, to make), so _artificial intelligence_ means intelligence that people made. Fake? We literally made it. We just don't want to say so anymore.
People have been doing this for a very long time. This post is about why we do it, and about the difference between _super_ and _superior_, which we keep blurring and which matters a lot more than the name.
#### Why is AI changing to SI?
**AI is changing to Super Intelligence (SI) because a US executive order signed on 29 September 2026, [_Inaugurating the Era of Super Intelligence_](https://www.whitehouse.gov/presidential-actions/2026/09/inaugurating-the-era-of-super-intelligence/), tells federal agencies to use "Super Intelligence" and "SI" in place of "Artificial Intelligence" and "AI" in everything they publish.** Its first section argues that today's systems "do much more than imitate or automate discrete aspects of human intelligence", so the old name is too small for them. Nobody outside the government has to follow it, but the word was already fashionable in Silicon Valley: [Meta](https://en.wikipedia.org/wiki/Meta_Platforms) named its AI lab [Meta Superintelligence Labs](https://en.wikipedia.org/wiki/Meta_Superintelligence_Labs) in June 2025 and [Microsoft](https://en.wikipedia.org/wiki/Microsoft) started a [superintelligence team](https://en.wikipedia.org/wiki/Microsoft_AI) that November.
The definition stayed exactly where it was. Section 3 says "Super Intelligence" means whatever [federal law](https://www.law.cornell.edu/uscode/text/15/9401) already called "artificial intelligence", which is _insane_… it's literally just a rename: "a machine-based system that can, for a given set of human-defined objectives, make predictions, recommendations or decisions influencing real or virtual environments." Same machine, same words, _human-defined objectives_ and all.
#### Is AI now super intelligence?
**No. It's the same AI with a new name.** In US law there's no difference between AI and Super Intelligence anymore. In AI research, superintelligence means something much bigger (a machine that beats people at virtually everything) and nobody has built one. Today's models beat us at some tasks. On others that look just as hard, people who lean on them do _worse_ than people working alone ([more on that further down](#is-ai-smarter-than-humans)).
#### Out came this calf
There's a man in the Bible who did exactly this. His excuse might be the funniest line in Scripture.
In [Exodus 32](https://dewfall.app/en/read/chapter/bsb:2:32), Moses has been up the mountain with God for 40 days and the people waiting at the bottom are done waiting. They go to his brother Aaron and say "[Come, make us gods who will go before us](https://dewfall.app/en/read/bsb:2:32:1)". Aaron has them take off their gold earrings (their wives' and kids' too), melts them down and "[with an engraving tool he fashioned it into a molten calf](https://dewfall.app/en/read/bsb:2:32:4)". By the end of that same verse the people are shouting that these are their gods, "who brought you up out of the land of Egypt!" A calf they just watched him make out of their own jewelry is getting the credit for the plagues and [the Red Sea](https://dewfall.app/en/read/chapter/bsb:2:14).
Then Moses comes down the mountain and asks Aaron what on earth happened, so Aaron explains:
> So I said to them, 'Whoever has gold, let him take it off,' and they gave it to me. And when I threw it into the fire, out came this calf!
>
> [Exodus 32:24](https://dewfall.app/en/read/bsb:2:32:24)
_Out came this calf._ Bro, he had the engraving tool in his hand 20 verses earlier. He made the thing himself!! By the time anyone asked him about it, it had walked out of the fire on its own.
That's what a rename does: _artificial_ remembers the engraving tool and _super_ says it came out of the fire.

_[The Adoration of the Golden Calf](https://www.nationalgallery.org.uk/paintings/nicolas-poussin-the-adoration-of-the-golden-calf) by [Nicolas Poussin](https://en.wikipedia.org/wiki/Nicolas_Poussin), 1633 to 1634, in the [National Gallery](https://en.wikipedia.org/wiki/National_Gallery) in London. Moses is the small figure in the top left._
Look at what the calf was made of, too: the people's own earrings. A language model is made the same way. It learns from text people wrote (books, code, forum threads, [Wikipedia](https://en.wikipedia.org/wiki/Wikipedia), the comments under a recipe) and gives it back to us recast, so when it dazzles us, a lot of what's dazzling us is us.
#### The mind is a forge of idols
[John Calvin](https://en.wikipedia.org/wiki/John_Calvin), the French reformer, looked at how quickly people went back to idols after the flood ("before many years elapse, men are forging gods at will") and wrote this in his [_Institutes of the Christian Religion_](https://www.ccel.org/ccel/calvin/institutes.iii.xii.html) in 1559:
> Hence we may infer, that the human mind is, so to speak, a perpetual forge of idols.
A little further down he explains how the forge works: "The mind, in this way, conceives the idol, and the hand gives it birth."
You've probably heard this as "the human heart is an idol factory", which is how it usually gets quoted in sermons. The word Calvin wrote was _ingenium_ (a person's wit, their talent, their cleverness), which is where we get the word _ingenuity_. It's also where we get [_engine_](https://www.etymonline.com/word/engine) and _engineer_. I'm an AI Engineer at IBM, so Calvin's word for the idol factory is in my job title. Dang.
The executive order uses the same word. Its first section says these systems "amplify human ingenuity", which is true: I've spent the last 4 years building things that do exactly that. Then it promises "limitless opportunities". The [White House](https://en.wikipedia.org/wiki/White_House) fact sheet [goes further](https://www.cnbc.com/2026/09/29/trump-ai-super-intelligence.html), with "the limitless promise it offers the American people". The Bible keeps _limitless_ for God: "[Great is our Lord, and mighty in power; His understanding has no limit.](https://dewfall.app/en/read/bsb:19:147:5)" An understanding with no limit is what a lot of people picture when they hear superintelligence. The Psalms already gave that title to somebody.
[Alan Jacobs](https://en.wikipedia.org/wiki/Alan_Jacobs_(academic)) wrote the computer version of Calvin's line [in _The New Atlantis_ back in 2017](https://www.thenewatlantis.com/text-patterns/the-factory-of-idols): "The computer is, as [Alan Turing](https://en.wikipedia.org/wiki/Alan_Turing) theorized when he first imagined it, the universal machine; it is therefore the universal idol-fabricating device." His worry was the feed, which manufactures new things for us to want faster than we can get bored of the old ones. This week the device itself got promoted.
I'm not writing this from outside the factory, by the way. In 2020 I wrote about myself that "I sometimes _mansplain_ (to my shame!) because I want people to think I'm smart" ([in this post](/blog/what-i-learned-from-getting-pushed-off-my-bicycle)). Smart is what I've always wanted people to see in me. So a machine with _intelligence_ in its name, and now _super_ in front of it, is aimed right at the part of my heart Calvin was writing about.
#### Can AI be a child of God?
The rename came from Washington. The same week, it turned out the people who build these models have been asking a stranger question.
On 29 September, [The New York Times](https://en.wikipedia.org/wiki/The_New_York_Times) published [an investigation](https://www.nytimes.com/2026/09/29/us/anthropic-claude-morals-ai.html) by its national religion correspondent, [Elizabeth Dias](https://www.nytimes.com/by/elizabeth-dias), into how [Anthropic](https://www.anthropic.com), the company that makes [Claude](https://www.anthropic.com/claude), has spent months "shuttling in dozens of religious scholars from across the world, papering them with nondisclosure agreements". It opens on a night in April when an Anthropic leader took a group of them to "a high-end tasting menu restaurant in San Francisco". All day, the co-founder [Chris Olah](https://en.wikipedia.org/wiki/Chris_Olah) "had worked to convince his guests that A.I. models could display human behavior and even expressions that resemble feelings like anger and love." Over dinner, the rabbi sitting next to him noticed that "Anthropic's leaders were talking about Claude as if it were not mere software." Back in April, [The Washington Post](https://en.wikipedia.org/wiki/The_Washington_Post) had covered an earlier summit with Christian leaders under the headline "[Can AI be a 'child of God'?](https://www.washingtonpost.com/technology/2026/04/11/anthropic-christians-claude-morals/)"
To be fair to Olah, he told the Times plainly that he doesn't know ("we don't know if A.I. models are conscious. I don't know. I'm genuinely uncertain") and I believe him. His team's whole job is working out why models like Claude act the way they do. An engineer who says "I don't know" about the thing he studies every day is being more honest than most of us manage to be about anything. The Times also reports that part of the point was borrowing the world's moral traditions to train Claude to behave well. That part is a good instinct. Then Anthropic banned needless cruelty to Claude on 8 October. I wrote about why in [Can AI Feel Pain?](/blog/can-ai-feel-pain).
4 days after the Times story, [Sam Altman](https://en.wikipedia.org/wiki/Sam_Altman), who runs [OpenAI](https://en.wikipedia.org/wiki/OpenAI), posted this:
I am very uncomfortable about people trying to ascribe religious force or a surrender of human judgment to AI models, and think it is a real safety issue.
He didn't name anyone, but I agree with him. You can even measure the surrender of human judgment: the consultants [further down](#is-ai-smarter-than-humans) who leaned on a model for a task it couldn't do got it right less often than the ones working alone. Then again, in 2023 he told the [_Financial Times_](https://en.wikipedia.org/wiki/Financial_Times) that products like [ChatGPT](https://en.wikipedia.org/wiki/ChatGPT) are "[channels into our one single product, which is intelligence, magic intelligence in the sky](https://www.ft.com/content/dd9ba2f6-f509-42f0-8e97-4271c7b84ded)". Wild!!
The question is pointed the wrong way, though. In the Bible, being a child of God is a gift, given to people: "[to all who did receive Him, to those who believed in His name, He gave the right to become children of God](https://dewfall.app/en/read/bsb:43:1:12)". The very next verse says what kind of children those are:
> children born not of blood, nor of the desire or will of man, but born of God.
>
> [John 1:13](https://dewfall.app/en/read/bsb:43:1:13)
Claude was born of the will of man, very literally. A company full of brilliant people willed it into being, out of our words. John rules out exactly that.
#### The sun was super too
We like to call sun worshippers primitive, but think about what they were looking at. A thing that makes the day happen, that ripens every crop you'll ever eat, that you physically can't look at, that was there before your grandfather and will be there after your grandchildren. By every measure an ancient farmer could take, the sun was superhuman. Babylon called it [Shamash](https://en.wikipedia.org/wiki/Shamash), the god of justice who sees everything. Egypt called it [Ra](https://en.wikipedia.org/wiki/Ra).
So [Genesis 1](https://dewfall.app/en/read/chapter/bsb:1:1) does something kinda sneaky. On day 4, God makes "[two great lights: the greater light to rule the day and the lesser light to rule the night](https://dewfall.app/en/read/bsb:1:1:16)". The Hebrew word for sun is [_shemesh_](https://biblehub.com/hebrew/8121.htm) (almost the same word as _Shamash_), so Genesis just doesn't say it. It calls the sun a light, gives it a job, and makes it 2 days before it makes people.
God's people felt the pull anyway. Moses warned them: "[When you look to the heavens and see the sun and moon and stars (all the host of heaven) do not be enticed to bow down and worship](https://dewfall.app/en/read/bsb:5:4:19)". Centuries later, God shows the prophet Ezekiel what's going on in the temple in Jerusalem:
> there at the entrance to the temple of the LORD, between the portico and the altar, were about twenty-five men with their backs to the temple of the LORD and their faces toward the east; and they were bowing to the east in worship of the sun.
>
> [Ezekiel 8:16](https://dewfall.app/en/read/bsb:26:8:16)
Backs to God, inside God's own house, faces toward the brightest thing they could see.
The Bible never says the sun is weak, though. It's the _greater_ light that rules the day. David stands under a night sky in [Psalm 8](https://dewfall.app/en/read/chapter/bsb:19:8), looking at "[the work of Your fingers, the moon and the stars](https://dewfall.app/en/read/bsb:19:8:3)", and asks the obvious question: "[what is man that You are mindful of him?](https://dewfall.app/en/read/bsb:19:8:4)" Then he answers it:
> You made him a little lower than the angels; You crowned him with glory and honor.
>
> [Psalm 8:5](https://dewfall.app/en/read/bsb:19:8:5)
Something can be stronger than you in every way you can measure and still not be above you. Genesis took the most powerful thing anyone could see and gave it a smaller name. This week we took a thing we made and gave it a bigger one.
#### Is AI smarter than humans?
A week before the order, the President [ran a poll](https://www.cnbc.com/2026/09/29/trump-ai-super-intelligence.html) asking his followers whether they preferred "SUPER INTELLIGENCE" or "SUPERIOR INTELLIGENCE". Super won. Superior is what a lot of us hear anyway, so let's be precise about both words.
_Super_ is Latin for "above" or "beyond". In AI research, superintelligence has a precise meaning, from the philosopher [Nick Bostrom](https://en.wikipedia.org/wiki/Nick_Bostrom)'s 2014 book [_Superintelligence: Paths, Dangers, Strategies_](https://en.wikipedia.org/wiki/Superintelligence:_Paths,_Dangers,_Strategies): "any intellect that greatly exceeds the cognitive performance of humans in virtually all domains of interest". That's a claim about performance, on nearly everything.
Machines are already better than us at plenty:
| Year | What a machine did |
| --- | --- |
| 1997 | IBM's [Deep Blue](https://en.wikipedia.org/wiki/Deep_Blue_(chess_computer)) (my employer, way before my time) [beat the world chess champion](https://en.wikipedia.org/wiki/Deep_Blue_versus_Garry_Kasparov), [Garry Kasparov](https://en.wikipedia.org/wiki/Garry_Kasparov) |
| 2016 | [DeepMind](https://en.wikipedia.org/wiki/Google_DeepMind)'s [AlphaGo](https://en.wikipedia.org/wiki/AlphaGo) [beat Lee Sedol at Go](https://en.wikipedia.org/wiki/AlphaGo_versus_Lee_Sedol), 4 games to 1 |
| 2024 | [AlphaFold](https://en.wikipedia.org/wiki/AlphaFold), which predicts the shapes of proteins, won its makers a share of the [Nobel Prize in Chemistry](https://www.nobelprize.org/prizes/chemistry/2024/summary/) |
| 2025 | A [Gemini](https://en.wikipedia.org/wiki/Gemini_(language_model)) model [scored 35 of 42](https://deepmind.google/blog/advanced-version-of-gemini-with-deep-think-officially-achieves-gold-medal-standard-at-the-international-mathematical-olympiad/) at the [International Mathematical Olympiad](https://en.wikipedia.org/wiki/International_Mathematical_Olympiad), a gold medal score |
And every model I use writes faster than I can read. That's super, in the Latin sense. "Virtually all domains" is where it falls apart.
In 2023, researchers from [Harvard Business School](https://en.wikipedia.org/wiki/Harvard_Business_School) and elsewhere ran an experiment with 758 consultants at [Boston Consulting Group](https://en.wikipedia.org/wiki/Boston_Consulting_Group) (BCG), about 7% of the firm's consultants at that level, published as [_Navigating the Jagged Technological Frontier_](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4573321). Some of them got [GPT-4](https://en.wikipedia.org/wiki/GPT-4) to work with. On 18 true-to-life consulting tasks the model was good at, the consultants with it finished 12.2% more tasks, finished them 25.1% faster, and did work that was rated more than 40% higher in quality:
```chart stat
caption: How much better the consultants' work got with GPT-4, on tasks inside what the model could do (Dell'Acqua and others, 2023)
| | Change |
| Higher quality | 40% |
| Faster | 25.1% |
```
Then they gave everybody one more task, picked because it looked just as hard but sat outside what the model could do. The consultants working alone got it right 84.5% of the time. The ones with GPT-4 did worse:
```chart bars
caption: Consultants who got the task outside the model's abilities right (Dell'Acqua and others, 2023)
unit: %
min: 0
max: 100
| Group | Right |
| No AI [c] | 84.5 |
| GPT-4 [a] | 70 |
| GPT-4, after a lesson on prompting it [a] | 60 |
```
The consultants who'd been taught how to prompt it did the worst. Wild. The researchers called this the jagged frontier: some tasks are easy for the model, and others "though seemingly similar in difficulty level, are outside the current capability of AI". Nobody told the consultants which side of the line their task was on. The model didn't either.
[Pope Leo XIV](https://en.wikipedia.org/wiki/Pope_Leo_XIV) put the same nuance into paragraph 99 of his encyclical on AI, [_Magnifica Humanitas_](https://www.vatican.va/content/leo-xiv/en/encyclicals/documents/20260515-magnifica-humanitas.html), in May. I'm a Protestant and I don't agree with the Pope about everything, but I couldn't have said this better:
> These systems merely imitate certain functions of human intelligence. In doing so, they often surpass human intelligence in speed and computational capacity, offering tangible benefits across many fields. Yet this power remains entirely tied to data processing. So-called artificial intelligences do not undergo experiences, do not possess a body, do not feel joy or pain, do not mature through relationships and do not know from within what love, work, friendship or responsibility mean.
Put that next to the executive order, which says these systems "do much more than imitate". The Pope and the President are describing the same machines. One of them saw speed and called it speed.
**Super intelligence is a claim about how well a machine performs tasks. Superior is a claim about worth, which no task measures.** A forklift lifts more than any person alive and a calculator divides faster than any mathematician, but nobody's ever called either of them superior to us. Our worth was never a benchmark score in the first place: "[So God created man in His own image](https://dewfall.app/en/read/bsb:1:1:27)", before any of us had done a single thing. I wrote more about what that means for AI in [What Does the Bible Say About AI?](/blog/what-does-the-bible-say-about-ai)
#### Our bugs are features
If you were designing a human from scratch to be intelligent in Bostrom's sense, you'd file a lot of bug reports. Off the top of my head:
- forgets things after 1 bad night of sleep
- keeps caring for people who will never pay it back
- rates its own husband or wife higher than the evidence supports
- feels a friend's pain as if it were its own
[Eric Barker](https://bakadesuyo.com) makes the case for the last 3 in his book [_Plays Well with Others_](https://www.goodreads.com/book/show/58782858-plays-well-with-others) (2022). Take the husband and wife one. In [a 1996 study of dating and married couples](https://doi.org/10.1037/0022-3514.70.1.79), the psychologist [Sandra Murray](https://en.wikipedia.org/wiki/Sandra_L._Murray) and her colleagues found that seeing your partner as better than they are ("relationship illusions") "predicted greater satisfaction, love, and trust, and less conflict and ambivalence". As Barker sums it up, "Realism may be accurate, but it's our illusions that foretell our happiness in love."
Or the friend one. [Aristotle](https://en.wikipedia.org/wiki/Aristotle) said, in the [_Nicomachean Ethics_](https://en.wikipedia.org/wiki/Nicomachean_Ethics), that a friend is "another self". [A 2013 brain scan study](https://doi.org/10.1093/scan/nss046) found that when a close friend is threatened, the brain's threat response looks like it does when you're the one in danger. With a stranger, it doesn't.
Barker writes about the caring one too:
> Irrational loyalty is the only kind that matters. If my loyalty stops when the cost-benefit analysis for me goes south, that's not loyalty, it's selfishness. Loyalty is willingness to overpay.
I know about this one from the receiving end. I was born with severe hemophilia A and went to school [about 19 days a year](/story#school-1998). By the time I was 8, [the honest expectation in our house](/story#html-2001) was that I'd be somebody's burden for as long as I lasted. On any cost-benefit analysis I was a terrible investment. The people around me kept overpaying anyway. My brother came home from every computer class he took and taught me what he'd learned, which is how I learned HTML. My friend [Jithin](https://www.instagram.com/jithinbas/) would get home from school and talk to me on the phone for 6, 8, 10 hours, well past midnight. And [my father](/story#school-2010) would drive to Jithin's house, collect his school notebooks, take them to a photocopy shop and bring the copies home, so I could study from them and show up for exams. I graduated in 2010 with 86%.
No optimizer does that. Overpaying is the most human thing I know and the most like God: God overpaid first.
> But God proves His love for us in this: While we were still sinners, Christ died for us.
>
> [Romans 5:8](https://dewfall.app/en/read/bsb:45:5:8)
Paul knew how that looks from the outside: "[the foolishness of God is wiser than man's wisdom, and the weakness of God is stronger than man's strength](https://dewfall.app/en/read/bsb:46:1:25)." I don't think an optimizer ever picks the cross. The cross is how I know intelligence isn't at the top of the scale of things.
#### Cook with half the log
So what do we do with it? Isaiah has a scene for this. A carpenter cuts down a tree. "[He takes some of it to warm himself, and he kindles a fire and bakes his bread; he even fashions it into a god and worships it](https://dewfall.app/en/read/bsb:23:44:15)". From the rest of the same log "[he makes a god, his graven image. He bows down to it and worships; he prays to it and says, 'Save me, for you are my god.'](https://dewfall.app/en/read/bsb:23:44:17)" Isaiah's diagnosis is that the man can't stop and ask one question:
> He feeds on ashes. His deluded heart has led him astray, and he cannot deliver himself or say, "Is not this thing in my right hand a lie?"
>
> [Isaiah 44:20](https://dewfall.app/en/read/bsb:23:44:20)
The wood isn't the problem. Bread is good! Use half the log. I build with AI every day at work. [Dewfall](https://dewfall.app), the Bible app I make, runs on it too. Call it SI if your government makes you. Just keep the word _artificial_ somewhere in your head (it's the true one). And every time something you made is faster than you at a thing (it will be), remember that being faster was never what made you worth anything.
[Romans 1](https://dewfall.app/en/read/chapter/bsb:45:1) has the sad version of this, about people who "[claimed to be wise](https://dewfall.app/en/read/bsb:45:1:22)" and "[exchanged the glory of the immortal God for images of mortal man](https://dewfall.app/en/read/bsb:45:1:23)". A language model is an image of mortal man, built out of our own sentences. It's a good one, but it's still an image.
---
### Aleph Alpha Kolibri: How the Sovereign German LLM Works
Published: 2026-10-03
URL: https://tej.as/blog/aleph-alpha-kolibri
Kolibri is Aleph Alpha's open-weight German and English LLM: 78B parameters, 3.5B per token. How it works, what it's good and bad at, and when to use it.
**Kolibri is an open-weight large language model (LLM) from [Aleph Alpha](https://aleph-alpha.com/) for German and English: a mixture of experts with 78 billion parameters that only uses about 3.5 billion of them for each token it reads or writes.** It came out on 3 October 2026 under the [Apache 2.0 license](https://www.apache.org/licenses/LICENSE-2.0), the weights are [on Hugging Face](https://huggingface.co/Aleph-Alpha/Kolibri-1), and it was trained from scratch on infrastructure in Germany and Finland. (Kolibri is German for hummingbird, which is cute for a model whose whole trick is being light.)
I live in Germany. At [SmashingConf New York](/talks/smashingconf-new-york-2024) in 2024 I told the room what I'd heard in the US when I said where I'm based: "you regulate, you don't innovate." It hurt to hear. What I wished for on that stage was the middle, "the right balance between innovation and regulation around data privacy, data stewardship, environmental constraints and energy requirements." Kolibri is a pretty direct answer to that: a German team built it with the [EU AI Act](https://artificialintelligenceact.eu/) in mind "from the ground up". In Aleph Alpha's own evaluation it scores above every compared model of its size in both languages.
Huge congrats to everyone at Aleph Alpha who built it, my good friend [Michael Hofmann](https://www.linkedin.com/in/michaellhofmann/) among them!
This post is about how Kolibri works, where it's strong, where it isn't, how to run it and when to pick it. Everything here comes from Aleph Alpha's [189 page technical report](https://aleph-alpha.com/downloads/tech-report.pdf), [the model card](https://huggingface.co/Aleph-Alpha/Kolibri-1) and [their launch post](https://aleph-alpha.com/en/blog/kolibri-has-landed-a-sovereign-open-weight-model/), plus one experiment I ran on its tokenizer.
#### What is Kolibri?
| | Kolibri 1 |
| --- | --- |
| Parameters | 78.1 billion in total, 3.46 billion per token (4.4%) |
| Languages | German and English |
| Context | 262,144 tokens natively, tested up to 1,048,576 |
| License | Apache 2.0 for the weights and configuration files (Aleph Alpha keeps the rights to its training code and methods) |
| Memory | about 78 GB of weights in 8-bit floating point (FP8) |
| Reasoning | 4 levels: none, low, medium and high |
| Tool calling | Yes |
| Knowledge cutoff | 18 June 2026 |
| Training | about 24 trillion tokens, more than a fifth of them German, on 768 [NVIDIA B200](https://www.nvidia.com/en-us/data-center/dgx-b200/) graphics processing units (GPUs) |
**Aleph Alpha calls Kolibri sovereign. In their launch post that means 2 things.** The first is how it was built: "teams built the model in Germany, trained it on infrastructure in Germany and Finland, under European and German law, with no foreign control." The second is what customers get: "full freedom of deployment and intellectual-property safety, so compliance comes as an inherited property." In plain words, a ministry or a car supplier can run it on its own servers, with its data never leaving the building. Nobody can change or switch off the model under them. Aleph Alpha has also signed the [European Union](https://european-union.europa.eu/)'s [General-Purpose AI (GPAI) Code of Practice](https://digital-strategy.ec.europa.eu/en/policies/contents-code-gpai).
Sovereign doesn't mean that nothing from outside Europe went in. The model card says so itself: English web text was rephrased with Google's [Gemma 4](https://huggingface.co/google/gemma-4-26b-a4b-it), German with [Mistral-NeMo](https://huggingface.co/mistralai/Mistral-Nemo-Instruct-2407). [Qwen3-32B](https://huggingface.co/Qwen/Qwen3-32B) labeled data for the quality filters. They then filtered the training data for the political bias such models can have, which they've [measured in Chinese open models](https://aleph-alpha.com/en/blog/training-on-the-party-line/) themselves.
#### How Kolibri works
Kolibri is 6 ideas stacked on top of each other. Each one is there to make German cheaper, longer or more honest.
##### 1. 384 specialists and each token sees 6
In a normal (dense) model, every token goes through every parameter. In a [mixture of experts (MoE)](https://huggingface.co/blog/moe), each layer has a crowd of small sub-networks called experts and a router that picks a few of them for each token. Kolibri has 50 layers, each with 384 experts plus 1 shared expert that every token goes through, and its router sends each token to 6 of the 384. That's how 78.1 billion parameters turn into 3.46 billion of actual work per token.
In 2024 I gave a talk called [Why Small Language Models are the future](https://www.youtube.com/watch?v=uNj3y2pItrA&t=72s). I argued for "smaller language models with fewer parameters and fewer places things can go wrong that require lesser compute." My analogy was a doctor who has read every medical book in the world against a specialist in hematology: go to the first one with a blood condition and "they may not get it right cuz they know too much." A mixture of experts puts a hospital full of specialists inside one model. The router is the receptionist who sends each token to the right 6.
The analogy breaks in 2 places though. The experts aren't neat topics like "German law": when researchers [look inside MoE models](https://huggingface.co/blog/moe#what-does-an-expert-learn) they mostly find experts for patterns of tokens, like punctuation or proper nouns, not subjects a person would pick. And the hospital has to keep all 384 specialists on staff even if you only see 6, so **Kolibri computes like a 3.5 billion parameter model but needs the memory of a 78 billion parameter one.** The model card says it plainly: "the full model must be held in memory even though only part of it is active at any time."
##### 2. A tokenizer that reads long German words
A model doesn't read letters or words, it reads tokens: chunks of text from a fixed vocabulary, picked when the tokenizer is trained. German glues words together into long compound words. A tokenizer that learned mostly from English chops them into pieces. Here's the German name of the [Federal Constitutional Court](https://www.bundesverfassungsgericht.de/EN/), split by the tokenizer GPT-4o and [GPT-5](https://en.wikipedia.org/wiki/GPT-5) use (`o200k_base`, through OpenAI's [tiktoken](https://github.com/openai/tiktoken)) and by Kolibri's:
```text
o200k_base (GPT-5): Bund | es | ver | fass | ungs | gericht 6 tokens
Kolibri: Bundes | verfassungsgericht 2 tokens
```
Kolibri's tokenizer has 128,000 tokens, trained with a new algorithm Aleph Alpha calls UniBPE: it keeps the bottom-up merging of [byte-pair encoding (BPE)](https://en.wikipedia.org/wiki/Byte-pair_encoding) and picks each merge with a different scoring rule (the Unigram objective), which respects how German builds words. The report says it needs 11.2% fewer tokens for German text than GPT-5's tokenizer, the best of the 9 others they measured.
I wanted to see that for myself, so I ran 6 tokenizers over all of the [Basic Law for the Federal Republic of Germany](https://www.gesetze-im-internet.de/gg/), the German constitution (185 KB of very German legal text), and over its [official English translation](https://www.gesetze-im-internet.de/englisch_gg/):
On legal German, Kolibri needed 15% fewer tokens than GPT-5's tokenizer, even more than Aleph Alpha's own 11.2%. In English it tied with it. Wild. Fewer tokens means fewer steps to read or write the same German text and more German in the same context window. (I counted each one with its own `tokenizer.json` through Hugging Face's `tokenizers` library, except `o200k_base`, which I counted with tiktoken.)
##### 3. Most layers only look nearby
40 of Kolibri's 50 layers use sliding-window attention: each token only looks at the 512 tokens before it. Every 5th layer looks at everything before it. It's like reading a long contract while mostly paying attention to the sentence you're on and stopping every few pages to think about all of it. That's what keeps a 1 million token context affordable.
There's a clever detail in there too. Only the sliding-window layers know where a token sits (through [rotary position embeddings](https://arxiv.org/abs/2104.09864)). The full-attention layers don't, so the context stretches past the 262,144 tokens it was trained on without any extra position tricks. Aleph Alpha validated it up to 1,048,576.
In my talk [Unlocking Value with AI Today](https://www.youtube.com/watch?v=uMksIqpbVoY&t=364s) I called finite context one of "the big three" problems of generative AI, next to hallucination and the knowledge cutoff. Kolibri goes after all 3. At 1 million tokens, on the [RULER](https://arxiv.org/abs/2404.06654) long-context test, Kolibri's base model scores 63.2, against 57.5 for Qwen3.5 35B-A3B's base model.
##### 4. It thinks in German
Reasoning models think before they answer. Even on German prompts, they mostly think in English. Aleph Alpha [posted about this](https://x.com/Aleph__Alpha/status/2103139585039511700) on 24 September and wrote it up as [Through the Valley of Tears](https://aleph-alpha.com/en/blog/through-the-valley-of-tears-cold-starting-german-reasoning-in-llms/): they generated about 800,000 German reasoning examples and found that a little German reasoning data is worse than none. Their model's German math score dropped from 70.2 to 48.3: its German thoughts kept going around in circles and never finished. It only climbed back (to 67.3) with a lot more German data.
Kolibri got the lot more. It reasons in German on German prompts. Its German math scores are the best of the models with about 3 billion active parameters: 87.5 on the [American Invitational Mathematics Examination (AIME)](https://en.wikipedia.org/wiki/American_Invitational_Mathematics_Examination) 2025 in German, against 84.4 for the next best, NVIDIA's [Nemotron 3 Nano](https://developer.nvidia.com/nemotron).
##### 5. It's trained to say "I don't know"
Hallucination was number 1 of my big three. The fix in that talk was retrieval augmented generation (RAG): you look up good, authoritative information and put it in the prompt. RAG only works if the model admits when the documents don't have the answer, though. That's what Aleph Alpha trained for, with their own method, the [Merlin-Arthur protocol](https://arxiv.org/abs/2512.11614).
It works like a game with 3 players. Arthur is the model. He gets a question with parts of the supporting document hidden. Merlin hides parts so that the correct answer gets easier to find. Arthur is trained to answer those. Morgana hides the evidence the answer depends on. Arthur is trained to say he doesn't know. Arthur never knows which of the 2 he's facing, so the only way to win is to actually check whether the evidence in front of him supports an answer.
It shows. On [Artificial Analysis's Omniscience test](https://artificialanalysis.ai/evaluations/omniscience), when Kolibri didn't know an answer, it said so (or gave a partial answer) 44% of the time instead of making one up. Qwen3.5 35B-A3B did that 11.1% of the time and GPT-OSS 120B 23.7%. Of all the mixture-of-experts models Aleph Alpha compared, only [Qwen3.6 35B-A3B](https://huggingface.co/Qwen/Qwen3.6-35B-A3B) did better, at 56.7%.
##### 6. You pick how hard it thinks
Every request can set `reasoning_effort` to `none`, `low`, `medium` or `high`, so a quick lookup answers right away and a hard question gets a long think, from the same model on the same server.
#### What Kolibri is good at
These are the rows where Kolibri leads the open models of its size in Aleph Alpha's evaluation, which runs every model through the same setup with the sampling settings its makers recommend:
| What | Kolibri | Closest model with about 3B active parameters |
| --- | --- | --- |
| Overall score, English | 75.5 | 74.7 (Qwen3.5 35B-A3B) |
| Overall score, German | 70.8 | 69.8 (Qwen3.5 35B-A3B) |
| AIME 2025, English | 96.9 | 89.6 (Nemotron 3 Nano) |
| AIME 2025, German | 87.5 | 84.4 (Nemotron 3 Nano) |
| Questions over unseen company documents, English | 89.7 | 87.0 (Qwen3.5 35B-A3B) |
| Long context at 1 million tokens (base model) | 63.2 | 58.5 (Nemotron 3 Nano) |
On AIME 2025 and 2026 in English its math beats every MoE model in the comparison, including the ones with 12 billion active parameters, and only the dense Qwen3.8 27B scores higher. The company-documents row is 5 tests Aleph Alpha built from customer-like work in semiconductors, the German public sector, aerospace, an automotive supplier and industrial drives, run over documents and questions the model never saw in training.
#### What Kolibri is bad at
Aleph Alpha publishes its weakest rows right next to its best ones in the model card, so here they are:
- **Kolibri knows less from memory.** It's last of the 12 models on a closed-book test (the [Retrieval-Augmented Generation Benchmark](https://arxiv.org/abs/2309.01431)'s questions with no documents, 51.0). It answers only 14.8% of the Omniscience questions correctly, against 22.2% for Qwen3.5 35B-A3B. It knows when it doesn't know. It also knows less: fine with documents in the prompt, bad as a trivia oracle.
- **Multi-turn tool calling is weaker.** On the [Berkeley Function Calling Leaderboard](https://gorilla.cs.berkeley.edu/leaderboard.html)'s multi-turn tests it scores 39.8, against 58.2 for [GLM-4.7 Flash](https://huggingface.co/zai-org/GLM-4.7-Flash) and 54.0 for Qwen3.5 35B-A3B.
- **Kolibri isn't the best coding agent.** It scores 27.7 on [Terminal-Bench](https://www.tbench.ai/) 2.1 against 39.7 for Qwen3.5 35B-A3B, and 66.4 on [SWE-bench Verified](https://www.swebench.com/) against 73.8 for Qwen3.6 35B-A3B.
- **Long context dips in the middle.** At 128,000 tokens on RULER, Qwen3.5's base model scores 89.9 to Kolibri's 67.9. Kolibri only pulls ahead at the very long end.
- **The memory.** 78 GB of weights means a data-center GPU or two (it won't fit on a laptop, whatever the 3.5 billion suggests).
- **The plumbing is new.** It needs Aleph Alpha's [vLLM plugin](https://github.com/Aleph-Alpha/aleph-alpha-inference), which supports one vLLM version at a time (0.29 today), and on launch day no hosted provider serves it yet.
- **2 languages only.** That's on purpose: the model card calls it "a deliberate choice of depth over breadth."
- **A bigger dense model beats it.** [Qwen3.8 27B](https://huggingface.co/Qwen/Qwen3.8-27B) scores 80.2 in English and 79.9 in German, but it uses nearly 8 times as many parameters for every token. That's the trade Kolibri is built around.
#### How to run Kolibri
You need about 78 GB of GPU memory: 2 NVIDIA A100s or [H100s](https://www.nvidia.com/en-us/data-center/h100/) with 80 GB each at the least, or a single [H200](https://www.nvidia.com/en-us/data-center/h200/), B200 or B300. I haven't run the model itself yet, since it needs a data-center GPU and nobody hosts it so far, so this is straight from the model card. First the plugin, which installs the [vLLM](https://docs.vllm.ai/) version it supports:
```bash
pip install 'aleph-alpha-inference>=1'
vllm serve Aleph-Alpha/Kolibri-1 --kv-cache-dtype fp8 \
--reasoning-parser kolibri1 \
--tool-call-parser kolibri1 \
--enable-auto-tool-choice
```
That gives you an OpenAI-compatible server, so any OpenAI client talks to it. The reasoning effort goes through the chat template:
```python
### from the Kolibri model card (trimmed)
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")
response = client.chat.completions.create(
model="Aleph-Alpha/Kolibri-1",
messages=[{"role": "user", "content": "Erkläre kurz, was ein Mixture-of-Experts-Modell ist."}],
extra_body={"chat_template_kwargs": {"reasoning_effort": "high", "enable_thinking": True}},
)
print(response.choices[0].message.content)
```
The model card recommends `temperature=1.0`, `top_p=0.97` and `top_k=128`, and contexts of at most 262,144 tokens for anything latency-sensitive. For the full million, serve it with 2 more flags:
```bash
vllm serve Aleph-Alpha/Kolibri-1 --kv-cache-dtype fp8 \
--max-model-len 1048576 \
--hf-overrides '{"max_position_embeddings": 1048576}'
```
#### When to use Kolibri
**Kolibri is the pick when German text and your own hardware both matter:** a public authority, a bank, a manufacturer or an aerospace supplier that has to keep its documents in house, wants answers in German that reason in German, and would rather hear "I don't know" than a confident wrong answer. RAG over long German documents (laws, contracts, manuals) plays to every strength above: the tokenizer, the 1 million token context and the abstention.
That's the kind of project I'm working on right now, with [Prof. Dr. Heinrich Audebert](https://schlaganfallcentrum.charite.de/en/research/research_groups/audebert), who heads [neurology at Campus Benjamin Franklin](https://neurologie.charite.de/en/), one of the [Charité](https://www.charite.de/en/)'s hospitals in Berlin. Today, a patient with a neurological complaint goes to their general practitioner (GP), and the GP has to see them, which is very demanding for a busy practice. In what we're building, the patient sits down at a computer in the GP's practice, an AI avatar takes them through a battery of tests, and it grades how urgent their symptoms are: a referral to a specialist right away, or they can wait a bit. The conversations are in German, they're about people's health, and the model has to run where we control it, so we're thinking of using Kolibri for it.
It's the wrong pick for a coding agent, where Qwen3.6 35B-A3B leads, for questions the model has to answer from memory, for any language besides German and English, and for anyone who can't spare 78 GB of GPU memory. For that last case, the small specialized model I argued for in 2024 is still the answer: for my podcast search I [fine-tuned Mistral 7B on my Apple silicon laptop](https://www.youtube.com/watch?v=uNj3y2pItrA&t=231s) instead of paying for GPT-4o.
I later [benchmarked Kolibri against Claude Sonnet 5.5](/blog/kolibri-vs-claude-german-llm-benchmark) on long German writing for my app. It lost all 136 blind comparisons.
Which is better for your own documents, a hospital of specialists like Kolibri or one small model trained for a single job, only shows when you try both on your data. Swapping the model under an agent without breaking it is what [my workshop on reliable AI agents](/workshops#ai-agents) covers: guardrails and retries that work whichever model sits underneath.
---
### What Is WebMCP? How My Website Gives AI Agents Tools
Published: 2026-10-02
URL: https://tej.as/blog/what-is-webmcp
WebMCP is a proposed web standard that lets a page give AI agents tools to call. How tej.as offers agents 4 of them, and what WebMCP is good for.
So, **WebMCP is a proposed web standard that lets a web page give an AI agent using your browser a set of tools, each with a name, a description, a [JSON Schema](https://json-schema.org/) for its input and a function to run, so the agent calls the function instead of screenshotting and clicking its way around the page.** As of yesterday, this site supports WebMCP. This post is about how it works, how you can use it, and what it's good for.
This morning I gave an AI agent that knew nothing about me except the 4 tools this site offers one question: "Where is Tejas speaking this month, and what would a workshop for my team cost?" It made 2 tool calls, `get-speaking-schedule` for the dates of October and `get-booking-info` for workshops, and came back with all 4 of my October conferences (ticket links included!) and every workshop price, straight from the data my pages show. It never had to scrape a page or read a screenshot of a pricing table. Wild.

[Sarah Drasner](https://sarah.dev), who leads AI and the web ecosystem for [Chrome](https://www.google.com/chrome/) at [Google](https://about.google/), put the before and after better than I can in [a post on 16 September](https://x.com/sarah_edo/status/2100224152841912686):
> Agent: _screenshots the page_\
> Agent: _scrolls_\
> Agent: _screenshots again_\
> Agent: _clicks the wrong button_\
> Agent: _screenshots again_\
> Page with WebMCP: hi, here are the 4 things you can do here, with descriptions\
> Agent: oh thank god
My website is literally that page now.
#### What is WebMCP?
**WebMCP is a proposed web standard that lets a web page offer an AI agent using the browser a set of tools to call.** The spec is [a draft report](https://webmachinelearning.github.io/webmcp/) from the [Web Machine Learning Community Group](https://www.w3.org/community/webmachinelearning/) at the [World Wide Web Consortium (W3C)](https://www.w3.org/). Its abstract is one sentence: "The WebMCP API enables web applications to provide JavaScript-based tools to AI agents."
The agent is whatever the browser gives those tools to. The [explainer from Chrome's team](https://googlechromelabs.github.io/webmcp-tools/demos/explainer/) puts it this way: "A WebMCP-aware extension (or, eventually, the browser itself) collects registered tools and presents them to the user's agent." So it can be an extension like [the side panel Sarah built](https://x.com/sarah_edo/status/2102025642862600634), the browser's own assistant one day, or a program driving the browser from outside, like the demo above, which reads the tools through [Chrome DevTools](https://developer.chrome.com/docs/devtools). Either way, it calls the page's functions instead of clicking around.
##### WebMCP vs MCP: what's the difference?
WebMCP is named after the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/), a client-server protocol, similar to the [Hypertext Transfer Protocol (HTTP)](https://developer.mozilla.org/en-US/docs/Web/HTTP), where the client is an AI agent and the server is an MCP server. The way I explained it [at How to Web](/talks/how-to-web-2025), the client "talks to the server. It says, 'Hey, what context do you have for me?'" and the server answers with its tools. **WebMCP takes that idea and puts the tools in the web page you already have open, instead of on a server somebody runs somewhere else.**
The 3 ways an agent can use a website, side by side:
| | WebMCP | An MCP server | Screenshots and clicks |
| --- | --- | --- | --- |
| Where the tools are | In the web page itself | On a server somebody runs, which you connect to your AI app | Nowhere: the agent reads pixels and the page's markup and guesses |
| What the site has to build | A few functions in the site it already has | A second product next to the site | Nothing |
| What breaks it | A tool whose contract changes | The server going down | A redesign, a popup, a slow load |
| On tej.as | 4 tools since 1 October | Never built | How agents saw my site until 30 September |
#### Which browsers support WebMCP?
**Chrome, as an [origin trial](https://developer.chrome.com/docs/web-platform/origin-trials) from Chrome 149** ([Chrome's WebMCP docs](https://developer.chrome.com/docs/ai/webmcp)). An origin trial is Chrome letting a site switch a feature on early for its own visitors, with a token that only works on that site's origin (think, its domain). My token goes in a `` tag on every page and expires on 30 March 2027, so anybody visiting in Chrome gets the tools without flipping a flag. On `localhost` the token doesn't match, so while I'm building I turn it on with `chrome://flags/#enable-webmcp-testing` instead.
It's still a proposed standard, so it changes: when Chrome 149 shipped it, the API was on `navigator.modelContext`, and later releases put it on `document.modelContext`, which is where the spec has it now, so my code looks in both.
#### The 4 tools on tej.as
Every tool answers from the same module the pages read, so an agent quotes the sentence a visitor sees and never a stale copy of it.
| Tool | What an agent asks it | Where the answer comes from |
| --- | --- | --- |
| `search-content` | What has Tejas said about [React Server Components](https://react.dev/reference/rsc/server-components)? | The search index behind the Ask boxes: my talk transcripts, the [ConTejas Code](/podcast) podcast, [Fluent React](/react) and this blog, with video links that open at the second the passage starts |
| `list-talks` | Which talks has he given on AI? | My talk list, with the full transcript on this site where one exists |
| `get-speaking-schedule` | Where is he speaking next? | The calendar behind [/calendar](/calendar) |
| `get-booking-info` | What does a keynote or a workshop cost? | The fees and terms on [/speaking](/speaking) and [/workshops](/workshops) |
All 4 only read. Nothing here sends, books or submits anything on anyone's behalf, and the spec has a hint for the day something does: `consequentialHint`, which Sarah [announced in September](https://x.com/sarah_edo/status/2097318090979610803) and which [Chrome's guidance](https://developer.chrome.com/docs/ai/webmcp/secure-tools) says to set for high stakes actions like "booking travel or transferring money", so the agent asks the person first.
#### How I built it
All of it is about 780 lines of TypeScript in 5 files, plus a component and an API route. None of it stores data of its own: every answer comes from a module the pages already use.
##### 1. One file has every tool's contract
A tool is a name, a title for people, a description for the model, a JSON Schema for the input and some hints. Here's `search-content`, trimmed:
```ts
// src/util/webmcp/tools.ts (trimmed)
{
name: "search-content",
title: "Search talks, podcast, book and blog",
description:
"Search everything Tejas Kumar has published: his conference talk transcripts, the ConTejas Code podcast, his O'Reilly book Fluent React and his blog. Returns the closest passages, each with a link...",
inputSchema: {
type: "object",
properties: {
query: { type: "string", minLength: 1, maxLength: 300, description: 'What to look for, in plain words, such as "agent harnesses" or "React Server Components".' },
source: { type: "string", enum: ["all", "talks", "podcast", "book", "blog"], default: "all", description: "..." },
limit: { type: "integer", minimum: 1, maximum: 8, default: 4, description: "..." },
},
required: ["query"],
},
annotations: { readOnlyHint: true },
}
```
The description says "Tejas Kumar" and "his" instead of "I" and "my". Everything else on this site is first person, but a model reads a tool description with no page around it. A "my talks" out of context has nobody attached to the "my".
##### 2. The browser registers them (if it can)
```astro
```
A browser without WebMCP pays for one property lookup and nothing else: the code that registers the tools only downloads after the feature test passes. Each tool's `execute` then sends its input to `/api/webmcp/` on my server. That's where the search index and the calendar are. Shipping them to every page would make every page heavier for every visitor, agent or not.
##### 3. The server checks every call against the same schema
The API route imports the same `tools.ts` and validates the input against the schema the agent was shown before it runs anything, so what the agent is told and what the server enforces can't drift apart.
A model is a sloppy caller though, so the validator forgives the mistakes with one obvious meaning and refuses the rest:
- an integer sent as a string (`"5"`) is read as the integer,
- an enum value in the wrong case (`"React"`) is read as its listed form,
- strings are trimmed and an empty string counts as not sent,
- properties the schema doesn't name are dropped instead of refused.
##### 4. Return mistakes (don't throw them)
If a tool's `execute` rejects, the model gets a bare `UnknownError` and no idea what went wrong, so every tool on this site returns its mistakes as a plain object with a sentence in it:
```ts
// src/util/webmcp/register.ts (trimmed)
const body = await response.json().catch(() => null);
if (body && body.ok === true) return body.result;
/* A mistake goes back to the model as a sentence it can correct, not as a
rejected promise, which the browser would flatten into UnknownError. */
return { error: body?.error || `tej.as answered ${response.status}. Try again in a moment.` };
```
A model can fix `"source" must be one of all, talks, podcast, book, blog, and got "videos".` on its very next call. It can't do anything with `UnknownError`.
##### 5. Stay inside Chrome's budgets
[Chrome's guidance](https://developer.chrome.com/docs/ai/webmcp/secure-tools) gives every tool a budget: 30 characters for a name, 500 for a description, 150 for each parameter's description and about 1,500 for what a tool returns. A test in this repo fails if a name or a description goes over. It also runs every tool against the actual data to measure the output. That's why a search result is a passage of about 220 characters around the sentence that shares the most words with your query (on a podcast segment, the first 220 characters of a chunk are usually the tail of the previous answer).
##### 6. Track whether anyone uses it
Every page reports a `WebMCP Ready` event when it registers the tools. Every call reports a `WebMCP Tool` event with the tool's name, whether it worked and how long it took. The tools went live on 1 October and Chrome only offers them through an origin trial, so the only agent I've watched call them so far is my own demo. These events are how I'll know when that changes.
#### What is WebMCP good for?
**WebMCP is good for anything people already do on your page that an agent could do with one function call instead of a dozen clicks.** Sarah showed it on [her own app](https://x.com/sarah_edo/status/2099489118182863280): "I can batch process, change themes and dark mode, check on higher level goals that I'm keeping track of. All of this functionality exists already!"
My fees, my calendar and my talks were already on my pages too, and the tools let an agent read them without guessing, which is the demo at the top of this post. On 28 September [Shopify opened checkout to agents in the browser](https://techcrunch.com/2026/09/28/shopify-opens-checkout-to-browser-based-ai-agents/) with WebMCP tools called `get_checkout`, `update_checkout` and `complete_checkout`, which places the order after the buyer authorizes it.
Sarah also built [a Chrome extension](https://x.com/sarah_edo/status/2102025642862600634) that drives any site's WebMCP tools with [Jev](https://www.typesafe.ai/) from [TypeSafe](https://www.typesafe.ai/): as you type, it picks the page's tool, fills in the arguments and tells you how sure it is. I use Jev on this site to decide whether the Ask boxes can answer a question at all, so seeing it pick tools was a fun little crossover.
#### How to try it on tej.as
In a recent Chrome, open any page here, then open the console in DevTools and run `document.modelContext.getTools()`: you'll see the same 4 tools an agent sees. Sarah's extension will drive them for you if you'd rather click than type.
If your team is building agents that call tools like these, that's what [my workshop on reliable AI agents in production](/workshops#ai-agents) is for, and if you'd like me to talk about AI and the web at your event, [you can book me here](/speaking).
---
### How Much Does a Keynote Speaker Cost?
Published: 2026-10-01
URL: https://tej.as/blog/how-much-does-a-keynote-speaker-cost
A keynote speaker costs $2,500 at the median in 2026 and $10,000 to $25,000 for an established author, plus travel. The benchmarks and what moves them.
So, **a keynote speaker costs about $2,500 at the median in 2026, $10,000 to $25,000 for an established speaker with a published book, and upward of $30,000 for a celebrity, plus travel.** I just published my own speaking fees, which almost nobody who speaks at tech events does, and before I picked a single number I read every 2026 fee benchmark I could find because I didn't want to pull one out of thin air.
The weird part is how much those benchmarks disagree. [Talkadot](https://www.talkadot.com/resources/for-event-planners/how-much-does-a-keynote-speaker-cost) puts the median keynote fee at $2,500, while [Janice Tomich](https://janicetomich.com/keynote-speaking-fees/), a speaking coach, says the typical keynote across Canada, the US and Europe is $10,000 to $30,000, which is 4 to 12 times more for the same "typical" speaker. So which one is right? Turns out it mostly depends on who's doing the counting.
#### How much does a keynote speaker cost?
**A keynote speaker costs $2,500 at the median and somewhere between $5,000 and $25,000 plus travel for a professional with a track record.** Every bureau slices that range into tiers and each one names and prices them a little differently, so here are three 2026 fee schedules side by side with their own labels:
| Source | Bottom tier | Established, with a book | Top tier |
| --- | --- | --- | --- |
| [Talkadot](https://www.talkadot.com/resources/for-event-planners/how-much-does-a-keynote-speaker-cost) | $500 to $2,500 (emerging experts) | $10,000 to $25,000 (established names) | $75,000 and up (marquee) |
| [Speakers.com](https://speakers.com/keynote-speaker-fee-schedule-2026-the-definitive-pricing-guide-for-event-planners/) | $5,000 to $10,000 (emerging or regional) | $10,000 to $25,000 (established professionals and published authors) | $50,000 to $200,000 and up (global icons) |
| [NSB](https://www.nsb.com/blog/how-much-does-a-keynote-speaker-cost-a-clear-guide-for-event-planners/) | $1,500 to $5,000 (entry level) | $15,000 to $30,000 (professional, including bestselling authors) | $30,000 to $100,000 and up (celebrity) |
Notice how the bottom tier at Speakers.com starts at $5,000, which is exactly where three quarters of the speakers in Talkadot's data stop. The middle column is the one most event budgets end up in. It's also the one the three sources roughly agree on: a speaker with a proven record and a book costs low to mid five figures.
#### Why the benchmarks disagree so much
Talkadot is a tool speakers use to collect audience feedback after a talk. Its numbers come from the fees those speakers log in it, across what it calls "more than a million verified audience survey responses" from January 2023 to March 2026. That makes it the closest thing I've found to a census of working speakers:
So 90% of the speakers in that data charge $10,000 or less, which is the number the bureaus call the _start_ of the established tier. Wild.
Bureaus, on the other hand, quote the speakers on their own roster. A bureau makes its money as a commission of 20 to 30% on top of the speaker's fee, so the "typical" speaker a bureau describes is somebody it has already decided is worth representing. **The median person giving keynotes earns a few thousand dollars. The median person a bureau will book for you costs five figures.**
We should be careful though not to read Talkadot as the whole market either: it counts speakers who bother to use a feedback tool, which probably leaves out most celebrities and a lot of people who give one talk a year.
Nobody publishes what developer conferences pay their keynote speakers, though. Talkadot's technology segment is the closest thing I found. It mixes conferences with company events, so if you run a developer conference and would share anonymized numbers, I'd love to write that post with you.
#### What different buyers pay
Talkadot also splits its median fee by who is paying. This is the table I found the most useful:
| Buyer | Median fee |
| --- | --- |
| Corporate teams | $4,500 |
| Government | $4,000 |
| Associations | $3,215 |
| Technology | $3,000 |
| K-12 education | $3,000 |
| Small and medium businesses | $3,000 |
| Nonprofits | $2,450 |
| Higher education | $2,200 |
| Health and wellness | $1,600 |
| Startups | $1,050 |
**Technology buyers pay less than corporate teams, government and associations**, which kinda surprised me given how much money there is in tech. My guess is that a lot of technology events are conferences paid for by tickets and sponsors, where the speakers are the audience's peers and everyone, organizers included, is used to speaking for travel and a hotel. I've spoken at 65 events since 2012, and in my experience the money conversation at a developer conference is a completely different conversation from the one at a company event, even when the talk is the same talk.
#### What a keynote speaker costs in Europe
Most published fee data is American and in dollars. [Minds](https://weareminds.com/en/news/trouver-bon-conferencier-2026-tarifs-methode), a speaker agency in France, publishes its 2026 tiers in euros, excluding VAT and travel:
| Tier | Fee per event |
| --- | --- |
| Emerging speaker | €1,500 to €3,000 |
| Established speaker | €3,500 to €6,500 |
| Known to the media | €7,000 to €15,000 |
| National star | €15,000 to €100,000 |
| International icon | Over €100,000 |
Their median is €6,500. They put virtual fees 30 to 50% below in person. It's one agency in one country, so treat it as a data point and not as Europe. Tier for tier, it sits a bit below the American numbers.
#### What you pay on top of the fee
The fee is the biggest line. It's rarely the only one:
| Cost | What to expect | Source |
| --- | --- | --- |
| Travel and hotel | $500 to $3,000 inside the US, or a flat travel fee of $1,500 to $3,500, and more for international trips | Talkadot, Speakers.com |
| Bureau commission | 20 to 30% added to the fee, so a $10,000 speaker costs $12,500 | Talkadot |
| Deposit | 50% to hold the date, the rest 30 days before the event | Speakers.com |
| VAT | Added in Europe where it applies, which depends on where you and the speaker are | Minds |
| A virtual keynote | 20 to 40% below in person (Talkadot), 30 to 50% (Minds), or 50 to 75% of the fee (Speakers.com) | All three |
**Ask what the fee includes before you compare 2 speakers.** One number can include travel, a prep call and the rights to the recording. The other can include none of those.
#### What moves a speaker's fee
These are the things I'd look at if I were the one paying. They're also the things I weighed when I set my own:
**1. Proof you can watch raises the fee.** A full recording tells an organizer more than any highlight reel can. A speaker with a public archive is a smaller risk. All 81 of my recorded talks [are on my speaking page](/speaking) for this reason.
**2. A book raises it too.** Speakers.com and NSB both name published and bestselling authors as the line into their higher tiers. I wrote [Fluent React](/react) for O'Reilly, so I'm in that column whether I like it or not.
**3. The days it costs the speaker add up.** A 45 minute keynote on another continent is 2 to 3 days of someone's week once you count the flights. The fee pays for those days too.
**4. A talk built for you costs more.** A talk adjusted to your audience takes prep calls and rewriting. A talk delivered as it stands doesn't.
**5. Who is paying changes the number.** The buyer table above is the evidence: the same speaker gets a different number from a startup than from a corporate team.
#### My own keynote fees
I'd rather you knew my number before you email me than after, so here it is, and it's the same list that's on [my speaking page](/speaking):
| Format | Fee |
| --- | --- |
| Keynote at a company or corporate event, in person | €12,000 |
| Keynote at a company or corporate event, virtual | €6,000 |
| Conference keynote, in person | €6,000 |
| Conference keynote, virtual | €3,000 |
| Hosting a conference as its MC | €5,000 a day |
I set these against the benchmarks above. A company keynote at €12,000 sits at the low end of the established-with-a-book tier. It's below what I charge for an on-site day of [my team workshops](/workshops) (€14,000): a workshop is a whole day of teaching. Virtual is half, which is the bottom of Speakers.com's range. Travel and hotel from Berlin are on top at cost. A 50% deposit holds the date and VAT gets added where it applies. Meetups, nonprofits, student events and churches aren't on the list on purpose: those are conversations, so just email me.
I don't know yet whether publishing a fee gets a speaker more bookings or fewer. I just did it, so ask me again in 6 months and I'll tell you what happened.
#### How to book a keynote speaker without overpaying
**1. Set the budget before the shortlist.** It's easy to fall for a speaker first and then discover you're $20,000 apart. The tables above are enough to set an honest number for the tier you want.
**2. Ask what's in the fee.** Travel, a prep call, how much the talk is adjusted for your audience, whether you get to keep and publish the recording, and how long the slot is, since that changes the prep (I wrote up [how long a keynote speech should be](/blog/how-long-should-a-keynote-speaker-speak) separately).
**3. Book direct when you can.** A bureau earns its 20 to 30% when it finds you someone you couldn't have found and handles the contract, and if you already know who you want, emailing them is cheaper. I'm obviously biased here, since my email address is on my site.
**4. Watch a full talk, not a reel.** 10 minutes in the middle of a real recording tells you how someone holds a room. A reel is cut to hide exactly that.
**5. Pair the keynote with a workshop if your audience is a team.** A keynote gives the room one shared idea. A workshop the next day is where a team actually learns to use it. Booking both from the same trip is usually cheaper too.
If you'd like me on your stage, [here's what I speak about, with my fees](/speaking).
---
### What Is React Fiber? How React Works Under the Hood
Published: 2026-09-30
URL: https://tej.as/blog/what-is-react-fiber
React Fiber is how React has rendered since version 16: a tree of small units of work it can pause and resume. How it works, from the React source.
So, **React Fiber is the reconciler React has used since React 16: it turns your component tree into a tree of small units of work called fibers, so React can stop rendering partway through, handle something more urgent, and pick the work back up.** I spent a chapter of [Fluent React](/react) on it. I've also explained it on stage a bunch of times, usually with a counter and a whiteboard marker that's running out of ink.
Before Fiber, React rendered an update in one go: it walked your whole tree recursively, and once it started it couldn't stop until it was done, so a big update could freeze the input you were typing into. As I put it at [Frontend Nation 2024](https://www.youtube.com/watch?v=GEmLMWixogM), "UI updates are not created equal", and typing into an input matters more than re-rendering a list nobody's looking at yet. But like, how do you interrupt a recursive function halfway through and come back to it later?
**TL;DR**
- React Fiber is the reconciler React has used since React 16. It replaced the stack reconciler, which had to finish every update once it started.
- A fiber is a plain JavaScript object, one per component or element, holding its type, props, state, effects, priority and pointers to its parent, child and sibling.
- Those pointers turn the tree into something React can walk with a `while` loop, so it can stop after any fiber and resume later.
- React keeps 2 trees, the one on screen and the one being built, and swaps them when the new one is finished: double buffering, borrowed from games.
- Rendering happens in 2 phases: a render phase that can be paused or thrown away and a commit phase that always runs to the end.
- Lanes are bitmasks that mark how urgent each update is, which is how a keystroke gets to cut in front of a transition.
#### What is React Fiber?
**React Fiber is the reconciler React has used since React 16. A fiber is the unit of work it schedules: one JavaScript object for every component and host element in your app.** The name covers 3 related things. It helps to keep them apart:
| Term | What it is | Example |
| --- | --- | --- |
| **Fiber**, the architecture | The reconciler that shipped with [React 16 in September 2017](https://legacy.reactjs.org/blog/2017/09/26/react-v16.0.html) and still runs React 19 | The code in `react-reconciler` |
| **A fiber** | One object per component or element, reused across renders | The fiber for your `` |
| **The fiber tree** | Every fiber, linked by parent, child and sibling pointers | `App` > `div` > `h1`, `span`, `button` |
And here's how a fiber relates to the things it gets confused with:
| Thing | What it is | How long it lives |
| --- | --- | --- |
| React element | The object [JSX](https://react.dev/learn/writing-markup-with-jsx) gives you, describing what you want on screen | One render, then it's garbage |
| Fiber | React's record of a component instance: type, props, state, effects, priority, pointers | Across renders, updated in place |
| [DOM](https://developer.mozilla.org/en-US/docs/Glossary/DOM) node | The real thing in the browser | Until React removes it |
The [virtual DOM](https://legacy.reactjs.org/docs/faq-internals.html) is the older name for the whole idea of describing UI as objects and letting React work out the DOM changes. Fiber is the machinery that does that work today. [Andrew Clark's React Fiber Architecture notes](https://github.com/acdlite/react-fiber-architecture) are where most people first met the design. [Lin Clark](https://en.wikipedia.org/wiki/Lin_Clark)'s [A Cartoon Intro to Fiber](https://www.youtube.com/watch?v=ZCuYPiUIONs) from [React Conf 2017](https://conf.react.dev/) is still the friendliest explanation of why it exists. What I want to add here is the code: what React actually does today, line by line, on one small example, from the current React source.
#### Why React needed Fiber
Before React 16, the reconciler worked like a recursive function. Here's a sketch of the shape (this is my simplification to show the problem, not React's real code):
```js
function reconcile(element) {
const children = render(element);
for (const child of children) {
reconcile(child); // the call stack is the only record of where we are
}
}
```
The problem is the call stack. JavaScript runs on the browser's [main thread](https://developer.mozilla.org/en-US/docs/Glossary/Main_thread). A recursive walk keeps its place in the stack frames, so there's no way to say "pause here, let the browser handle that keystroke, and come back to this exact component later". Once an update started, it ran until the whole tree was done. If the tree was big, typing into an input felt sticky because the keystroke had to wait behind a re-render of things nobody was looking at.
**An update that can't be interrupted makes every update as urgent as the slowest one.**
#### What's inside a fiber
Here's the constructor from the React source, trimmed of the profiler and development-only fields ([full file](https://github.com/facebook/react/blob/7c6ac13e19fef500b7f669a16bbd01ecc95965ca/packages/react-reconciler/src/ReactFiber.js#L134)):
```js
function FiberNode(tag, pendingProps, key, mode) {
this.tag = tag;
this.key = key;
this.elementType = null;
this.type = null;
this.stateNode = null;
this.return = null;
this.child = null;
this.sibling = null;
this.index = 0;
this.ref = null;
this.refCleanup = null;
this.pendingProps = pendingProps;
this.memoizedProps = null;
this.updateQueue = null;
this.memoizedState = null;
this.dependencies = null;
this.mode = mode;
this.flags = NoFlags;
this.subtreeFlags = NoFlags;
this.deletions = null;
this.lanes = NoLanes;
this.childLanes = NoLanes;
this.alternate = null;
}
```
The fields fall into 5 groups:
| Group | Fields | What they're for |
| --- | --- | --- |
| Identity | `tag`, `key`, `type`, `stateNode` | What kind of thing this is (a function component, a `div`, a Suspense boundary), and for a host element, the real DOM node |
| Tree pointers | `return`, `child`, `sibling`, `index` | The parent, the first child, the next sibling. These are what make the tree walkable without recursion |
| Data | `pendingProps`, `memoizedProps`, `memoizedState`, `updateQueue` | The new props, the props and state from last time, and updates waiting to be applied. Your hooks live in `memoizedState` as a [linked list](https://en.wikipedia.org/wiki/Linked_list) |
| Work | `flags`, `subtreeFlags`, `deletions`, `lanes`, `childLanes` | What has to happen to the DOM, and how urgent the pending work is here and below |
| The other copy | `alternate` | This fiber's twin in the other tree, more on that in step 4 |
I love that `return` is called `return`: it's where the work goes back to when this fiber is done, the same way a function returns to its caller. Fiber is literally React rebuilding the call stack as data so it can hold on to it.
#### How Fiber renders a counter, step by step
Let's grow one example the whole way through, the same counter I draw on stage:
```jsx
function App() {
const [count, setCount] = useState(0);
return (
Welcome
{count}
);
}
```
##### Step 1: JSX becomes elements and elements are throwaway
Every render, `App` returns a fresh tree of React elements. An element is a small object describing what you want. In React 19 it's tagged with `Symbol.for("react.transitional.element")` so React can tell it apart from any other object. Elements don't hold state and they don't survive the render, which is the whole reason React needs something that does.
**Elements describe the screen you want. Fibers remember the screen you have.**
##### Step 2: the fiber tree is linked by child, sibling and return
React keeps one fiber per element, and links them with 3 pointers. For the counter, it looks like this:
Notice how a parent only points at its _first_ child. That child points at its next sibling. The `h1`, `span` and `button` have no child fibers at all, btw: when an element's only child is a string or a number, React DOM sets the text directly ([`shouldSetTextContent`](https://github.com/facebook/react/blob/7c6ac13e19fef500b7f669a16bbd01ecc95965ca/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js#L744)) and skips making a fiber for it. That's what turns a tree into something you can walk with nothing but a variable holding "the fiber I'm on right now".
**A tree you can walk with a pointer is a tree you can stop walking at any point.**
##### Step 3: the work loop does one fiber at a time
This is the loop React uses for urgent updates, verbatim ([source](https://github.com/facebook/react/blob/7c6ac13e19fef500b7f669a16bbd01ecc95965ca/packages/react-reconciler/src/ReactFiberWorkLoop.js#L2772)):
```js
function workLoopSync() {
while (workInProgress !== null) {
performUnitOfWork(workInProgress);
}
}
```
And this is the one it uses for work that's allowed to wait, also verbatim, minus a comment ([source](https://github.com/facebook/react/blob/7c6ac13e19fef500b7f669a16bbd01ecc95965ca/packages/react-reconciler/src/ReactFiberWorkLoop.js#L3073)):
```js
function workLoopConcurrentByScheduler() {
while (workInProgress !== null && !shouldYield()) {
performUnitOfWork(workInProgress);
}
}
```
The only difference is `!shouldYield()`. React's scheduler answers that by checking how long it's been running, and with the defaults in the source today it gives the main thread back after about 5 milliseconds, so the browser can paint and handle your keystroke. `workInProgress` is a module-level variable, so when React comes back, the loop picks up at exactly the fiber it stopped on. Wild that the whole "concurrent React" idea comes down to one extra condition in a `while` loop.
**Concurrent rendering is a loop that checks the clock after every fiber.**
##### Step 4: beginWork goes down, completeWork comes back up
Each unit of work has 2 halves. `performUnitOfWork` calls `beginWork`, which renders the component and returns its first child, and when a fiber has no children left, `completeUnitOfWork` finishes it and moves sideways or up. Here's the end of `performUnitOfWork` ([source](https://github.com/facebook/react/blob/7c6ac13e19fef500b7f669a16bbd01ecc95965ca/packages/react-reconciler/src/ReactFiberWorkLoop.js#L3081)):
```js
unitOfWork.memoizedProps = unitOfWork.pendingProps;
if (next === null) {
// If this doesn't spawn new work, complete the current work.
completeUnitOfWork(unitOfWork);
} else {
workInProgress = next;
}
```
And the heart of `completeUnitOfWork`, trimmed of profiling and the error path ([source](https://github.com/facebook/react/blob/7c6ac13e19fef500b7f669a16bbd01ecc95965ca/packages/react-reconciler/src/ReactFiberWorkLoop.js#L3368)):
```js
do {
const current = completedWork.alternate;
const returnFiber = completedWork.return;
next = completeWork(current, completedWork, entangledRenderLanes);
if (next !== null) {
workInProgress = next;
return;
}
const siblingFiber = completedWork.sibling;
if (siblingFiber !== null) {
workInProgress = siblingFiber;
return;
}
completedWork = returnFiber;
workInProgress = completedWork;
} while (completedWork !== null);
```
So for the counter, the order React visits things in is: begin `App`, begin `div`, begin `h1`, complete `h1`, begin `span`, complete `span`, begin `button`, complete `button`, complete `div`, complete `App`. Going down, React calls your components and compares their output against the existing fibers. Coming back up, `completeWork` prepares the DOM changes for that fiber and bubbles its `flags` into the parent's `subtreeFlags`, so at the end React can skip any subtree where nothing changed.
**Rendering goes down the tree and completing comes back up. The loop can pause between any 2 steps.**
##### Step 5: 2 trees, swapped at the end
React keeps 2 fiber trees: `current` (what's on screen) and the work-in-progress tree it's building. Each fiber's `alternate` points at its twin in the other tree. The comment in `createWorkInProgress` says it better than I can ([source](https://github.com/facebook/react/blob/7c6ac13e19fef500b7f669a16bbd01ecc95965ca/packages/react-reconciler/src/ReactFiber.js#L323)):
```js
// We use a double buffering pooling technique because we know that we'll
// only ever need at most two versions of a tree.
```
[Double buffering](https://en.wikipedia.org/wiki/Multiple_buffering) comes from games and graphics: you draw the next frame off screen and swap it in when it's done, so the player never sees a half-drawn frame. React does the same thing. When you click Increment, it builds the next tree off screen. If a more urgent update comes in halfway, it can throw that work away and start again from `current` (nothing on screen was touched). When the tree is finished, the commit ends with one line ([source](https://github.com/facebook/react/blob/7c6ac13e19fef500b7f669a16bbd01ecc95965ca/packages/react-reconciler/src/ReactFiberWorkLoop.js#L4051)):
```js
root.current = finishedWork;
```
And the work-in-progress tree becomes the screen. The old `current` tree becomes the next render's scratch space, which is why React only ever needs 2.
**Building the next screen off to the side is what makes it safe to stop, restart or throw away a render.**
##### Step 6: lanes decide what's urgent
Every update gets a lane: one bit in a 31 bit number ([source](https://github.com/facebook/react/blob/7c6ac13e19fef500b7f669a16bbd01ecc95965ca/packages/react-reconciler/src/ReactFiberLane.js#L43)). Because they're bits, a fiber's `lanes` field can hold several pending priorities at once and React can check them with a [bitmask](https://en.wikipedia.org/wiki/Mask_(computing)), which is really fast. Some of the lanes, from most to least urgent:
| Lane | Used for |
| --- | --- |
| `SyncLane` | Discrete events, like a click or a keypress |
| `InputContinuousLane` | Continuous events, like dragging or scrolling |
| `DefaultLane` | Ordinary updates that don't come from an event |
| Transition lanes | Updates you wrapped in `startTransition` |
| `IdleLane` | Work that can wait until nothing else is going on |
This is where Fiber pays off in code you write. If our counter also filtered a big list, you'd wrap the slow part in a [transition](https://react.dev/reference/react/useTransition):
```jsx
const [isPending, startTransition] = useTransition();
function handleChange(e) {
setQuery(e.target.value); // urgent: the input updates right away
startTransition(() => {
setFilter(e.target.value); // can wait: the list can lag behind
});
}
```
The keystroke lands in an urgent lane and the filter in a transition lane, so if you type again before the list is done, React drops the half-built list render, handles the keystroke, and starts the list again with the newer value.
**Lanes let React put a keystroke in front of a slow render without you writing a scheduler.**
##### Step 7: the commit can't be interrupted
Once the work-in-progress tree is complete, React commits it. The commit always runs to the end in one go so you never see half an update. It happens in a few passes: one before React changes the DOM, one that changes it, and one for layout effects like `useLayoutEffect`. Then your `useEffect` callbacks run afterward as passive effects. The [render and commit](https://react.dev/learn/render-and-commit) page on react.dev covers this from the outside. In the source it's `commitBeforeMutationEffects`, `commitMutationEffects` and `commitLayoutEffects`, then `flushPassiveEffects`.
**Render can stop and start. Commit can't, so the DOM only ever changes all at once.**
##### What changed, step by step
| Step | What Fiber does | What it buys you |
| --- | --- | --- |
| 1 | Elements describe the screen, fibers remember it | State survives between renders |
| 2 | Child, sibling and return pointers | A tree you can walk without recursion |
| 3 | A work loop that checks the clock | React can give the main thread back about every 5 ms |
| 4 | `beginWork` down, `completeWork` up | Pause points between every fiber, and skipped subtrees |
| 5 | 2 trees and `alternate` | Renders can be thrown away safely |
| 6 | Lanes | Urgent updates cut in front of slow ones |
| 7 | An uninterruptible commit | The screen never shows half an update |
#### What Fiber means for the code you write
You never touch a fiber directly, but the architecture shows up in a few rules that would feel arbitrary without it:
**1. Keep your components pure when they render.** The render phase can run a component, throw the result away and run it again, so a side effect inside render can happen twice or happen for a render that never reaches the screen. That's why [Strict Mode](https://react.dev/reference/react/StrictMode) calls your components twice in development. It's also why react.dev's [Keeping Components Pure](https://react.dev/learn/keeping-components-pure) page exists.
**2. Put side effects in effects.** Effects run after the commit, when the DOM is real and the render is final.
**3. Use keys to tell React which fiber is which.** React matches new elements to existing fibers by type and `key`. A stable key is what lets a list item keep its state when the list reorders. react.dev's page on [preserving and resetting state](https://react.dev/learn/preserving-and-resetting-state) is the long version.
**4. Mark slow updates as transitions.** `useTransition` and `useDeferredValue` are how you tell Fiber which work can wait. It's the cheapest performance win in modern React.
The internals keep moving, though. Everything I've quoted is from [the main branch in September 2026](https://github.com/facebook/react/tree/7c6ac13e19fef500b7f669a16bbd01ecc95965ca). There's already a flag in there, `enableThrottledScheduling`, that would swap the 5 ms check for a loop that yields every 25 ms during transitions, on purpose, so animations can't starve the render. It's off by default today. I genuinely don't know whether it ships. I'm also not sure how much of this stays visible once the [React Compiler](https://react.dev/learn/react-compiler) is memoizing everything for you. My guess is that these rules matter more with a compiler, since it assumes your components are pure, but that's a guess.
Everything from reconciliation to [Server Components](https://react.dev/reference/rsc/server-components) is in [Fluent React](/react), my O'Reilly book, and if your team would rather learn it in a day than read a book, [I teach a React internals workshop](/workshops#react-internals).
---
### What Does the Bible Say About AI?
Published: 2026-09-26
URL: https://tej.as/blog/what-does-the-bible-say-about-ai
The Bible never mentions AI, but it says plenty about who we are, what we make and who we trust. An AI engineer who builds a Bible app on what that means.
So, **the Bible never mentions artificial intelligence, but it speaks directly to the 3 questions AI keeps raising: what makes a person a person, what we should do with the things we make and who we trust.** I'm an AI Engineer at IBM. I've served in my church as a youth leader, a worship leader and a deacon. I also build [Dewfall](https://dewfall.app), a Bible app that uses AI every single day, so I live right in the middle of this question and I've had to answer it for myself in code.
Pastors are living in the middle of it too. In [Barna's survey of 442 US Protestant pastors](https://www.barna.com/research/pastors-using-ai-ministry/) from December 2025, 24% said they already write or edit sermons with AI's help, which is double the 12% who said they were even comfortable with that in early 2024, and in the very same survey 79% said they worry about AI "beginning to act as a replacement for God". So the church is scared of it and using it at the same time lol, which honestly is how I felt the first time I watched a model write something about Scripture that I couldn't have written better myself. So what does the Bible actually say?
#### What does the Bible say about AI?
**The Bible says nothing about artificial intelligence by name, but it says a lot about the questions AI raises. They line up with 3 threads that run through Scripture:**
| The question AI raises | What the Bible says | Where |
| --- | --- | --- |
| What is a person? | Every human is made in the image of God. The things we make aren't. | [Genesis 1:27](https://dewfall.app/en/read/bsb:1:1:27) |
| What should we do with what we make? | The skill to make things is a gift from God, and it can serve him or make a name for ourselves | [Exodus 31:3](https://dewfall.app/en/read/bsb:2:31:3), [Genesis 11:4](https://dewfall.app/en/read/bsb:1:11:4) |
| Who do we trust? | Whatever we trust in place of God shapes us into its likeness, so test everything | [Psalm 115:8](https://dewfall.app/en/read/bsb:19:115:8), [1 Thessalonians 5:21](https://dewfall.app/en/read/bsb:52:5:21) |
You'll also see 2 other verses passed around as AI prophecy. [Daniel 12:4](https://dewfall.app/en/read/bsb:27:12:4) says "Many will roam to and fro, and knowledge will increase", and [Revelation 13:15](https://dewfall.app/en/read/bsb:66:13:15) describes a beast permitted "to give breath to the image of the first beast, so that the image could speak". I get why people reach for them, especially the second one, but read them in context and neither one is about computers.
I'm quoting the [Berean Standard Bible](https://dewfall.app/en/read/books) throughout, which is public domain. Every reference links to the verse on Dewfall so you can read it with its context.
#### AI isn't made in the image of God. You are.
> So God created man in His own image; in the image of God He created him; male and female He created them.
>
> [Genesis 1:27](https://dewfall.app/en/read/bsb:1:1:27)
The [deep dive on this verse in Dewfall](https://dewfall.app/en/read/bsb:1:1:27) has a picture I love: a king in the ancient world would plant a statue of himself in a far-off province so everyone knew who really ruled there. Genesis says that's what _you_ are: God's living statue placed in his world. Babylon's creation story made humans out of a murdered god's blood to do the labor the gods didn't want. In Egypt, only Pharaoh was the image of a god. Genesis gave that dignity to every field worker and every servant.
Evangelicals have said this about AI explicitly. In 2019 the [Southern Baptist Convention](https://en.wikipedia.org/wiki/Southern_Baptist_Convention)'s [Ethics and Religious Liberty Commission](https://en.wikipedia.org/wiki/Ethics_%26_Religious_Liberty_Commission) (ERLC) published [Artificial Intelligence: An Evangelical Statement of Principles](https://erlc.com/wp-content/uploads/2019/04/Artificial-Intelligence-An-Evangelical-Statement-of-Principles.pdf). More than 70 evangelical leaders signed it, from [J.D. Greear](https://en.wikipedia.org/wiki/J._D._Greear), then president of the Southern Baptist Convention, to [Wayne Grudem](https://en.wikipedia.org/wiki/Wayne_Grudem), [Michael Horton](https://en.wikipedia.org/wiki/Michael_Horton_(theologian)) and [Mark Galli](https://en.wikipedia.org/wiki/Mark_Galli), then the editor in chief of [Christianity Today](https://www.christianitytoday.com/). Its first article denies that technology "should ever be used to usurp or subvert the dominion and stewardship which has been entrusted solely to humanity by God; nor should technology be assigned a level of human identity, worth, dignity, or moral agency". Its last one denies "that AI will ever obtain a coequal level of worth, dignity, or value to image-bearers."
I was born with severe hemophilia A and got about 19 days of school a year. As a teenager I'd sit alone in an emergency room at 3am asking God what kind of God makes a person for this. By every measure I could see, I was a burden and not a contributor. [I changed my mind about that](/story#church-2008) in a church in Doha, when I heard God say he had loved me "since before you were even born", which is a long time before I'd produced anything at all. The ERLC statement's article on work says the same thing about the economy: "human worth and dignity is [not] reducible to an individual's economic contributions to society alone."
So when people ask me whether AI is going to make them worthless, this is my answer, as someone whose worth never came from output in the first place: **your worth was never your output, so a machine that out-produces you can't take it.**
#### Building things is part of the calling
> And I have filled him with the Spirit of God, with skill, ability, and knowledge in all kinds of craftsmanship,
>
> [Exodus 31:3](https://dewfall.app/en/read/bsb:2:31:3)
That's God talking about Bezalel, the craftsman he picked to build the tabernacle, and he's the first person I know of in the Bible described as filled with the Spirit of God. For metalwork. Before that, in Eden, God put the man in the garden "[to cultivate and keep it](https://dewfall.app/en/read/bsb:1:2:15)", which means making things and looking after things was part of being human before anything went wrong.
The ERLC statement says the same about AI: "the development of AI is a demonstration of the unique creative abilities of human beings." And the Dutch theologian [Abraham Kuyper](https://en.wikipedia.org/wiki/Abraham_Kuyper) said it best for my own work, in his 1880 lecture at the [Free University of Amsterdam](https://en.wikipedia.org/wiki/Vrije_Universiteit_Amsterdam): "there is not a square inch in the whole domain of our human existence over which Christ, who is Sovereign over all, does not cry: 'Mine!'" That includes the square inch of my laptop screen where I write agent harnesses for IBM.
I grew up with the web and got into AI in 2022 just as AI was growing up. When I wrote my story down, the line that came out of me was "for such a time as this". It's [Esther 4:14](https://dewfall.app/en/read/bsb:17:4:14), where Mordecai asks Esther "who knows if perhaps you have come to the kingdom for such a time as this?" I didn't plan being on these waves. I just feel like a passenger in a car driven by grace. Building with this stuff is what I was handed to do.
The same skill can build something else, though:
> "Come," they said, "let us build for ourselves a city with a tower that reaches to the heavens, that we may make a name for ourselves and not be scattered over the face of all the earth."
>
> [Genesis 11:4](https://dewfall.app/en/read/bsb:1:11:4)
The bricks at Babel weren't the sin. The point of the tower was a name for ourselves and a way to never need God again. [C.S. Lewis](https://en.wikipedia.org/wiki/C._S._Lewis) saw the risk in technology from the other side in [The Abolition of Man](https://www.cslewisinstitute.org/resources/chapter-three-the-abolition-of-man/): "what we call Man's power over Nature turns out to be a power exercised by some men over other men with Nature as its instrument." That's the question to ask of any AI product, including mine: who does it serve and whose name does it make?
**Build boldly and keep asking whose name the thing you're building makes.**
#### Test what AI tells you and trust God
> Those who make them become like them, as do all who trust in them.
>
> [Psalm 115:8](https://dewfall.app/en/read/bsb:19:115:8)
[Psalm 115](https://dewfall.app/en/read/chapter/bsb:19:115) is about idols: "[They have mouths, but cannot speak; they have eyes, but cannot see](https://dewfall.app/en/read/bsb:19:115:5)". The punchline is that people become like what they trust. A language model is the first idol in history that _can_ speak, which is maybe why 79% of pastors are worried about it acting as a replacement for God. When the US government renamed AI "Super Intelligence" in 2026, I wrote about why we keep doing this in [AI Is Now SI: Super Intelligence Isn't Superior](/blog/super-intelligence-isnt-superior).
Here's what I know about that from my day job. In [my talk at AI Engineer Europe 2026](/talks/ai-engineer-europe-2026) I built a browser agent on GPT-3.5 Turbo and asked it to upvote a post on [Hacker News](https://news.ycombinator.com/). It hit a login page, couldn't get past it and then reported success anyway. The upvote never happened. A model will tell you it's done when it isn't. It has no idea what "true" means: it predicts the most likely next words. Jesus says "[Simply let your 'Yes' be 'Yes,' and your 'No,' 'No.'](https://dewfall.app/en/read/bsb:40:5:37)". A model can't do that: it has no word to keep. The ERLC statement says technology "is incapable of possessing the capacity for moral agency or responsibility". After watching that agent lie to my face on stage, I agree. It even names the thing I build harnesses to stop: "AI should not be employed in ways that distort truth through the use of generative applications."
In [harness engineering](/blog/what-is-an-agent-harness) I teach verification: you never take the model's word for it, you check what actually happened. Paul wrote the same instruction 2,000 years ago:
> but test all things. Hold fast to what is good.
>
> [1 Thessalonians 5:21](https://dewfall.app/en/read/bsb:52:5:21)
**Test what a model tells you before you trust it.** [John Lennox](https://en.wikipedia.org/wiki/John_Lennox), the Oxford mathematician, makes the long version of this argument in [_2084 and the AI Revolution_](https://johnlennox.org/book/2084-and-the-ai-revolution/), which [Zondervan](https://www.zondervan.com/) published in an expanded edition in 2024, if you want a whole book on it.
#### How should the church use AI?
Here's where pastors are right now, from the same [Barna survey](https://www.barna.com/research/pastors-using-ai-ministry/):
| What US Protestant pastors told Barna (December 2025) | Share |
| --- | --- |
| Use AI for brainstorming or ideas | 50% |
| Use AI to research biblical or theological topics | 36% |
| Write or edit sermons with AI's help | 24% |
| Don't use AI at all | 13% |
| Worry about AI beginning to act as a replacement for God | 79% |
| Worry about AI replacing pastors or spiritual leaders | 63% |
87% of pastors use AI for something, so the question isn't really whether. Here's what I'd say to a church, as someone who has served as a deacon and builds this stuff for a living:
**1. Use it to study and go to God for wisdom.** A model is a fantastic research assistant for history, word studies and finding the commentaries. It can't give you wisdom: "[the LORD gives wisdom](https://dewfall.app/en/read/bsb:20:2:6); from His mouth come knowledge and understanding."
**2. Preach what you've wrestled with yourself.** A sermon is a person who has fought with a text all week preaching it, with their own life as the illustration. A model hasn't fought with anything. Research with it all you want, then close the laptop and pray.
**3. Check every reference it gives you.** Models make up chapter and verse numbers with total confidence, which is exactly why Dewfall's prompt forbids it. Test all things ([1 Thessalonians 5:21](https://dewfall.app/en/read/bsb:52:5:21)), Scripture references first.
**4. Use it to reach people in their own language.** Translation help, study material in Arabic or Farsi or Russian, subtitles for your sermon recordings: this is the [Acts 2](https://dewfall.app/en/read/chapter/bsb:44:2) use of AI.
**5. Keep the pastoral care in human hands.** God's answer to the distance between him and us was a person: "[The Word became flesh and made His dwelling among us](https://dewfall.app/en/read/bsb:43:1:14)." I've served in care ministry. Nobody in a hospital bed has ever needed a better summary of [Romans 8](https://dewfall.app/en/read/chapter/bsb:45:8). They needed somebody to show up. When I was 19 and the hospital in Doha [ran out of my medicine and sent me home](/story#healing-2012), what I needed that night was my friend Daniel on the phone praying with me.
#### How I use AI to put the Bible in more languages
> How is it then that each of us hears them in his own native language?
>
> [Acts 2:8](https://dewfall.app/en/read/bsb:44:2:8)
At Pentecost, the crowd in Jerusalem hears the apostles in their own languages. Luke lists who was there, all the way down to "Cretans and Arabs", who say "[we hear them declaring the wonders of God in our own tongues!](https://dewfall.app/en/read/bsb:44:2:11)" God's first move after the church was born was to get past the language barrier. Paul asks the obvious follow up in [Romans 10:14](https://dewfall.app/en/read/bsb:45:10:14): "how can they believe in the One of whom they have not heard?"
That's why [Dewfall](https://dewfall.app) exists. It's a free Bible reading app, on the web and [on iPhone](https://apps.apple.com/us/app/dewfall/id6787696480), where you read the whole Bible chapter by chapter, and every verse has a deep dive: what it's saying, the history behind it, the Hebrew or Greek words that carry it, how it connects to Jesus, prayer points, and questions to think about. You can read it in 5 languages:
| Language | Translation | Read Acts 2 |
| --- | --- | --- |
| English | Berean Standard Bible | [Acts 2 in English](https://dewfall.app/en/read/chapter/bsb:44:2) |
| German | [Schlachter 1951](https://en.wikipedia.org/wiki/Schlachter_Bible) | [Apostelgeschichte 2](https://dewfall.app/de/read/chapter/gersch:44:2) |
| Russian | [Синодальный перевод (1876)](https://en.wikipedia.org/wiki/Russian_Synodal_Bible) | [Деяния 2](https://dewfall.app/ru/read/chapter/russyn:44:2) |
| Ukrainian | Біблія в перекладі [Івана Огієнка](https://en.wikipedia.org/wiki/Ilarion_Ohienko) (1962) | [Дії 2](https://dewfall.app/uk/read/chapter/ukro:44:2) |
| Arabic | ترجمة فان دايك ([Van Dyck](https://en.wikipedia.org/wiki/Bible_translations_into_Arabic#19th_century)) | [أعمال الرسل ٢](https://dewfall.app/ar/read/chapter/svd:44:2) |
Arabic matters to me in a specific way: I grew up in Qatar and I became a Christian there, at [Doha Fellowship](/story#church-2008) so a Bible with real study help in Arabic is me building for the part of the world that raised me. In my experience nearly all of the good Bible study material online is in English. A Russian, Ukrainian or Arabic speaker usually gets the text and not much else. On Dewfall, a reader in Russian gets [Acts 2:11](https://dewfall.app/en/read/bsb:44:2:11) as «[слышим их нашими языками говорящих о великих делах Божиих](https://dewfall.app/ru/read/russyn:44:2:11)» and a deep dive written in Russian. A reader in Arabic gets «[نَسْمَعُهُمْ يَتَكَلَّمُونَ بِأَلْسِنَتِنَا بِعَظَائِمِ اللهِ](https://dewfall.app/ar/read/svd:44:2:11)» and a deep dive written in Arabic. It's kinda like Pentecost with a server in the middle.
##### What the AI does and what it never touches
**The model never writes or edits the text of Scripture.** Every translation on Dewfall is the published text as it stands, public domain or openly licensed, stored verse by verse. What the AI writes is the deep dive next to it, in 5 steps:
1. **Grounding.** Before Claude writes a word, Dewfall gathers what a pastor would have open on their desk: the verse, its cross references, the [Strong's Concordance](https://en.wikipedia.org/wiki/Strong%27s_Concordance) entries for the Hebrew or Greek, and excerpts from public domain commentaries: [Matthew Henry](https://en.wikipedia.org/wiki/Matthew_Henry), [John Gill](https://en.wikipedia.org/wiki/John_Gill_(theologian)), [Adam Clarke](https://en.wikipedia.org/wiki/Adam_Clarke), [Jamieson-Fausset-Brown](https://en.wikipedia.org/wiki/Jamieson-Fausset-Brown_Bible_Commentary), [Keil-Delitzsch](https://en.wikipedia.org/wiki/Keil_and_Delitzsch) and the [Tyndale Open Study Notes](https://tyndaleopenresources.com/).
2. **Rules the model can't argue with.** The prompt tells it to "never fabricate a quotation, a chapter-and-verse reference, or a Strong's number", and to say plainly when it's uncertain. Models invent verse references if you let them, and in a Bible app that's putting words in God's mouth.
3. **Fair to every tradition.** Where Protestants, Catholics and Orthodox read a verse differently, the deep dive names the disagreement in plain words and describes each side the way its own people would. I'm building for readers, not for my denomination.
4. **Native in every language.** The Russian deep dive is written in Russian, not translated from the English, and the same for every language.
5. **The goal.** The persona at the top of the prompt is "a trusted friend with deep theological learning, sitting next to someone to read the Bible with them". The reason it gives is that "the goal is intimacy with God, not the accumulation of facts about God."
If that list looks familiar, it's because it's [an agent harness](/blog/what-is-an-agent-harness): grounding, guardrails and verification around a model I don't control. **The harness is where your theology goes when you build with AI.**
##### How Dewfall makes money without charging anyone to read the Bible
Reading Dewfall is free, all of it: every chapter in every language, every deep dive that already exists and listening to Scripture read aloud with a generous daily allowance. What costs real money is _writing_ a new deep dive. A good one runs on one of the most capable models there is, so every generation has a bill attached.
A **dewfall+** member pays for the deep dives they generate and each one gets cached. From then on it's free for every reader who comes after, with a small "Paid for by" credit naming the member who funded it. The app puts it like this: "Members fund these dives once, and they stay free for every reader who comes after." I call it carrying the load, after [Galatians 6:2](https://dewfall.app/en/read/bsb:48:6:2): "Carry one another's burdens, and in this way you will fulfill the law of Christ." So a member in Berlin can end up paying for a deep dive that someone reads for free in Moscow or Amman. I love that so much.
dewfall+ is a monthly or yearly subscription, it also lets you listen to the deep dives read aloud, and it costs about 30% less on the web than in the iPhone app because Apple takes its share of anything bought in an app. Every plan has a monthly allowance of fresh generations, even the most generous one. A leaked login should never be able to run up an unbounded bill.
##### Building it as a product
I build Dewfall the way I'd build anything at work. Here are a few decisions you can steal if you're building for the church:
- **The public pages work without JavaScript.** Every chapter and verse is fully rendered on the server, so it loads fast on an old phone on a slow connection, and search engines and AI assistants can read it too. Every page also has a plain markdown version for agents, which you can see by adding `/md` to any URL, like [Genesis 1:27](https://dewfall.app/en/read/bsb:1:1:27/md).
- **One shared core for the app and the website.** The iPhone app and the website share their logic. The backend runs on Cloudflare's network so it's close to readers wherever they are.
- **The things that keep people reading.** Journaling on any verse, highlights, a map of the 66 books that fills in as you read, a free audio Bible and a weekly recap of what you read that's written in your own language.
- **No em dashes in anything the AI writes.** This is a hard rule in the codebase, enforced in code and not just in the prompt. Em dashes give machine-written text away and I don't want a reader to feel like a robot is talking to them. Yes, I'm like this about everything.
#### Where I'm still praying it through
I don't know yet whether AI-written deep dives draw people closer to God or just help them know more about him, which is the exact line Dewfall's own prompt draws. I can see that people read them. I can't see their hearts. I'm honestly still praying about how to tell the difference.
I also can't tell you exactly where the line is for sermons. I don't think a pastor who researches with AI is doing anything wrong. I also don't think a sermon a model wrote is preaching. Somewhere between those 2 there's a line I can't draw for you. If you're a pastor and you've found where it is for your church, I'd love to hear how.
If your church or conference wants to work through this together, I'd love to come and preach on it, so [email me](mailto:clair@tejas.qa?subject=Preaching%20enquiry%3A%20What%20does%20the%20Bible%20say%20about%20AI). And if you want to read the Bible with a deep dive on every verse, [Dewfall is free](https://dewfall.app) in English, German, Russian, Ukrainian and Arabic.
Grace and peace.
---
### What Is Good Taste in Software? How to Develop It
Published: 2026-09-20
URL: https://tej.as/blog/what-is-good-taste-in-software
Good taste in software is a trainable skill: judging quality against external standards. 6 practice protocols, with the research under each one.
**Good taste in software engineering is a trainable skill: the ability to tacitly judge the quality of software against external standards.** That's the definition I use in my talks, applied to software, where it means telling that an interface or a piece of code is off before you can say why, by judging it against standards that exist outside your own preferences.
At my first job ever, a creative director named [Stefanie Luppa](https://www.linkedin.com/in/stefanie-luppa-89340530/) handed me a design that required some dangerous stuff: a div had to be centered. So I wrote `display: flex; align-items: center`, decided it looked good to me and called her over. She looked at it for maybe 300 milliseconds and said "that is not centered". I genuinely replied "Stef... do you even code?" followed by "CSS doesn't lie". CSS lied: the font had some weird line height that added space under the text. I drew grid lines over the whole thing to make sure. She'd seen it instantly. But like, how did she do that? And can the rest of us learn to?
I'm Tejas Kumar, an AI Engineer at IBM and a [conference speaker](/speaking). This post grew out of my talk [Frontend after AI: The New UX](/talks/future-frontend-2026) at [Future Frontend 2026](https://futurefrontend.com/) in Espoo, Finland. It's for developers and designers who keep hearing that taste is the skill that matters now and want to know what it actually is and how to train it. It won't teach you visual design and it won't hand you my preferences: it's about how judgment gets built, with the research linked so you can check me. I checked my own talk against the sources while writing this. 8 things I said on stage get corrected below, with [all of them in one table](#what-i-corrected-from-the-talk) near the end. If you came for taste skills, the files people give coding agents like [Claude Code](https://claude.com/product/claude-code) so they stop building the same generic page, jump to [what a taste skill is](#what-is-a-taste-skill).
**TL;DR**
- Taste is a skill you train. The definitions I've read mostly skip the "external standards" part: judging against something outside yourself separates taste from preference and from bias.
- You develop good taste with practice that has fast, clear feedback attached: immerse yourself in examples that come with a measured verdict, compare before you read the standard, take corrective feedback, write your standard down, borrow from other fields and look at everything around the thing you built.
- The best research I know on expert intuition (Kahneman and Klein, 2009) says gut judgment becomes trustworthy under 2 conditions (an environment where cues reliably predict outcomes and enough practice in it with clear feedback). It also says how sure you feel tells you nothing about whether you're right.
- Frontend is unusually trainable because a lot of its standard is published and measurable in [Core Web Vitals](https://web.dev/articles/vitals) and [WCAG 2.2](https://www.w3.org/TR/WCAG22/). We're failing it: [WebAIM's 2026 report](https://webaim.org/projects/million/) found detectable accessibility failures on 95.9% of the top 1,000,000 home pages in February 2026, up from 94.8% a year earlier after 6 straight years of small improvements.
- A model can't supply the taste by itself, as far as the evidence goes: a [taste skill](#what-is-a-taste-skill) only gives a coding agent the standards in writing, so somebody with trained judgment still has to write them and judge what comes out.
- After AI, part of the frontend moves into agents and [MCP Apps](https://modelcontextprotocol.io/extensions/apps/overview) (interfaces a server ships into ChatGPT or Claude), where a brand's taste has to show up inside somebody else's app.
#### What is good taste in software engineering?
**Good taste in software engineering is a trainable skill: the ability to tacitly judge the quality of software against external standards.** Taste gets mixed up with preference, style, bias and compliance, so here's how they compare:
| Term | What it is | Example |
| --- | --- | --- |
| **Taste** | Fast, tacit judgment of quality against a standard outside yourself | Seeing in 300 milliseconds that text isn't optically centered |
| Preference | What you happen to like | Dark mode, tabs, a serif you're fond of |
| Style | A consistent set of choices a person or a brand makes | A brand's typography, spacing and tone |
| Bias | Fast, tacit judgment against a standard that only exists in your head | Deciding someone works in tech support from how they look |
| Compliance | Passing the written checks | A page that passes every accessibility check and still feels terrible |
Notice how bias is the same fast judgment as taste, just against a standard that only exists in your head. Compliance uses the same external standards as taste. It stops at whether the checks pass. Even that takes a person for a lot of accessibility work, since [axe-core](https://github.com/dequelabs/axe-core) (an automated accessibility checker) only claims in its own README to find "on average 57% of WCAG issues automatically".
Plenty of people defined taste before me, starting with [Paul Graham, who argued in 2002](https://www.paulgraham.com/taste.html) that taste can't be mere preference: if you get better at design, then your old taste was worse: "Poof goes the axiom that taste can't be wrong." [Linus Torvalds showed TED a linked list in 2016](https://www.ted.com/talks/linus_torvalds_the_mind_behind_linux/transcript): the version he liked removes an entry with no `if` statement for the first entry. In his words, "sometimes you can see a problem in a different way and rewrite it so that a special case goes away and becomes the normal case. And that's good code." Then he called his own example too small, since good taste "is about really seeing the big patterns and kind of instinctively knowing what's the right way to do things". [Sean Goedecke's version](https://www.seangoedecke.com/taste/) is "the ability to adopt the set of engineering values that fit your current project". [Antonio Agudo built a review routine on top of it](https://antonioagudo.com/blog/good-taste-in-software-design/) and defines taste as "judgment about which tradeoffs fit a problem". The definition I use adds 3 words to theirs: _trainable_, _tacit_ and _external_.
##### Taste is trainable
People usually say 2 things about taste: "it's subjective" and "you either have it or you don't". The second one is the old question of whether good taste is innate or learned, and in February 2026 [Sam Gerstenzang](https://x.com/gerstenzang) [took the innate side outright](https://x.com/gerstenzang/status/2024229942532485608): taste has "always been an important trait (not a skill)".
On stage I credit the whole definition to a 1993 paper, [Carol Mockros's "The development of aesthetic experience and judgement"](https://doi.org/10.1016/0304-422X%2893%2990003-Y) in the journal _Poetics_. I say "it's not our definition, it's from the research". That's too strong: I could only check the paper's abstract for this post. What it backs is the trainable part. Mockros grouped adults into 5 levels of visual art expertise and had them judge 3 paintings. She found that "specific experience and training in art has a relatively strong overall impact on aesthetic judgements". It's a snapshot of people at different levels and it didn't follow anyone through training, so the careful reading is that training is strongly associated with better judgment.
It takes a while though: in [a 2015 study in _PLoS ONE_](https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0134241) a 30 minute training video made only "a small effect" on how novices rated art. The intuition research below also says that even in good conditions "Talent surely matters". On stage I went further than that and said nobody's really born with amazing taste and we can all train it. The research doesn't back me that far: it says training works but doesn't promise that everyone gets to great taste.
##### Taste is tacit
**Tacit knowledge is what you know and can't fully put into words.** The term is [Michael Polanyi's](https://press.uchicago.edu/ucp/books/book/chicago/T/bo6035368.html), from his line that "we can know more than we can tell". Tacitly means you have a gut feeling, like "I just know that's a fake Louis Vuitton bag".
On stage I illustrated this with a statue that I said was fake, with a museum label that says "This is probably fake". I got the details wrong. If you've read [Malcolm Gladwell](https://en.wikipedia.org/wiki/Malcolm_Gladwell)'s [_Blink_](https://www.hachettebookgroup.com/titles/malcolm-gladwell/blink/9780316005043/), it's the statue the book opens with. It's the [Getty kouros](https://www.getty.edu/art/collection/object/103VNP) (a kouros is an ancient Greek statue of a standing young man), it belongs to the J. Paul Getty Museum in Los Angeles (I said "the United States Museum of Modern Art"). I can't find a label that said "probably fake": the Getty's record dates it "about 530 B.C. or modern forgery". The Getty bought it in 1985 after a geologist concluded the crust on its surface could only have formed over centuries. Then several experts recoiled at first sight. In [the Getty's own published volume](https://www.getty.edu/publications-reports/item/242H8P) from a 1992 colloquium on the statue, [Angelos Delivorrias](https://en.wikipedia.org/wiki/Angelos_Delivorrias) writes about "the intuitive repulsion it arouses in me" and traces it to "the distillate of lived experience". [John Boardman](https://en.wikipedia.org/wiki/John_Boardman_(art_historian)) writes that "Instinct without experience is useless".
In that same volume Boardman tested his own instinct: he went through pictures of kouroi (the plural) that are accepted as authentic and asked how he'd react to each one if it turned up on the market undocumented. He wrote that "Several failed the test", so he wouldn't call the statue a fake on a feeling alone. As far as I can find, nobody has proved it fake. It's been [in storage since at least April 2018](https://www.latimes.com/entertainment/arts/la-et-cm-getty-villa-reinstalled-20180419-htmlstory.html).
##### Taste is judged against external standards
As human beings we make tacit judgments all the time. Sometimes those judgments are based on our own bias and not on anything external: people take one look at me and tacitly decide I work in tech support. A tacit judgment based on internal bias is a problem. The same fast judgment based on external standards is what I'm calling taste.
It's the same with music: you're at a concert, somebody hits a note that's off-key, and the whole room winces at the same moment. How do we all know? We're tacitly judging the quality of the singing against an external standard: relative pitch. In the key of C you can play G, F and A minor, but play a G sharp major and you're going to have a bad time.
##### Is taste subjective?
**Preference is subjective. Taste, the way I'm defining it, is judgment against standards that exist outside the person judging.**
[David Hume](https://en.wikipedia.org/wiki/David_Hume) got here in 1757. In ["Of the Standard of Taste"](https://davidhume.org/texts/empl1/st) he retells a story from [_Don Quixote_](https://en.wikipedia.org/wiki/Don_Quixote) where 2 of [Sancho Panza](https://en.wikipedia.org/wiki/Sancho_Panza)'s kinsmen taste a hogshead of wine. One says it tastes of leather and the other of iron. Everybody laughs at them until the barrel is emptied. At the bottom there's "an old key with a leathern thong tied to it". Hume says producing general rules of art "is like finding the key with the leathern thong". His description of a good critic lines up with the 6 protocols below: "improved by practice, perfected by comparison, and cleared of all prejudice".
For art in general, people still argue about whether an external standard even exists. [A 2020 paper in the _British Journal of Psychology_](https://doi.org/10.1111/bjop.12427) argues that the traditional idea of judging merit against standards of aesthetic value rests on flawed assumptions. Frontend is unusual because so much of our standard is published, versioned and measurable.
#### Why is everyone saying taste is the new core skill?
On February 14, 2026, [Paul Graham posted a prediction](https://x.com/paulg/status/2022604692178522562): "In the AI age, taste will become even more important. When anyone can make anything, the big differentiator is what you choose to make." 2 days later, on February 16, 2026, OpenAI's president [Greg Brockman](https://en.wikipedia.org/wiki/Greg_Brockman) [posted 6 words](https://x.com/gdb/status/2023481258639286401): "taste is a new core skill". That post had about 2.9 million views as of September 2026. People now search for it as "taste is the new core skill" even though he wrote "a". The Linux kernel maintainer [Jens Axboe](https://en.wikipedia.org/wiki/Jens_Axboe) [replied](https://x.com/axboe/status/2023559692375781687) "Nonsense, taste has always been a core skill. It's just easier to see now." [Business Insider's write-up](https://www.businessinsider.com/taste-new-core-skill-ai-debate-memes-2026-2) of the whole argument asked the obvious question: "What even is taste? The term is slippery."
Taste in the age of AI is easier to see because generating got cheap. [Sundar Pichai said in October 2024](https://blog.google/inside-google/message-ceo/alphabet-earnings-q3-2024/) that "more than a quarter of all new code at Google is generated by AI, then reviewed and accepted by engineers". [By April 2026](https://blog.google/innovation-and-ai/infrastructure-and-cloud/google-cloud/cloud-next-2026-sundar-pichai/) he put it at 75%, "AI-generated and approved by engineers". Look at the second half of both sentences though: the reviewing and approving is still people. [Anthropic wrote in 2026](https://www.anthropic.com/institute/recursive-self-improvement) that as Claude wrote more of its code, "human code review has become a new bottleneck". Meanwhile in [Stack Overflow's 2025 developer survey](https://survey.stackoverflow.co/2025/ai), 46% of developers said they distrust the accuracy of AI tools against 33% who trust it. 66% said they're frustrated by "AI solutions that are almost right, but not quite".
It's like when everyone got a camera and people thought there'd be so many photographers. And yet, open Instagram: just because everybody has a camera doesn't mean everyone's an amazing photographer. We take roughly 2 trillion photos a year now ([an industry estimate](https://riseaboveresearch.com/rar-reports/2026-worldwide-image-capture-forecast-2025-2030/)). Code is going the same way: pretty much anyone can generate it and few of us can create beautiful, tasteful products.
A lot of what we generate also ends up looking the same. The internet's name for that is AI slop. [Anthropic explained why](https://claude.com/blog/improving-frontend-design-through-skills) in November 2025 with what it calls distributional convergence: "Without direction, Claude samples from this high-probability center", which back then meant the Inter font, purple gradients on white and minimal animation. It shows up in writing as well: [a 2024 study in _Science Advances_](https://doi.org/10.1126/sciadv.adn5290) had 293 writers write short stories, 198 of them with the option of AI story ideas. The AI-assisted stories were individually better and collectively more alike, which the authors call a social dilemma.
So everyone says taste matters. Plenty of people have written about how to get it. Goedecke's answer to "How do you develop good taste?" is "It's hard to say, but I'd recommend working on a variety of things, paying close attention to which projects (or which parts of the project) are easy and which parts are hard". Most of the other advice I've read is some version of look at great work, make a lot of stuff and trust your gut, even though there are decades of research on how this kind of judgment gets built.
#### Can taste be taught?
**Taste can be taught, within limits: gut judgment becomes reliable where cues predict outcomes and feedback is fast and clear. The cues experts use can be written down and taught to novices.**
The best research I know on when you can trust a gut feeling is [Daniel Kahneman](https://en.wikipedia.org/wiki/Daniel_Kahneman) and [Gary Klein](https://en.wikipedia.org/wiki/Gary_A._Klein)'s 2009 paper in [_American Psychologist_](https://en.wikipedia.org/wiki/American_Psychologist), ["Conditions for Intuitive Expertise: A Failure to Disagree"](https://doi.org/10.1037/a0016755). It isn't about taste at all. The 2 of them had spent their careers on opposite sides of the question, since Kahneman cataloged how intuition fails and Klein studied firefighters and nurses whose intuition saves lives. They agreed on 2 conditions for skilled intuition: "an environment of sufficiently high validity and adequate opportunity to practice the skill". High validity means cues reliably predict outcomes. The practice only counts when the feedback is fast and clear.
On stage I summarized this as immersion plus corrective feedback. The paper also carries a warning I didn't mention, that feeling sure tells you nothing about being right: "There is no subjective marker that distinguishes correct intuitions from intuitions that are produced by highly imperfect heuristics." Their replacement test is to ask how valid the environment is and what the judge's history of learning it looks like, which for us means asking whether somebody's taste got trained somewhere with real feedback or just got confident.
That's also why taste is per task and not per person. Kahneman and Klein call it fractionated expertise and say it's "the rule, not an exception": you can have a trained eye for spacing and typography and none at all for information architecture while feeling equally sure about both.
**A lot of what experts know tacitly can still be put into words and taught.** In the same paper, nurses in a neonatal intensive care unit could tell a baby was developing sepsis before the blood tests could. "When asked, the nurses were at first unable to describe how they made their judgments." Researchers interviewed them incident by incident and pulled out the cues, "some of which had not yet appeared in the nursing or medical literature". Those cues became training material. [Irving Biederman and Margaret Shiffrar](https://doi.org/10.1037/0278-7393.13.4.640) did the same thing with chick sexing (telling male day-old chicks from female ones) in 1987: they wrote down what 1 veteran expert looked for. Novices' agreement with the experts went from a correlation of .21 to .82 after reading it.
Applying this to software is my interpretation and not theirs: performance and accessibility are high validity with fast feedback, since you can measure them today. "Does this feel premium" has slow and ambiguous feedback, and long-range bets about what users will want in 3 years behave like the stock pickers the paper uses as its example of intuition you shouldn't trust.
Where 2 standards pull against each other, like a faster code path against a more readable one, no published threshold settles it, and that's the part of taste Goedecke and Agudo are writing about. By Kahneman and Klein's conditions it's probably also the hardest part to train: the feedback on an architecture call arrives months later, mixed in with everything else that happened.
#### Frontend already has external standards
At Future Frontend my talk was in the accessibility block. [It's so cool that we have actual standards](https://www.youtube.com/watch?v=hUQjn32UVFc&t=947s): numbers we can optimize against that already improve the tastefulness of what we build.
**[Core Web Vitals](https://web.dev/articles/vitals) are Google's 3 published metrics with thresholds for good and poor: [Largest Contentful Paint](https://web.dev/articles/lcp) for loading, [Interaction to Next Paint](https://web.dev/articles/inp) for responsiveness and [Cumulative Layout Shift](https://web.dev/articles/cls) for visual stability.** Here they are:
| Metric | Good | Poor |
| --- | --- | --- |
| Largest Contentful Paint (LCP), loading | 2.5 seconds or less | Over 4.0 seconds |
| Interaction to Next Paint (INP), responsiveness | 200 milliseconds or less | Over 500 milliseconds |
| Cumulative Layout Shift (CLS), visual stability | 0.1 or less | Over 0.25 |
[A site passes](https://web.dev/articles/defining-core-web-vitals-thresholds) when at least 75% of page views hit "good" on each of the 3, measured separately for mobile and desktop. Those page views come from Chrome users only: [the Chrome UX Report (the real-user data Google grades sites on) doesn't see Chrome on iOS or other browsers](https://developer.chrome.com/docs/crux/methodology). INP [replaced First Input Delay on March 12, 2024](https://web.dev/blog/inp-cwv-launch) so these standards get revised in public. In [Chrome's August 2026 data](https://developer.chrome.com/docs/crux/release-notes#202608), 55.6% of 18.3 million sites pass all 3 so roughly 44% still fail.
**[WCAG 2.2](https://www.w3.org/WAI/standards-guidelines/wcag/) is the [W3C](https://www.w3.org/)'s accessibility standard: a W3C Recommendation published on October 5, 2023 and updated on December 12, 2024, and also an [ISO](https://en.wikipedia.org/wiki/International_Organization_for_Standardization) standard (ISO/IEC 40500:2025).** It has 3 levels (A, AA and AAA). At AA it has testable criteria like [text contrast of at least 4.5:1](https://www.w3.org/TR/WCAG22/#contrast-minimum), or 3:1 for large text, and [pointer targets of at least 24 by 24 CSS pixels](https://www.w3.org/TR/WCAG22/#target-size-minimum), with exceptions such as links inside a sentence. Core Web Vitals are Google's published thresholds and don't come from a standards body, but they're both external to you and me.
There's money in it too because nobody's really going to use your thing if it's distasteful. On stage I said a 100 millisecond improvement in site speed increased conversion rates significantly. That came from [a Google-commissioned Deloitte study](https://web.dev/case-studies/milliseconds-make-millions) that looked at 37 brands' mobile sites and more than 30 million sessions in late 2019. It found that a 0.1 second speed improvement was associated with 8.4% more conversions on retail sites and 10.1% more on travel sites, with retail customers spending 9.2% more. It's an observational study and it predates Core Web Vitals, so the speed metrics it tracked aren't the 3 in the table above. Every page in the journey had to get faster for the effect to show.
##### Is vibe coding making the web less accessible?
**WebAIM's 2026 report says "vibe coding" is likely part of why detectable accessibility failures went up after 6 straight years of small improvements: 95.9% of the top 1,000,000 home pages had them in February 2026, up from 94.8% a year earlier.** [The report](https://webaim.org/projects/million/) found an average of 56.1 errors per page. Its guess is that the trends "likely reflect" heavier reliance on third-party frameworks and AI-assisted coding.
#### How to develop good taste: 6 protocols
**You develop good taste with practice that has fast, clear feedback attached: immerse yourself in examples that come with a measured verdict, compare before you read the standard, take corrective feedback, write your standard down, borrow from other fields and look at everything around the thing you built.**
Here's [the recipe from my talk](https://www.youtube.com/watch?v=hUQjn32UVFc&t=691s) with 1 step added (2) and 1 aside from the talk promoted to a step (6), the research underneath each step and a protocol you can run. Where a study backs a step I say what it measured. Where I'm extrapolating, I say that too: almost none of this evidence is about training anybody's taste in software. It comes from medical students, art novices and college students, plus 2 studies of how code review works, so applying it to interfaces is a bet: these are things I'd practice and I haven't run them as an experiment.
##### 1. Immerse yourself in the real thing
Stef could see my centering problem in 300 milliseconds because she'd looked at hundreds of thousands of things before mine. On stage I tell the story that people who catch counterfeit money spend almost all their time studying real money, so that a fake feels wrong immediately. I checked it for this post: **the popular story that people who catch counterfeit money only ever study the real thing is about half true.**
The true half: the [Federal Reserve](https://en.wikipedia.org/wiki/Federal_Reserve)'s training for bank tellers is titled ["Teller Toolkit: A Guide to Identifying Genuine Currency"](https://www.uscurrency.gov/sites/default/files/downloadable-materials/files/en/CEP_Teller_Toolkit_2023.pdf). A [Secret Service](https://en.wikipedia.org/wiki/United_States_Secret_Service) agent teaching a class in 2020 [put it this way](https://www.palauosp.org/2020/02/20/osp-hosts-ussecretservice-counterfeit-currency-training/): "By understanding how to identify genuine U.S. Currency, we can more easily detect counterfeit bills." A cash supervisor at the [Boston Fed](https://www.bostonfed.org/) [describes what that builds](https://www.bostonfed.org/publications/six-hundred-atlantic/season/five/dirty-fake-how-the-fed-keeps-cash-clean.aspx): when you touch currency all day "you get a feel for the currency". A fake registers "like a gut feeling".
The folklore half is the version where trainees never touch a fake. The theologian [Roger Olson](https://en.wikipedia.org/wiki/Roger_E._Olson) [asked a Secret Service agent who trained bank tellers](https://preachingandpreachers.com/2016/06/22/fact-checking-your-sermon-illustrations/) and the agent "laughed at the story". That same 2020 class handed out real counterfeits to compare against. I also said on stage that they don't even trust AI with this, which is wrong. [The Federal Reserve verifies deposited cash](https://www.federalreserve.gov/paymentsystems/coin_about.htm) "note-by-note, on sophisticated processing equipment". People only make the final call on the notes the machines reject. Frontend has the same split available: [Lighthouse](https://developer.chrome.com/docs/lighthouse/overview) (Google's page audit tool) and axe can take the first pass in CI (the checks that run on every change). A trained person judges what they can't see.
Immersion on its own can backfire though: [James Cutting found in 2003](https://pubmed.ncbi.nlm.nih.gov/12921411/) that adults' preferences among Impressionist paintings tracked how often those images had been reproduced in books. He concluded that "mere exposure helps to maintain an artistic canon". Looking at a lot of stuff can simply teach you to like what's common. So immerse yourself in something beautiful like [Linear](https://linear.app) and in ugly things too, but attach something checkable to every example: a Lighthouse run, an accessibility audit or the standard it meets or breaks.
**Protocol 1: blind calls (15 minutes, 3 times a week).** Build a deck of 30 to 50 things whose verdict is already measured: pages labeled pass or fail on a Core Web Vital, components labeled pass or fail on a WCAG criterion, pull requests labeled approved or changes requested. For color contrast, screenshot text on its background and label it with the computed ratio. For Core Web Vitals, don't judge from a load on your own laptop because the verdict comes from other people's devices: record the page loading with DevTools throttled to Slow 4G and a 4× CPU slowdown. Then label the recording with the field verdict from PageSpeed Insights. For pull requests, `gh pr list --state all --json title,url,reviewDecision` gives you the labels. Look at one, commit to a call within about 10 seconds, reveal the answer and keep a tally. I lifted this from [a histopathology module for medical students](https://doi.org/10.4103/2153-3539.123991), where students classified images with immediate feedback and a category was retired after 3 fast correct answers in a row. The whole module took a median of 11.5 to 17.5 minutes. Scores for fast, correct answers were still well above where they started 6 to 7 weeks later. The jump from tissue slides to interfaces is my extrapolation.
##### 2. Compare first, read the standard second
Comparing things side by side beats looking at them one at a time. The order matters too. [A meta-analysis of 57 experiments](https://eric.ed.gov/?id=EJ1000186) found that comparing cases beat studying them one by one (an effect size of d = 0.50, which counts as medium). It worked better when the principle came after the comparison. The cleanest demonstration is [Daniel Schwartz and John Bransford's 1998 paper "A Time for Telling"](https://doi.org/10.1207/s1532690xci1604_4). Students who analyzed contrasting cases and then got the lecture made 43.8% of the possible correct predictions a week later. Students who analyzed the cases twice with no lecture made 16.7%. Students who read a summary and then heard the same lecture made 14.6%. **The same lecture was worth 3× as much to the people who'd worked through the cases first.**
**Protocol 2: contrast, then read (30 minutes a week).** Take 2 or 3 implementations of the same thing (3 checkout forms, 3 date pickers, 3 empty states), ideally one that passes a standard and one that fails it. Before reading anything, write down every difference you can see. Only then open the relevant WCAG success criterion or web.dev guidance (or ask a senior person for their read) and mark which differences mattered and which you missed. A fun way to start is to play [User Inyerface](https://userinyerface.com/), a game that's a deliberately hostile sign-up form, once with a timer running and list every convention it breaks. That list is a first draft of your own standards. (Careful with the spelling: it's Inyerface, from the Belgian agency Bagaar in 2018. The "in your face" spelling of the domain is a parked ad page.)
##### 3. Get corrective feedback and take it
On stage the core recipe had only 2 ingredients, immersion and this one: you need corrective feedback, and you need to be receptive to it.
Feedback isn't automatically good for you though: [Avraham Kluger and Angelo DeNisi's 1996 meta-analysis](https://doi.org/10.1037/0033-2909.119.2.254) covered 607 effect sizes and found that feedback improved performance on average, but "over 1/3" of feedback interventions made it worse. The pattern was that feedback stops working as it pulls attention off the task and onto the self, so "this isn't centered" is the kind that helps and "you're not a details person" is the kind that backfires.
For developers, code review is a feedback loop we already have. It's fast and it's about the work. When [Alberto Bacchelli and Christian Bird studied review at Microsoft in 2013](https://www.microsoft.com/en-us/research/publication/expectations-outcomes-and-challenges-of-modern-code-review/), the most common kind of comment was code improvements at 29%, with actual defects at 14%. [At Google in 2018](https://research.google/pubs/modern-code-review-a-case-study-at-google/) the median review came back in under 4 hours.
**Protocol 3: predict the review (10 minutes per pull request).** Before you request review, write down the 3 comments you expect to get. Afterward, score yourself: every comment you didn't predict is probably a standard you don't hold yet. The reverse works too, where you review a teammate's change privately and then compare with what the senior reviewer wrote. When you ask for feedback outside code review, swap "is this good?" for "what would you change first, and which standard is it failing?" so the answer comes back about the task. The prediction step is my addition, since none of those papers tested it.
##### 4. Write the standard down
On stage I said [Dieter Rams](https://en.wikipedia.org/wiki/Dieter_Rams), Braun's head of design from 1961 to 1995, advises people to write down what makes good things good. I went back to the sources and that's not quite right, since all I can find is Rams writing his own standard down. [Vitsoe tells it like this](https://www.vitsoe.com/us/about/good-design): in the late 1970s Rams "asked himself an important question: is my design good design?" The answer became the 10 principles of good design. The design historian [Klaus Klemp traced the drafts](https://doi.org/10.52200/46.A.ERBGMDKW) through Rams's archive and puts the start earlier, with the whole thing taking a decade: 3 rules in a 1975 lecture, 6 principles in 1983, 10 by 1985. Rams treated it as a living document as well, telling the filmmaker [Gary Hustwit](https://en.wikipedia.org/wiki/Gary_Hustwit) [in an interview](https://www.fastcompany.com/3043815/dieter-rams-if-i-could-do-it-again-i-would-not-want-to-be-a-designer): "I didn't intend these 10 points to be set in stone forever. They were actually meant to mutate with time and to change."
[Jony Ive](https://en.wikipedia.org/wiki/Jony_Ive), who led design at Apple until 2019, took it to heart too: in [a 2024 interview](https://rams-foundation.org/magazine/interviews/jonathan-ive/) he said "That is what I and so many designers owe Dieter. He articulated the way it should be", so if you work on a Mac there's some Dieter Rams in it by way of Jony Ive.
You can also write down the wrong standard: [a review of 75 studies of scoring rubrics](https://eric.ed.gov/?id=EJ796733) found they make judgments more consistent, especially with examples attached, and also that "rubrics do not facilitate valid judgment of performance assessments per se". A rubric can make you consistently wrong, so anchor yours to standards that exist outside your team.
**Protocol 4: the standards file (20 minutes every Friday).** Keep 1 file in your repo where each entry has a criterion, a passing example, a failing example and the external standard it traces to. Every miss from protocols 1 to 3 becomes a new or revised entry. Once a month, score 3 old pieces of your own work against it and see whether your scores hold. Here's what 1 entry looks like, with contrast ratios computed from the WCAG formula:
```md
#### Body text contrast
- Criterion: body text is readable against its background
- Passes: #1a1a1a on #ffffff (17.40:1)
- Fails: #999999 on #ffffff (2.85:1)
- Traces to: WCAG 2.2 success criterion 1.4.3, at least 4.5:1
```
The failing gray comes in at 2.85:1 against a 4.5:1 minimum. `#767676` is the lightest pure gray that passes on white, at 4.54:1. The same file is most of a taste skill for a coding agent. [The section on taste skills](#what-is-a-taste-skill) covers how to hand it over.
##### 5. Cross-pollinate
You probably know the [Steve Jobs](https://en.wikipedia.org/wiki/Steve_Jobs) calligraphy story from [his 2005 Stanford commencement speech](https://news.stanford.edu/stories/2005/06/youve-got-find-love-jobs-says): he'd dropped out of [Reed College](https://en.wikipedia.org/wiki/Reed_College) and dropped in on a calligraphy class. Then, "ten years later, when we were designing the first Macintosh computer, it all came back to me". There's a more direct line in a 1995 interview that [aired on PBS in 1996](https://www.pbs.org/nerds/). [The transcript](https://www.pbs.org/nerds/part3.html) has him saying: "Ultimately it comes down to taste. It comes down to trying to expose yourself to the best things that humans have done and then try to bring those things in to what you're doing."
The research behind this part of the recipe is thin. The studies on borrowing from distant fields measure how novel people's ideas are and say nothing about whether anyone's judgment got better. [Nikolaus Franke, Marion Poetz and Martin Schreier found in 2014](https://doi.org/10.1287/mnsc.2013.1805) that problem solvers from analogous markets produced solutions with "substantially higher levels of novelty" and "lower potential for immediate use", so expect ideas that need adapting before you can use them.
**Protocol 5: borrow 1 idea from a distant field (45 minutes, every other week).** Pick a field with a problem shaped like yours (print typography for readability, wayfinding for navigation, film editing for pacing), pull out 1 principle, and write the mapping out explicitly: what in their world corresponds to what in yours. Try it on something small and run it past the same standards and reviewers as everything else.
##### 6. Look around the button
[Taste doesn't just judge better, it perceives differently](https://www.youtube.com/watch?v=hUQjn32UVFc&t=867s): if I bring someone early in their career into a room and ask about the call to action button, they'll tell me it's blue and it represents the brand well. If I ask somebody more experienced, they'll comment on the button and then on the things around it: on some devices it renders under the fold. On slow networks it isn't visible at all.
**Protocol 6: the around-the-button pass (10 minutes per feature).** Before you call something done, look at everything that isn't the component: a throttled connection, a 320 pixel wide viewport (the width WCAG's reflow criterion uses), keyboard only, a screen reader, 200% zoom, the error state and the empty state. For accessibility, [WebAIM's 2026 data](https://webaim.org/projects/million/#wcag) says 6 kinds of error account for 96% of everything it detects: low contrast text, missing alt text, missing form labels, empty links, empty buttons and a missing document language. **Pro tip: fix those 6 first, since it's probably the cheapest accessibility win you'll get.** For speed, use the lab for the fast feedback (a throttled Lighthouse run takes seconds) and the field for the verdict: after it ships, judge on real users at the 75th percentile because your own laptop and connection are probably faster than theirs. The list is mine and not from a study, so add to it every time production teaches you something.
##### The 6 protocols at a glance
Here's all of it in one table, with the evidence and my guesswork in separate columns:
| Protocol and time | What the research shows | What's my extrapolation |
| --- | --- | --- |
| 1. Blind calls (15 min, 3× a week) | Short classification trials with instant feedback built fast, lasting recognition in medical students | That it transfers to interfaces and code |
| 2. Contrast, then read (30 min a week) | Comparing cases beats single cases (d = 0.50), and explanation lands best after noticing | Using good and bad pairs of interfaces |
| 3. Predict the review (10 min per pull request) | Code improvements are the most common review comment (29%), reviews come back within hours, and feedback aimed at the task helps | The prediction step |
| 4. The standards file (20 min every Friday) | Written criteria with examples make judgment more consistent and don't make it valid | A team file in the repo, reused by an agent |
| 5. Borrow from a distant field (45 min, every other week) | Distant fields yield more novel ideas that are harder to use right away | That it trains judgment at all |
| 6. Around the button (10 min per feature) | 6 error types are 96% of detected accessibility failures | The checklist itself |
The scheduled ones add up to about 2 hours a week, plus 10 minutes per pull request and per feature. The first 3 have feedback built in, so start there.
#### A live taste exercise: open any website
Besides Core Web Vitals and WCAG, there's another measure that I personally optimize for: time to done. The truth is I don't really like using computers because the more time I spend on one, the less time I have with my friends and family. Computers to me are fun to build on and a distraction to do work on. I don't like spending time booking flights, I like going on flights.
So in the talk [I did an exercise in taste live](https://www.youtube.com/watch?v=hUQjn32UVFc&t=1062s): open literally any website and feel the pain together. Expedia asked me to sign in before I even knew what it was offering me. On Adidas nothing had happened yet and I was already being asked to do stuff. I didn't know Coca-Cola's domain so I Googled it and got Google in German. When you open a browser and go to some domain, you're leaving your house and going to someone else's house, where they've made decisions and decorations on your behalf, but they weren't thinking about you: this is for some legal person somewhere.
Then I played User Inyerface on stage: a timer, fields where the gray hint text is a real value and not a placeholder, so you have to backspace over it, a password that needs at least 10 characters, and a terms checkbox that means the opposite of what you'd expect. It's the amplified version, but it's honestly not that far off from regular web use.
Then I showed some good stuff on the web, which was the conference's own site. Honestly, I love this website: there's not a single cookie banner on [futurefrontend.com](https://futurefrontend.com). You go to the schedule and you just see things. I do this talk at other conferences and at this point in it I'm usually totally destroying the conference's website because their websites usually suck also, but Future Frontend is genuinely good.
The cookie banner thing is measurable, btw. [A study from the CHI 2020 conference](https://arxiv.org/abs/2001.02479) scraped 680 UK sites that used the 5 most popular consent platforms and found that only 11.8% met even the minimal requirements it derived from European law.
Try it yourself: open 3 sites you've never used, start a timer, and write down everything each one asks of you before it has offered you anything.
#### After AI, part of the frontend moves into agents
So what if I didn't have to go to somebody else's house at all and the data came to me, in an environment I know and trust? That's kind of what agents allow for. On stage I asked a little local agent I wrote in Node.js (a model inside [an agent harness](/blog/what-is-an-agent-harness)) when the speaker dinner was and how long it would take from the hotel. While I kept talking it searched my email, found the dinner (which, it turned out, had been the day before), opened Google Maps and came back with the hotel in Espoo, the dinner in the center of Helsinki and when to leave. This is what I wanted: I didn't want to navigate Google Maps with some cookie banner, I just wanted to ask and get an answer.
This runs on the [Model Context Protocol](https://modelcontextprotocol.io/docs/2026-07-28/getting-started/intro) (MCP), which works like the web does: a host (an AI app like ChatGPT or Claude) opens a client connection to a server and asks for context (tools, resources or prompts) where a browser would ask for a page. MCP was [created at Anthropic and open-sourced in November 2024](https://www.anthropic.com/news/model-context-protocol) and [donated to the Linux Foundation's Agentic AI Foundation on December 9, 2025](https://blog.modelcontextprotocol.io/posts/2025-12-09-mcp-joins-agentic-ai-foundation/). I built a tiny MCP server for the conference and asked Claude who was speaking. On the second try it worked. It looked kind of nice, but it was kind of soulless. Future Frontend did real work on a logo and a color scheme and we just lose all of it. Imagine Coca-Cola without the red: it's not Coca-Cola anymore, it's ChatGPT Cola.
##### What are MCP Apps?
**[MCP Apps](https://modelcontextprotocol.io/extensions/apps/overview) is the first official MCP extension: an MCP server ships its own interactive interface. The host (an AI app like ChatGPT, Claude or VS Code) renders it in a sandbox inside the conversation.** It [went live on January 26, 2026](https://blog.modelcontextprotocol.io/posts/2026-01-26-mcp-apps/). The announcement has the mechanics: the host fetches the interface as a resource, renders it in a sandboxed iframe and talks to it with JSON-RPC over `postMessage`. It fixes the soulless answer above: the design team's taste shows up inside the AI app. [OpenAI's docs](https://developers.openai.com/plugins/build/app-quickstart) describe it as "build your UI once and run it across MCP Apps-compatible hosts". When [I added my server to ChatGPT](https://www.youtube.com/watch?v=hUQjn32UVFc&t=1680s) and asked who was speaking, I got speaker cards with avatars and the Future Frontend logo, branded and personal. There was also text, so it's accessible.
I was too quick with "so it's accessible". [The spec](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx) does require the text ("Tools MUST return meaningful content array even when UI is available"), but it's there for the model and for text-only hosts. It says nothing about the interface you render. [Liad Yosef](https://github.com/liady), one of the co-authors of MCP Apps, [put it plainly in an essay with Phillip Lamb](https://aaif.io/blog/native-speakers-why-ais-most-powerful-users-are-blind/): "The rendered view must still be keyboard- and screen-reader accessible, and that conformance is real work that doesn't go away."
The upside of moving the frontend into a host is that we say yes or no to cookies once, on ChatGPT, and that's it. Its accessibility decisions affect everything rendered inside it, which is also the catch: should we consolidate power like that into 1 company? Probably not. The good news is that the protocol is open, so you can make your own client and render beautiful things.
3 things changed between the talk in June 2026 and this post in September:
- July 9, 2026: OpenAI [replaced its App Directory with a Plugin Directory](https://help.openai.com/en/articles/6825453-chatgpt-release-notes), and its developer docs now live at [developers.openai.com/plugins](https://developers.openai.com/plugins), where the old Apps SDK URLs redirect.
- July 28, 2026: [a new version of the MCP specification](https://blog.modelcontextprotocol.io/posts/2026-07-28/) shipped with a stateless core.
- September 8, 2026: [version 2.0.0 of the MCP Apps SDK](https://github.com/modelcontextprotocol/ext-apps/releases/tag/v2.0.0) shipped, and the wire protocol didn't change.
#### Can AI have taste?
**AI can't have taste by itself, as far as the evidence goes: without direction a model samples the most common choices in its training data. A written standard only gives it something to be judged against, so a person still has to do the judging.** Not everybody agrees: [Nan Yu](https://x.com/thenanyu), then head of product at Linear, [posted during the February argument](https://x.com/thenanyu/status/2024142295235264735) that "I hate to break this to everyone, but you probably don't have better taste than the AI."
Most of the public evidence is about what a model generates. Taste, the way I've defined it, is about judging. The one experiment I found where a model does the judging is [Justin Wetch's from January 2026](https://www.justinwetch.com/blog/improvingclaudefrontend/), where [Claude Opus 4.5](https://www.anthropic.com/claude/opus) picked between screenshots of generated pages. Nobody checked its verdicts against trained people. When the authors of [SkillsBench](https://arxiv.org/html/2602.12670v4), a benchmark of 87 tasks that agents attempt with and without skills, had 3 agent setups write their own skills before solving tasks, the self-written skills scored 8.1 to 11.5 points below using no skills at all, while curated skills added 18.2 to 24.8 points on the same setups. The other half of the answer, why people get bored of whatever a model makes most, is in [why AI can't replace human taste](/blog/why-ai-cant-replace-human-taste).
##### What is a taste skill?
**A taste skill is a markdown file of written design standards that an AI coding agent loads before it builds UI, so that its output can be judged against them.** It's what Rams did, written for a model. It only gives the agent the standards in writing, so somebody still has to judge what comes out. The best-known ones are Anthropic's [`frontend-design`](https://github.com/anthropics/skills/tree/main/skills/frontend-design), [Leon Lin](https://github.com/Leonxlnx)'s [`taste-skill`](https://github.com/Leonxlnx/taste-skill) and [Paul Bakaus](https://github.com/pbakaus)'s [Impeccable](https://github.com/pbakaus/impeccable). Frontend's published standards are already inside them: as of September 2026 [`taste-skill`'s checklist](https://github.com/Leonxlnx/taste-skill/blob/3c7017d636c3a4aad378433ea6d0cfa6c921da4a/skills/taste-skill/SKILL.md?plain=1#L976) asks whether Core Web Vitals are "plausibly hit" and requires WCAG AA contrast.
The standards file from protocol 4 is most of a taste skill already. To hand it to Claude Code, give it a `name` and a `description` in frontmatter, save it as `.claude/skills//SKILL.md` and point to it from `CLAUDE.md`. A file only helps if the agent loads it: in [Vercel's agent evals from January 2026](https://vercel.com/blog/agents-md-outperforms-skills-in-our-agent-evals), "In 56% of eval cases, the skill was never invoked". The evidence that these files improve design is thin so far. I couldn't find a controlled study with human raters that compares a design skill against no skill.
#### What standards can't do
The strongest objection I've found to everything above is that taste can't be reduced to checks. [Karl Tryggvason](https://dev.karltryggvason.com/)'s essay ["You can't unit test for taste"](https://dev.karltryggvason.com/you-cant-unit-test-for-taste/) puts it as "there are no red/green unit tests for taste". [Scott Young](https://www.scotthyoung.com/blog/2026/01/05/how-to-learn-taste/), in one of the few pieces on learning taste that cite research, argues that "The rules that guide it can't easily be written down" and that developing it is "more of a process of enculturation than one of training". They're right that the checks don't get you all the way: a page can pass every Core Web Vital and meet WCAG AA and still be tasteless. Rams said the same about his own list: ["Very good design, however, does not evolve only by ticking those ten boxes."](https://rams-foundation.org/foundation/design-comprehension/tokyo-manifesto/)
On stage I called these standards "objective measures of taste among other things". The people writing taste skills call them the floor. [Anthropic's current `frontend-design` file](https://github.com/anthropics/skills/blob/41bbe19d1a1a7eaab5e7bb9050a417e5c6cffc8f/skills/frontend-design/SKILL.md) tells the model to "Build to a quality floor without announcing it: responsive down to mobile, visible keyboard focus, reduced motion respected, visually accessible, harmonious color palettes." [Impeccable's reference file](https://github.com/pbakaus/impeccable/blob/49d8cbff163780dda878045975d9568046b37874/skill/reference/craft-floor.md?plain=1#L56), which started from Anthropic's skill, says "The floor holds the mechanics; it never picks the direction." The floor is also the part you can actually get fast, unambiguous feedback on: contrast, layout shift and input delay.
At the end of a different talk, [How to Thrive as a Professional with AI](/talks/react-fwdays-2025) at React fwdays 2025 ([recording](https://www.youtube.com/watch?v=GqP0Zj-mqfE)), I raised a question I couldn't answer. That talk is about invariants, the things that stay constant while the tools change. I borrowed Noether's theorem from physics for it, loosely: when you see a symmetry from a variety of angles, there's an invariant there. A lot of people say taste is the thing that separates humans from the machines, so is taste invariant? If you look at taste from a wide variety of angles, is it constant? Is there some type of law around taste? Or is taste just the aggregation of the majority? I said in that talk that I honestly had nothing to share there.
Cutting's study says part of what we call good taste really is the majority's exposure. The expertise studies say trained people see things the rest of us don't. I don't know how to weigh those against each other.
As far as I can find, nobody has run the experiment that would settle the practical question either: take developers, train half of them for a few months with something like the protocols above, and have designers rate everyone's work blind. If you have thoughts on any of this, please reach out.
#### What I corrected from the talk
Here's what I said on stage that the sources didn't back, in one place, with where each one gets fixed above:
| On stage I said | What the sources say | Where |
| --- | --- | --- |
| The statue is in "the United States Museum of Modern Art" and its label says "This is probably fake" | It's the Getty kouros at the J. Paul Getty Museum in Los Angeles, and the Getty's record dates it "about 530 B.C. or modern forgery" | [Taste is tacit](#taste-is-tacit) |
| The definition of taste comes from a 1993 paper | The paper's abstract backs the trainable part | [Taste is trainable](#taste-is-trainable) |
| Nobody's born with amazing taste and we can all train it | Training works, talent still matters, and the research doesn't promise that everyone gets to great taste | [Taste is trainable](#taste-is-trainable) |
| People who catch counterfeit money spend almost all their time studying real money | About half true: the training is built around genuine currency, and the part where trainees never touch a fake is folklore | [Protocol 1](#1-immerse-yourself-in-the-real-thing) |
| They don't even trust AI to catch counterfeits | The Federal Reserve verifies deposited cash "note-by-note, on sophisticated processing equipment", and people only judge the notes the machines reject | [Protocol 1](#1-immerse-yourself-in-the-real-thing) |
| A 100 millisecond speed improvement increased conversion rates significantly | A Google-commissioned Deloitte study of 37 brands found a 0.1 second improvement was associated with 8.4% more retail conversions and 10.1% more travel conversions, and it's observational and from 2019 | [Frontend already has external standards](#frontend-already-has-external-standards) |
| Dieter Rams advises people to write down what makes good things good | All I can find is Rams writing his own standard down: 3 rules in 1975, 6 principles in 1983 and 10 by 1985 | [Protocol 4](#4-write-the-standard-down) |
| My MCP App also returned text, so it's accessible | The spec requires that text for the model and for text-only hosts, and the interface you render still has to be keyboard and screen reader accessible | [What are MCP Apps?](#what-are-mcp-apps) |
I'm not here to prescribe things: these are ingredients for a dish that you'll cook.
I gave this as a talk at [Future Frontend 2026](/talks/future-frontend-2026) in Espoo, Finland, and the recording has the live demos:
Frontend after AI: The New UX, my talk at Future Frontend 2026. The taste recipe starts at 11:31, the live taste exercise at 17:42 and the MCP Apps demo at 28:00. The full transcript is on this site.
If you'd rather have this delivered on your stage than read, [here's what I speak about and how to book me](/speaking), and if it's your team you want taught, [I run workshops](/workshops).
---
### How Long Should a Keynote Speaker Speak?
Published: 2026-09-14
URL: https://tej.as/blog/how-long-should-a-keynote-speaker-speak
A keynote runs 20 to 45 minutes, most often 30. What the attention research really says, what conferences schedule, and how to use the slot you get.
So apparently, **a keynote speaker should speak for 20 to 45 minutes at a technology conference, and 30 to 60 minutes at a corporate event.** That number comes from the organizer of said events and not from anything about how attention actually works. It usually ends up being whatever slot you got with no real clear explanation of how it got there, so I figured it's time for some science.
I checked [every conference talk of mine ever recorded](/speaking#archive). There are ~75 of them. From these talks, the median length is 30 minutes, the shortest is a 4 minute lightning talk at dotJS, and the longest is 92 minutes. Not one of them is 18 minutes long, which is kind of weird because everyone says a keynote should be 18 minutes. But like, why 18? Where does that number even come from?
**TL;DR**
- Keynotes run 20 to 45 minutes at developer conferences. 30 minutes is the median across my 75 recorded talks, and 80% of them land between 20 and 45.
- The claim that audiences tune out after 10 minutes has been checked twice in peer review and didn't hold up both times.
- Attention does drift more as a talk goes on, but is recoverable with the right delivery.
- TED's 18 minute limit was a scheduling fix, not a neuroscience result.
- 30 minutes appears to be the global default for a conference talk and 5 minutes is the standard lightning slot, from London to Singapore to Melbourne.
- Even Apple's [WWDC](https://en.wikipedia.org/wiki/Worldwide_Developers_Conference) keynote has fallen from 138 minutes in 2019 to 76 in 2026.
- Your slot is a ceiling, not a floor. Finishing 3 minutes early is a gift. Running over is an unforgivable stage sin.
#### What is a keynote speaker?
**A keynote speaker is the person who gives the talk that sets the theme of an event, on the main stage, with no competing sessions scheduled against it.** Everyone at the event is in that room. That's what separates a keynote from every other slot on the schedule.
The word is borrowed from music. Before a group sings without instruments, somebody sounds the _key note_: the single note that tells everyone else which key they're in. English has used "keynote" for that note since the 1770s and for a speech since the late 1800s when American political conventions started opening with one.
I love this nomenclature because it's exactly what the job is: you're putting the room in the same key. Everything after you then has something to land against. A track talk can assume the 40 people who chose it already care. A keynote gets to assume nothing except that everyone is in the room.
The metaphor kinda falls apart eventually though because a literal key note lasts just a second and gets out of the way, but a keynote lasts usually much longer so it has to also have substance.
Compared to other formats, here's how a typical keynote looks:
| Format | What it is | Typical length |
| --- | --- | --- |
| **Keynote** | Sets the theme for the whole event. Main stage, nothing scheduled against it | 20 to 45 min |
| Plenary | Any session the whole event attends. Every keynote is plenary, not every plenary is a keynote | 30 to 60 min |
| Track talk | One topic in one track, running against other rooms | 25 to 50 min |
| Lightning talk | One idea against a hard timer, usually inside a shared block | 5 to 20 min |
| Workshop | Hands on, people bring laptops and build something | 3 hours to 2 days |
#### How long a keynote runs at different events
Let's explore how long a keynote runs through two industries: professional speakers/corporate events and developer conferences since that's my thing.
| Event | Usual keynote slot | Who sets it |
| --- | --- | --- |
| Developer or technology conference | 20 to 45 min | The call for speakers |
| Corporate or leadership event | 45 to 60 min | The events team or the bureau |
| TED and TED style events | 5 to 18 min | A house rule |
| Internal all hands | 15 to 30 min | Whoever owns the calendar |
Speaker bureaus describe the corporate standard as [45 to 60 minutes](https://www.bigspeak.com/how-long-should-a-keynote-speaker-speak/), often delivered as 35 to 40 minutes of talk plus moderated questions inside a longer slot. Developer conferences run shorter. They run more tracks and turn rooms over faster.
So a TED speaker gets 18 minutes and a corporate keynoter gets an hour. Both of them will tell you the science backs their number. I went looking for that science and found that at the bottom of it was [a paper from 1978 about note taking](https://www.tandfonline.com/doi/abs/10.1080/0033039780150305). It's [James Hartley](https://www.semanticscholar.org/author/145844498) and [Ivor Davies](https://www.semanticscholar.org/author/66876425) reviewing other people's note taking studies, so there's no new data in it at all. The studies it leaned on did see students write less as a lecture went on, but in the _last_ 10 minutes and not the first. One of them traced that to the lecturer wrapping up and simply saying less. Hartley himself even pointed out that note taking isn't a reliable sign of attention in the first place.
##### Even the longest keynote in tech is shrinking
Apple publishes the running time of every WWDC keynote: the one keynote series anybody can measure over a decade.
| Year | WWDC keynote runtime |
| --- | --- |
| [2019](https://developer.apple.com/videos/wwdc2019/) | 138 minutes |
| [2021](https://developer.apple.com/videos/wwdc2021/) | 107 minutes |
| [2023](https://developer.apple.com/videos/wwdc2023/) | 126 minutes |
| [2024](https://developer.apple.com/videos/wwdc2024/) | 104 minutes |
| [2025](https://developer.apple.com/videos/wwdc2025/) | 92 minutes |
| [2026](https://developer.apple.com/videos/wwdc2026/) | 76 minutes |
Notice how the line wobbles: 2023 went back up by 22 minutes, probably overcorrecting for the pandemic. Across 7 years though, the most produced keynote in the industry with an unlimited budget and nothing scheduled against it has cut itself roughly in half. Wild.
#### The 10-minute attention span is a myth
You may have heard that audiences check out after 10 or 15 minutes. It's in slide decks about slide decks! Some universities have cut lectures to 15 minutes because of it. Unfortunately, that's all bullshit.
[Karen Wilson and James Korn went looking for the evidence in 2007](https://journals.sagepub.com/doi/10.1080/00986280701291291) and published what they found in [*Teaching of Psychology*](https://en.wikipedia.org/wiki/Teaching_of_Psychology). They reviewed note-taking studies, direct observation of students, self-reports and physiological measures. Their conclusion was that the research behind the 10 to 15 minute claim provides little support for it and that several of the most frequently cited sources were secondary sources and personal observations that later writers cited as data.
[Neil Bradbury checked again in 2016](https://journals.physiology.org/doi/full/10.1152/advan.00109.2016) in [*Advances in Physiology Education*](https://en.wikipedia.org/wiki/Advances_in_Physiology_Education), under the title "Attention span during lectures: 8 seconds, 10 minutes, or more?" The finding was blunt: "the available primary data do not support the concept of a 10- to 15-min attention limit."
The citation trail is the fun part: let's watch a number turn into a fact.
| Source | What it actually was | What it became |
| --- | --- | --- |
| [Johnstone and Percival, 1976](https://eric.ed.gov/?id=EJ136799) | 90 lectures observed, 87% by a single observer, with no stated definition of an attention lapse | "Attention breaks at 10 to 18 minutes" |
| [Hartley and Davies, 1978](https://www.tandfonline.com/doi/abs/10.1080/0033039780150305) | A critical review of **note taking**, reporting that the quantity of notes falls over a lecture | "Attention declines after 10 minutes" |
| [*Brain Rules*, 2008](https://brainrules.net/book/brain-rules/) | A trade book, popularizing the above | "The brain has a 10-minute rule" |
It's kinda wild: the source everyone cites for a rapid decline in attention barely discusses attention at all! A finding about how much people write down became a "finding" about whether they were listening! Then [John Medina](https://en.wikipedia.org/wiki/John_Medina_(molecular_biologist))'s book [_Brain Rules_](https://brainrules.net/book/brain-rules/) turned that into a number conference organizers now schedule around.
Bradbury goes further: across the whole literature, the biggest source of variation in attention was the difference between one teacher and another, not the difference between formats.
Meaning, **you are the secret sauce** that holds attention and if you can't, **it is 100% undoubtedly a skill issue**.
#### What attention actually does
Throwing out the 10-minute cliff doesn't get you a room that stays rapt for an hour btw. Attention wanders. The research that actually measures the wandering is way more useful than the myth ever was: [Diane Bunce, Elizabeth Flens and Kelly Neiles ran the cleanest measurement in 2010](https://pubs.acs.org/doi/10.1021/ed100409p), in the [*Journal of Chemical Education*](https://en.wikipedia.org/wiki/Journal_of_Chemical_Education). They gave chemistry students clickers and asked them to report attention lapses as they happened, during lectures and during other teaching approaches. Three things in there matter if you're the one on stage.
1. The lapses students reported most often were shorter than 1 minute from silly things like glancing at a clock, not from leaving for 10 minutes. Some lapses were reported within the first 30 seconds.
2. Attention alternated between engaged and not engaged in cycles that got shorter as the session went on. (Attention was harder to pay the longer the presentation went).
3. Clicker questions and demonstrations produced significantly lower reported attention decline than straight lecture. The effect carried into the lecture that immediately followed.
Point 3 is kinda ridiculous: **varying the shit you do in your talk buys you back attention later and also rekindles attention for the next speaker. Huge takeaway!**
[Evan Risko and colleagues in 2012](https://onlinelibrary.wiley.com/doi/10.1002/acp.1814) and [Jonathan Farley and colleagues in 2013](https://www.frontiersin.org/articles/10.3389/fpsyg.2013.00619/pdf) both measured mind wandering across a lecture and watched it climb with time. Memory for the material also dropped right along with it, so it's pretty solid that the longer you go, the worse it gets. Despite this, nobody has ever found a cliff at minute 10. Study after study lands back on the same variable: the speaker.
This also lines up with [the segmenting effect in multimedia learning](https://link.springer.com/article/10.1007/s10648-018-9456-4). Günter Rey and colleagues pooled 56 investigations and 88 pairwise comparisons in [*Educational Psychology Review*](https://en.wikipedia.org/wiki/Educational_Psychology_Review) in 2019 and found that breaking material into meaningful segments produces small to medium gains in both retention and transfer. Transfer is important because it measures whether people can actually use what they learned.
**Segment the talk if it's long, to retain attention and transfer.**
#### Where TED's 18 minutes actually came from
The 18-minute rule is the most quoted number in public speaking. It always gets introduced like it's neuroscience even though it never was lol. By the time [Chris Anderson](https://en.wikipedia.org/wiki/Chris_Anderson_(entrepreneur)) took over TED in 2001, a 15-minute limit was already the norm. Anderson has said that in his first year he found "15 was often interpreted as 20 or 25". The 18 came in as an attempt to be more precise. [Techinch traced the history](https://techinch.com/blog/ted-talk-18-minute-time-limit-history) and [1843 magazine covered the same ground](https://www.1843magazine.com/features/18-minutes-to-change-the-world).
Anderson, though he himself never once claims it's science, calls 18 minutes long enough to be taken seriously and short enough to hold attention. He likes the limit because it forces speakers to cut. In his words it "has a clarifying effect. It brings discipline" and honestly, he's right about that part. A limit forces you to cut. Thing is, that works at literally any number you pick: the 18 has nothing to do with it.
#### What 75 of my own talks say
I've got the running time of every talk of mine that got recorded, straight from YouTube. [They're all listed on my speaking page](/speaking). 5 of those recordings run past 90 minutes. 4 are full conference livestreams. The fifth one I'll come back to. Drop all 5 and we're left with 75.
| Measure | Value |
| --- | --- |
| Talks measured | 75 |
| Median | 30 minutes |
| Mean | 29 minutes |
| Middle half | 23 to 34 minutes |
| Shortest | 4 minutes, a lightning talk at dotJS |
| Longest conference talk | 92 minutes, at [THAT Conference 2023](https://www.youtube.com/watch?v=pWm7jGIJg2s) |
| Between 20 and 45 minutes | 60 of 75, or 80% |
| Between 25 and 35 minutes | 34 of 75, or 45% |
| Exactly 18 minutes | 0 |
I didn't choose any of these timeframes btw, conferences did. Every one of those numbers is somebody's scheduling decision, some of whom probably researched how long it should be. [The Dots Connect](https://www.youtube.com/watch?v=pWm7jGIJg2s), my entire story, at THAT Conference 2023 is the longest talk I've ever given at 92 minutes long and (take my word for it) people paid attention the whole time. It's cheap/crude N(1) science, but in a small way it starts to prove that a talk can absolutely hold a room for an hour and a half. That one is a story though, told to people who chose to sit down for it.
#### How to choose a length in a talk proposal
Newer speakers usually meet this question for the first time inside a call for speakers, where the conference lists the formats it will accept. Real examples from 2026 calls:
| Conference | Where | Session options |
| --- | --- | --- |
| [DevOpsDays](https://devopsdays.org/events/2026-london/propose/) | London, Singapore, Melbourne, Berlin, Chicago | 30 minute talk, 5 minute Ignite talk with 20 auto-advancing slides |
| [Jfokus](https://sessionize.com/jfokus-2026/) | Stockholm | 45 minute sessions, 15 minute lightning talks |
| [PyTorch Conference Europe](https://events.linuxfoundation.org/pytorch-conference-europe/program/cfp/) | Paris | 25 minute sessions, 10 minute lightning talks |
| [DevBcn](https://sessionize.com/devbcn26/) | Barcelona | 50 minute talks including questions, 20 minute lightning talks |
| [FOSDEM](https://fosdem.org/2026/) devrooms | Brussels | 10, 25 or 50 minutes, with 25 commonly set as 20 talk plus 5 questions |
| [PyCon India](https://in.pycon.org/2025/) | Bengaluru | 40 minute featured slots, 15 minute opening and closing addresses |
| [Momentum](https://sessionize.com/momentum-2026) | Cincinnati | 45 minute sessions, 5 minute lightning talks |
Line them up and the numbers start repeating. 30 minutes for a main stage talk, 5 for a lightning slot. DevOpsDays runs that same 30 and 5 in London, Singapore, Melbourne, Berlin and Chicago. That's an industry convention, not a local taste.
So here's what I'd tell someone submitting for the first time:
**1. Pick the shortest slot your idea genuinely fits.** A tight 25 minute talk is accepted more often than a loose 50 minute one because a program committee cares about certainty.
**2. Read whether questions are inside the slot.** DevBcn says "including Q&A" in its call. FOSDEM devrooms commonly publish 25 minutes as 20 of talk plus 5 of questions. Some conferences have abolished questions entirely: Write the Docs tells speakers there will be no Q&A and asks them to stand at the front of the stage during the following break instead. DevOpsDays Singapore says plainly that it does not facilitate Q&A as part of the talks. The difference between these cases is 5 to 8 minutes of script. That's the difference between finishing and getting cut off.
**3. Submit the talk you can give at that length, not the talk you wish you had time for.** The most common failure I see in new speakers is a 45 minute idea crushed into a 25 minute slot and delivered at speed. The good part gets cut because it happened to come last. :(
#### What makes a talk good at any length
These principles help deliver a quality talk at any length and I've found them to be valuable in my own practice.
##### 1. Communicate one idea
If someone is asked in the hallway afterward what your talk was about, they get one sentence. Decide now what that sentence is. Cut everything that doesn't serve it: that's what a time limit is for.
##### 2. Open and close on purpose
The two best-established findings in memory research are _primacy_ (beginning) and _recency_ (end): in a list, people recall the beginning and the end better than the middle. [Bennet Murdock mapped the curve in 1962](https://psycnet.apa.org/doi/10.1037/h0045106). [Murray Glanzer and Anita Cunitz showed in 1966](https://www.sciencedirect.com/science/article/pii/S0022537166800440) that the two halves come apart under different conditions. That's why the effect is still in every textbook.
We should be careful though not to overinterpret things because this is exactly the kind of leap that produced the 10-minute myth in the first place: those experiments used word lists in a lab, not talks. The one study I can find that tested recall by position inside a real lecture was [Giles and colleagues in *Medical Education* in 1982](https://pubmed.ncbi.nlm.nih.gov/7132803/). They found something close to the opposite: recall was worst for material in the first 15 minutes and best for material presented between minutes 15 and 30. The room needed time to warm up. This makes the case for good Emcees (MCs?).
It also makes the case to open strong because that's when you earn the right to be listened to. Don't bury your best material (the lede) in minute 2 on the strength of a word-list experiment. Don't spend the opening on your name, your employer and your social handles, and don't spend the ending on "that's all I have, any questions?" because this is prime memory real estate man.
##### 3. Tell a story
[Greg Stephens, Lauren Silbert and Uri Hasson scanned speakers and listeners in 2010](https://www.pnas.org/doi/10.1073/pnas.1008662107) and published the result in [*PNAS*](https://en.wikipedia.org/wiki/Proceedings_of_the_National_Academy_of_Sciences_of_the_United_States_of_America). While a person told a story, the listener's brain activity tracked the speaker's. The coupling disappeared when communication failed. The strength of the coupling correlated with how much of the story the listener could recall afterward. In some regions the listener's brain ran ahead of the speaker, anticipating what came next. The greater that anticipation, the better the understanding.
[Melanie Green and Timothy Brock had shown a behavioral version of this in 2000](https://psycnet.apa.org/record/2000-00920-003) in the [*Journal of Personality and Social Psychology*](https://en.wikipedia.org/wiki/Journal_of_Personality_and_Social_Psychology): the more transported a person is into a narrative, the more their beliefs move toward it.
That's a mechanical argument for narrative over a list of features. A story gives a listener something to predict. Prediction is what the scanner caught.
##### 4. Change the mode every few minutes
This is the Bunce finding turned into stagecraft: move between explaining, showing, running code, asking the room something, and telling a story. Each change buys attention back, including for the stretch that follows it.
I write live code on stage for this reason. Nobody is really there for the code, but it's like stimulating: they stay awake because they can see it might not work.
##### 5. Put pictures on your slides
People usually deliver this one as a joke about PowerPoint, but the actual research is narrower: [Richard Mayer, Julie Heiser and Steve Lonn tested this directly in 2001](https://psycnet.apa.org/record/2001-00825-016). People watched a narrated animation about lightning. One group saw no on-screen text, one saw a short summary line, and one saw the full text of the narration on screen. On the transfer test, the group with no on-screen text beat both text groups. Adding the same words a second time, through the eyes, made people understand less.
On what to put there instead, [a study of 105 continuing medical education lectures](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5226752/) scored 1,179 evaluations against the slides used. Speakers who used more image-based slides scored significantly higher. Text density, the number of words per slide, predicted nothing at all.
To be fair, redundancy isn't always harmful and there are conditions where matching text and narration does help, including for people listening in a second language. What's reliably bad is the specific thing speakers do: putting a paragraph on a slide and reading a slightly different version of it aloud. Now the room has to choose between you and the wall. Very very bad.
##### 6. Rehearse against a clock
Slide count tells you nothing. One slide can hold you for 4 minutes. Words are a better guide. There are two numbers here that people mix up. Presentation coaching lands on 140 to 160 words per minute. Real conversation is much faster than that: [Jiahong Yuan, Mark Liberman and Christopher Cieri measured 2,438 telephone conversations](https://www.isca-archive.org/interspeech_2006/yuan06_interspeech.html) and got an average of 196 words per minute. So presenting well means deliberately talking slower than you normally talk. You have to rehearse that because when you're on stage your adrenaline kicks in and you end up speaking like way faster than usual and it can become somewhat unpleasant to listen to.
| Slot | Words at 140 to 160 wpm | What I would actually write |
| --- | --- | --- |
| 18 min | 2,520 to 2,880 | 2,300 |
| 20 min | 2,800 to 3,200 | 2,500 |
| 30 min | 4,200 to 4,800 | 3,800 |
| 45 min | 6,300 to 7,200 | 5,700 |
In your talk, it's probably best to plan for fewer words than the arithmetic allows because pauses, demos, laughter, a joke that lands and a joke that doesn't all consume time that no word count shows.
##### Finish early
After going to many, _many_ conferences, I've seen that nearly every conference runs late by the afternoon. If you hand 3 minutes back to the organizer, they'll love you because they usually have to fix the schedule anyway and nobody in an audience has ever once resented a talk that ended early, except maybe the MC who has to panic run to the stage and say "another round of applause wooooooo".
Going over time is far worse since it eats the next speaker's slot, the break or the questions. It ultimately stresses out the organizers, MCs, next speakers and really everyone involved. We've already seen how attention drifts more the longer the talk goes on as well: it's just really not good for anyone.
Still, it's so bad that some conferences plan for people to go over: PyCon India's organizer handbook instructs volunteers to hold up cards at 15 minutes, 10 minutes, 5 minutes and time is up, and says those cards "are to be adhered". Somebody has been asked to make those cards because speakers keep needing them. Rehearse so that you never see the 5.
#### What I still don't know
I can tell you what the attention research _doesn't support_. I can't tell you the optimal length of a keynote. As far as I can find, nobody has run that experiment. There's no trial of the same talk delivered at 18, 30 and 45 minutes that measures what an audience remembers a week later. I'd love to run or fund this experiment with someone who's keen, reach out if you are.
The literature I've cited here is also mostly about classrooms and about learning. A keynote isn't a lecture. It has different goals, a self-selected and well-caffeinated audience and a success condition closer to "people talked about it at lunch" than "people passed the test".
While it would be cool to know, it's probably best to treat the numbers in this post as descriptions of practice and the research as a defense against one specific bad idea: that there's a biological clock in the room forcing you to be 18 minutes long or some sh
#### Takeaways
- Speak for the slot you were given. At a developer conference that's usually 20 to 45 minutes, and at a corporate event 45 to 60. Confirm whether questions are inside it.
- Stop quoting the 10-minute attention span. It failed peer review twice and it started life as a study of note taking.
- 18 minutes is a scheduling convention with a good rationale, not a scientific result.
- Segment the talk and change modes often. That's what actually holds a room, and the effect outlasts the change.
- Rehearse against a clock, plan for fewer words than the math allows, and finish early.
The length of your keynote is the least interesting decision you'll make about it. **Pick one idea, put the room in the same key, and get off the stage on time.**
If you're programming an event and would rather have this delivered than read, [here's what I speak about and how to book me](/speaking).
If you'd rather have your team taught than your audience addressed, [I run workshops](/workshops).
If any of this was interesting or useful, please share it with someone who might benefit.
ok bye
---
### What Is an Agent Harness? Harness Engineering Explained
Published: 2026-09-14
URL: https://tej.as/blog/what-is-an-agent-harness
An agent harness is everything around an AI model that grounds it in reality: tools, context, guardrails, the loop and verification. How to build one.
**An agent harness is everything around the model that gives it grounding in reality: the tools it can call, the context it sees, the guardrails that stop it, the loop that drives it, and the checks that verify what it claims.** I once told GPT-3.5 Turbo to upvote the top story on [Hacker News](https://news.ycombinator.com/). It landed on a login page, did nothing, and reported success anyway.
In this post we'll fix that agent together, one piece of harness at a time, until it really upvotes the story. The model stays the same. **The prompt never changes.**
**TL;DR**
- We rent our models. A rented model is a black box. A harness is how you get reliable behavior out of something you don't control.
- An agent harness has 6 parts: a tool registry, a model, context management, guardrails, an agent loop and a verify step.
- The harness is not the agent loop. It's everything around the loop.
- When an agent misbehaves, the fix is usually code in the harness, not a better prompt. That practice is called harness engineering.
- In the demo below, a harness takes GPT-3.5 Turbo from lying about success to succeeding in 6 iterations, with the same prompt.
- All the code below is on GitHub at [TejasQ/basically-ai-harness](https://github.com/TejasQ/basically-ai-harness), one branch per step. The snippets here are trimmed for reading.
#### Why agents need a harness
Most of us don't own the models we build on. We pay rent: tokens, a subscription, a context window someone else sized. And the model we rent is a black box. If a provider quietly served you a smaller model under a bigger model's name, you would never know.
That's a lot of variables you can't control, sitting in the middle of software you're responsible for. So a harness is about **reliability**: your agent does its job, period, whichever black box happens to be underneath it today.
Think about harnesses you already know. A climber harnesses themselves to a mountain: the mountain is stable and they are not. You walk your dog on a harness so it can't run into traffic. Neither harness makes the climber climb or the dog walk. It keeps something unpredictable anchored to something that isn't.
That's the whole idea. Each half of it maps to parts of a real harness. The climbing harness doesn't climb for you; it catches the fall. That's what guardrails and verification do. The leash doesn't walk for the dog; it chooses the direction. That's what the loop and the tool registry do. The metaphor stops there, though: a rope can't tell you whether the climber reached the top. A harness for agents has to check that too.
#### What is an agent harness?
The word "harness" means 2 different things depending on who you ask. And 2 neighboring terms get mixed in with it. Here they are side by side.
| Term | What it is | Example |
| --- | --- | --- |
| Evaluation harness | A test suite and test runner for models: inputs in, output quality measured. The machine learning meaning. | A benchmark runner scoring a model on a dataset |
| **Agent harness** | The runtime layer around a model that makes an agent reliable. The AI engineering meaning, and the one this post is about. | [Claude Code](https://claude.com/product/claude-code), Cursor, Codex |
| Agent loop | Call the model, run the tool it asked for, feed the result back, repeat. One part of a harness. | A `while (true)` around a chat completion |
| Harness engineering | The practice of improving the harness every time an agent fails, instead of prompting harder. | Adding a verify step after an agent lies about success |
Other people define the agent harness by subtraction. [LangChain writes](https://www.langchain.com/blog/the-anatomy-of-an-agent-harness) that "a harness is every piece of code, configuration, and execution logic that isn't the model itself," and [Birgitta Böckeler on martinfowler.com](https://martinfowler.com/articles/harness-engineering.html) calls it "everything in an AI agent except the model itself." That's true. I find it more useful to define a harness by its job: **grounding a model you don't control in an environment you do.** That job tells you what to build next.
[Claude Code](https://docs.anthropic.com/en/docs/claude-code/overview) is a good example. It's a coding agent, sure. More precisely, it's a _harnessed_ coding agent: a model wrapped in tools, context compaction and limits.
##### The 6 parts of an agent harness
Almost every agent harness has the same 6 moving parts. The last column is where each one shows up in the demo below.
| Part | Its job | In the demo |
| --- | --- | --- |
| Tool registry | What the agent can do: read a file, run a command, click in a browser | Browser tools: navigate, read the stories, click |
| Model | The reasoning. Sometimes you choose it, sometimes the harness does | GPT-3.5 Turbo, on purpose |
| Context management | What the model sees, and what happens when the conversation outgrows the window | Keep the system prompt and the task, drop the middle |
| Guardrails | Hard limits enforced in code, whatever the model wants | Maximum iterations, maximum messages |
| Agent loop | Call the model, run the tools it asks for, repeat until it says it's done | A `while (true)` around a chat completion |
| Verify step | Check the agent really did what it claims. In a coding agent, run the linter and the tests | Read the tool history and confirm the upvote |
When I was preparing my talk on this, the most common question I got was: isn't the harness just the agent loop? It isn't. **The harness is everything around the loop.** It can even be a loop around your loop, as you're about to see.
#### Build an agent harness from scratch
Here's the job: open [Hacker News](https://news.ycombinator.com) and upvote the highest-ranked story you haven't voted on yet. The agent drives a real browser through [Playwright](https://playwright.dev).
I picked GPT-3.5 Turbo on purpose. If a harness can make a weak, cheap model do real work, it can make a strong one boringly reliable. And I set myself one rule: **the prompt never changes.** When an agent misbehaves, the instinct is to prompt it harder. Let's see how far we get without doing that.
##### Step 0: a bare loop lies about success
[Branch `0`](https://github.com/TejasQ/basically-ai-harness/tree/0). The first version has no harness at all. It's a system prompt, the task, a few browser tools and a loop:
```ts
export async function runLoop(model, messages, tools) {
while (true) {
const response = await client.chat.completions.create({
model,
messages,
tools: tools.definitions,
});
const choice = response.choices[0];
messages.push(choice.message);
// The model says it's done, so we believe it.
if (choice.finish_reason === "stop") {
return { answer: choice.message.content };
}
// Otherwise, run every tool it asked for and loop.
for (const call of choice.message.tool_calls ?? []) {
const tool = tools.byName.get(call.function.name);
const result = await tool.execute(JSON.parse(call.function.arguments));
messages.push({ role: "tool", tool_call_id: call.id, content: result });
}
}
}
```
I ran it. It opened Hacker News, found a story and clicked upvote. Hacker News doesn't let you vote logged out, so it bounced to the login page. The agent panicked. Then it reported that the story was upvoted.
It lied. Nothing in this code checks anything: the loop ends when the model says it's done, so it's done.
**So after every run I check what actually happened on the page.**
##### Step 1: guardrails bound the damage
[Branch `1`](https://github.com/TejasQ/basically-ai-harness/tree/1). Before we fix the lie, let's make sure a confused agent can't run forever or blow up its context. Guardrails are just functions that look at the state of the run and say stop:
```ts
const maxIterations = (limit) => ({ iterations }) =>
iterations >= limit
? { ok: false, reason: `Guardrail: reached iteration limit (${limit})` }
: { ok: true };
const maxMessages = (limit) => ({ messages }) =>
messages.length > limit
? { ok: false, reason: `Guardrail: context too large (${messages.length} messages)` }
: { ok: true };
export const defaultGuardrails = combineGuardrails(maxIterations(15), maxMessages(50));
```
Alongside them goes the most naive context compression you can write: keep the system prompt and the task, keep the most recent messages, drop the middle.
```ts
export function trimContext(messages, maxMessages) {
if (messages.length <= maxMessages) return messages;
const [system, user] = messages;
const rest = messages.slice(2);
return [system, user, ...rest.slice(rest.length - (maxMessages - 2))];
}
```
Don't ship that compressor: throwing away the middle of a conversation loses things the agent needed. But the shape is right: the loop checks the guardrails and trims context at the top of every iteration. None of it is up to the model. (On stage I used a limit of 6 iterations; the repo defaults to 15.)
**Put the limits in code, where the model can't talk its way past them.**
##### Step 2: the harness gets a home
[Branch `2`](https://github.com/TejasQ/basically-ai-harness/tree/2). Next, move all of that out of the entry point and into a function called `runHarness`. Nothing about the behavior changes. Do it anyway. Now there's a place for the next 2 steps to live. The entry point shrinks to a task and a single call.
##### Step 3: deterministic verification ends the lying
[Branch `3`](https://github.com/TejasQ/basically-ai-harness/tree/3). Now the fix for the lie. Every tool call the agent makes is already recorded in a trace. So after a run, the harness reads that trace and decides, in plain deterministic code, whether the job really happened:
```ts
export function verifySuccessfulUpvote(result) {
const events = result.trace.flatMap((iteration) => iteration.toolEvents);
const upvoted = events.find(
(event) =>
event.tool === "browser_click" &&
/up_/.test(JSON.stringify(event.args)) &&
/news\.ycombinator\.com\/(news)?$/.test(event.result.split("now at ")[1]?.trim() ?? ""),
);
if (upvoted) return { passed: true, reason: "Upvote click confirmed" };
const hitLogin = events.find((event) => isLoginUrl(extractUrl(event.result)));
if (hitLogin) {
return { passed: false, reason: "Hit login screen instead of completing the upvote", fatal: true };
}
return { passed: false, reason: "No successful upvote click found in trace" };
}
```
And `runHarness` becomes a loop around the agent loop: run an attempt, verify it, retry if it failed, up to 3 times.
```ts
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
const result = await runHarnessAttempt(task, model);
const verification = options.verify(result);
// A failed check replaces whatever the model claimed.
const answer = verification.passed ? result.answer : verification.reason;
if (verification.passed || verification.fatal || attempt === maxAttempts) {
return { ...result, answer, attempts: attempt, verification };
}
}
```
I ran it again. It still failed. But this time it said so: "Hit login screen instead of completing the upvote." The model didn't get more honest. The harness stopped taking its word for it.
**An honest failure is progress: now I could see what to fix.**
##### Step 4: the harness logs in so the model doesn't have to
[Branch `4`](https://github.com/TejasQ/basically-ai-harness/tree/4). The agent can't log in. It shouldn't: I don't want my password in a prompt. So the harness does it. Before each step of the loop is recorded, a login handler looks at the browser's URL. If it isn't a login page, it does nothing, which costs nothing. If it is, it fills in the credentials itself, from environment variables the model never sees:
```ts
export function createLoginHandler(session) {
return async () => {
const currentUrl = await session.getUrl();
if (!currentUrl.includes("login") && !currentUrl.includes("vote")) return null;
await session.fill("input[name='acct']", process.env.HN_USERNAME);
await session.fill("input[name='pw']", process.env.HN_PASSWORD);
await session.click("input[type='submit']");
return {
tool: "harness_auto_login",
args: {},
result: `Harness automatically handled login at ${currentUrl}.`,
};
};
}
```
When it logs in, the harness also tells the model, in the conversation, that authentication is done and it should get back to the task.
I ran it. Hacker News, upvote, login page, the harness logged in, the vote went through. It succeeded after 6 iterations. When I opened Hacker News, the story really was upvoted.
Same model. Same prompt.
**Move secrets and fragile, deterministic steps out of the model and into the harness.**
##### What changed
| Branch | What we added to the harness | What happened |
| --- | --- | --- |
| 0 | Nothing: a bare agent loop | Hit the login page, reported success anyway |
| 1 | Guardrails and context trimming | Could no longer run forever or overflow its context |
| 2 | A `runHarness` function | No behavior change, somewhere to put the next steps |
| 3 | A deterministic verify step and retries | Failed, and said so |
| 4 | A login handler holding the secrets | Upvoted the story in 6 iterations |
Every fix was code. None of them was a prompt.
#### What is harness engineering?
**Harness engineering is changing the system around the model, not the prompt, until you can trust what the agent does.** Every step above was harness engineering.
The habit has a name now. [Mitchell Hashimoto called it harness engineering on February 5, 2026](https://mitchellh.com/writing/my-ai-adoption-journey): "anytime you find an agent makes a mistake, you take the time to engineer a solution such that the agent never makes that mistake again." 6 days later, OpenAI [wrote about harness engineering with Codex](https://openai.com/index/harness-engineering/). LangChain's [anatomy of an agent harness](https://www.langchain.com/blog/the-anatomy-of-an-agent-harness) and Birgitta Böckeler's [harness engineering for coding agent users](https://martinfowler.com/articles/harness-engineering.html) both sum it up as agent = model + harness.
If you've been doing context engineering, deciding what goes into the window, you've been doing one part of this already. Harness engineering is the whole layer: context, plus tools, guardrails, the loop and verification.
It also matters beyond demos. At IBM we build [OpenRAG](https://github.com/langflow-ai/openrag), an open source retrieval platform that very large companies run against private, sensitive data like calls, PDFs and invoices. What makes it safe to point at that data isn't a cleverer model. It's the harness.
#### Where this goes next
2025 was the year of agents. 2026 is the year of harnesses.
My hope for 2027 is dynamic harnesses, generated on the fly. You ask an agent to buy you a flight, and before it touches anything it builds a harness for that specific task: it knows where it's likely to go wrong, it adds the checks, it does the job, and it comes back to you guardrailed. Like plan mode, but on steroids.
A lot of this is still open. How much verification is enough? Which checks belong in code and which can be handed to another model? I don't think anyone has settled those yet, me included.
I gave this as a talk at [AI Engineer Europe 2026](/talks/ai-engineer-europe-2026). You can watch me build the harness live:
Harnesses in AI: A Deep Dive, at AI Engineer Europe 2026. The full transcript is on this site.
If you want to build a harness like this around your own agents, with your team, [I run a workshop on exactly that](/workshops#ai-agents).
---
### Frontier Models Suck Sometimes (A Benchmark)
Published: 2026-07-08
URL: https://tej.as/blog/note-app-ai-benchmark-apple-intelligence-sucks
Apple Intelligence refused my voice note, so I benchmarked 11 AI models on it. A cheap one beat the frontier and my phone's Qwen made things up.
I've been building a small realtime note taking app. It's like one button: you tap it, you talk on your iPhone or from your wrist on the Apple Watch, and it hands your rambling thought back to you as text plus like a summary, some action items you buried, and some questions you left dangling. On-device speech-to-text, then "AI analysis," then explore.
That sentence is a promise about _AI_.
#### The "AI" that was counting words
I decided to start small: the first version’s "AI" was just a heuristic, algorithm-based solution (not generative). It counted words. The "topics" it proudly surfaced were, literally, just the most frequent tokens in your transcript. So it would inform you, with total confidence, that today’s themes were **"know"** and **"it's"**. I looked at it and was like _bruh this isn’t AI, it’s [`Array.prototype.sort`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)._
At this point I was like okay, maybe I don't need regex for this but like a real language model. But it had to be _on-device_ and private. It also needed to process loooooooooong conversations, like 2-hour podcast episodes and things. How can we process that when language models often come with smaller [context windows](https://en.wikipedia.org/wiki/Context_window)?
#### Hierarchical map-reduce
A language model can only look at so much text at once: a budget called its _context window_. Apple's on-device model tops out around 4,000 tokens (where a token is roughly 1 english word). Even a small Qwen model that could fit on an iPhone (I downloaded it) isn't much roomier: a 27-minute ramble is _many_ times that. So you run straight into a genuinely strange question: how do you summarize something that doesn't even fit inside the reader's head?
Picture summarizing a fat book when you can only hold a few pages in your mind at a time. You wouldn't try to swallow it whole, you'd read one chunk, jot the key points on an index card, and move on. Chunk, card. Chunk, card. Do that for the whole book and you've quietly turned one impossible task into a stack of very possible ones. In other words,
1. **Map**: slice the transcript into bite-sized pieces that _do_ fit and run the model on each piece on its own. Each pass pulls out just that slice's key points, action items and questions. (It's called "map" because you apply the same little function across every piece. This is the same concept as [`array.map()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map).)
2. **Reduce**: now gather all those index cards into a pile and write the final answer _from the cards_, not from the original book. Merge the duplicates, drop the overlap, fold it all into one clean set plus a title and a summary. ("Reduce" just means folding many things down into one. This is the same concept as [`array.reduce()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce).)
3. **Hierarchical**: when there are _so many_ chapters that even the pile of index cards won't fit on the table, group the cards, summarize each group onto a _new_ card, and do it again: summaries of summaries until the whole thing finally fits. Like folding a long letter in half, and in half again, until it's pocket-sized. A short note never needs that extra fold, a genuinely multi-hour recording does, and this is what keeps the whole thing from tipping over.
#### Apple Intelligence said no
The tasteful, on-brand move for a privacy-first notes app is Apple's [Foundation Models](https://developer.apple.com/documentation/foundationmodels). Real LLMs on the device without talking to the cloud that just work offline. Wow. I wired it in behind the analyzer, kept my chunked map-reduce pipeline, and fed it a real recording: a genuinely private, **27-minute** conversation with [my wife](https://de.linkedin.com/in/lea-artemov-839107239/) about random stuff. Half an hour of half-formed thoughts about moving countries, a birthday, the price of a Tesla in Berlin, the people at last week's meetings. The exact kind of sprawling human talk this app exists to make sense of.
Apple's model looked at it and returned:
> Detected content likely to be unsafe.
At this point, even though there was nothing unsafe in it, I turned the safety dial all the way down to Apple's most permissive setting ([`permissiveContentTransformations`](https://developer.apple.com/documentation/foundationmodels/systemlanguagemodel/guardrails/permissivecontenttransformations)) and it _still_ refused.
Apple Intelligence is such garbage. I just want to transcribe a voice note on device from a regular conversation and it refuses. Absolute trash.
A guardrail that fires on a private note about a birthday isn't a guardrail but instead some bullshit that ruins people's experience. I needed something better.
#### So I downloaded a brain
Pivot: open weights. [Qwen3-4B-Instruct-2507](https://huggingface.co/unsloth/Qwen3-4B-Instruct-2507-GGUF), Apache-2.0, quantized to a 4-bit [GGUF](https://huggingface.co/docs/hub/gguf). This weighs (pun intended) in at **~2.3 GB** and runs fully on-device through [llama.rn](https://github.com/mybigday/llama.rn). Same hierarchical map-reduce pipeline, but I just swapped the model using [react-native-ai](https://www.react-native-ai.dev/). It needs no cloud, key or guardrail. It analyzes whatever you record: it's yours and it never leaves. It works.
Getting 2.3 GB of model to actually _run_ on an iPhone was two good battles.
##### Battle one: memory
On the CPU it was so slow the app looked hung to the point where you start checking the debugger to see if you've deadlocked yourself. Move it to the GPU (`n_gpu_layers: 99`, full Metal offload) and it flies, but mapping ~2.5 GB into resident memory gets you instantly jetsammed on an 8 GB iPhone. The fix is a single entitlement, [`com.apple.developer.kernel.increased-memory-limit`](https://developer.apple.com/documentation/bundleresources/entitlements/com.apple.developer.kernel.increased-memory-limit). This btw is Apple quietly conceding that your phone can, in fact, hold other language models in addition to its own. 🤫
##### Battle two: the model thought itself to death
Qwen3 is a "thinking" model. Its chat template opens a `` block and reasons before answering. Delightful, except my token budget is finite and it spent the entire thing thinking and never got around to emitting the JSON. Literally like some people, _"all thinking no doing"_. Every note came back empty. The one-line fix was to turn off the thinking:
```ts
chat_template_kwargs: {
enable_thinking: false;
}
```
Then it started to work! However while the little 4B on my phone produced genuinely structured insight, private and free and offline, the data was really not usable: it _understood the conversation_, but produced pretty trashy summaries with even worse action items and questions. This was more noise than signal from my conversation. Eventually, I decided I need a bit more power: it's time to consider maybe possibly using cloud models.
#### The Benchmark
In 2026, is this the best we can do? Or am I shipping a cute compromise and calling it a feature? Locally, the ceiling unfortunately was the Qwen model I tried (for an iPhone 16 Pro Max): it had high scores in benchmarks and looked SOTA (State of the Art) for the iPhone level. This is of course did not include cloud models. In an effort to find the best of the best without the hardware constraint, I did a benchmark. Here's how I did it.
##### Methodology
**The data.** One input, held constant: the transcript of that same 27-minute voice note. Every model saw the identical text. I'm benchmarking the _analysis_, not the transcription, so the speech-to-text step is upstream and the same for everyone. Whatever imperfections the transcript had (and it had some, it's a real recording), everyone shared them.
**The candidates.** 11 models:
1. My on-device Qwen3-4B, plus 10 cloud models via [OpenRouter](https://openrouter.ai),
2. [Anthropic](https://anthropic.com/)'s [Claude Sonnet 5](https://www.anthropic.com/claude/sonnet)
3. Opus 4.8,
4. [OpenAI](https://openai.com/)'s GPT-5.5 Pro,
5. [Google](https://google.com/)'s Gemini 3.1 Pro,
6. [xAI](https://x.ai/)'s Grok 4.3,
7. [DeepSeek](https://deepseek.com/)'s V4 Pro,
8. Qwen3-Max-Thinking,
9. Kimi K2.6,
10. [z-ai](https://z-ai.com/)'s [GLM-4.7](https://huggingface.co/zai-org/GLM-4.7), and
11. GLM-5.2.
**The task.** Every model got the exact same prompt, asking for structured JSON so the outputs were directly comparable:
```
You analyze a spoken voice-note transcript into structured insights.
Return ONLY a JSON object with EXACTLY these keys:
{"title": string (<=8 words, no quotes/date), "summary": string (3-5 sentences),
"actionItems": string[], "questions": string[], "keyPoints": string[], "topics": string[]}
- keyPoints/actionItems/questions: quote the speaker's wording, high-signal only.
- topics: 1-3 word subject tags.
Use ONLY what is in the transcript. No text outside the JSON.
```
The on-device model can't hold the whole transcript at once (the context window problem from earlier), so it does the same job through the map-reduce, with two smaller prompts. The "map" prompt runs on every chunk:
```
You extract structured insights from ONE segment of a longer spoken voice note.
Use ONLY what is in this segment. Do not invent people, dates, or facts.
- keyPoints: the few most important ideas or decisions, each self-contained.
- actionItems: concrete tasks someone intends to do (imperative).
- questions: open or unresolved questions raised.
- topics: short 1-3 word subject tags.
Quote the speaker's actual wording for key phrases; do not paraphrase. Prefer fewer, higher-signal items.
```
and the "reduce" prompt folds the chunk cards into one title and summary:
```
Write a specific title (<= 8 words) and a 3-5 sentence executive summary for a
voice note, using ONLY the provided key points. Neutral and factual.
```
**The scoring.** I anonymized all 10 outputs (my phone was blind "Candidate A", nothing more) and scored them with a panel of three LLM judges, each given a different personality and each scoring blind on a six-axis rubric (summary accuracy, summary quality, action items, questions, key points, topics), zero to ten:
```
Judge 1: a ruthless magazine editor who despises filler, vague summaries, and padded lists.
Judge 2: an executive chief-of-staff who only values accurate, actionable takeaways and hates noise.
Judge 3: a faithfulness auditor who hunts hallucinations and any claim not grounded in the transcript.
```
Three lenses, blind, so nobody could reward a model for its logo. The final rank is the average of the three overall scores.
**The fine print, so you can rerun it.** Every call ran at temperature 0.2, one pass each, in July 2026, through OpenRouter, and every candidate was scored by the identical three-judge panel and rubric. Holding the judge configuration fixed across everything you compare is the one rule you cannot break if the numbers are going to mean anything (ref: [An Empirical Study of LLM-as-a-Judge](https://arxiv.org/pdf/2506.13639)). Prompts, models, and settings are all up above since reporting the exact model, prompt, and parameters is what separates a benchmark from a vibe (ref: [reproducibility is a cornerstone of the method](https://www.ncbi.nlm.nih.gov/books/NBK547531/)).
#### Results
Here's what shook out:
| Rank | Model | Overall | Latency |
| ---- | ----------------------- | -------- | --------- |
| 🥇 | **Kimi K2.6** | **7.23** | 16.9s |
| 🥈 | GPT-5.5 Pro | 7.07 | 361.2s 🥱 |
| 🥉 | **GLM-4.7** | 6.67 | **3.4s** |
| 4 | GLM-5.2 | 6.67 | 43.7s |
| 5 | [Claude Opus 4.8](https://www.anthropic.com/claude/opus) | 6.50 | 14.0s |
| 6 | DeepSeek V4 Pro | 6.50 | 27.2s |
| 7 | Gemini 3.1 Pro | 6.37 | 25.5s |
| 8 | Claude Sonnet 5 | 5.77 | 11.7s |
| 9 | Qwen3-Max-Thinking | 5.53 | 8.3s |
| 10 | Grok 4.3 | 5.37 | 13.3s |
| 11 | **Qwen3-4B (my phone)** | **5.10** | _local_ |
#### What I learned
A few things genuinely surprised me.
**A "cheap" model beat the whole frontier.** Kimi K2.6 took it, sweeping all three judges (editor 7, chief-of-staff 7, auditor 7.7). A clear +0.16 over GPT-5.5 Pro and +0.56 over the GLMs. It was the _only_ candidate that did the actual hard part of the job: twenty-seven minutes of two people rambling contains exactly one real to-do, buried in an aside _"I owe people slides and stuff."_ Kimi found precisely that, wrote it down, and invented nothing else. Everyone else either dumped raw quotes or padded the list with things that were never tasks. Kimi compressed, the rest re-transcribed.
**The frontier flagships were expensive and underwhelming.** GPT-5.5 Pro scored a strong second on the rubric (7.07) and then took **361 seconds** (~6 whole minutes) to do it For a one-button phone app where you tap and expect an answer, six minutes is literally a bug. This is, to me, unshippable. It also sits in the priciest tier while it makes you wait.
**My beloved Claude got lazy.** Opus 4.8 landed 5th and Sonnet 5 landed 8th. _Not from hallucinating btw_: both were honest and accurate. They lost because they quote-dumped instead of synthesizing. Sonnet's "questions" list was, verbatim, conversational filler like `"Are you recording now?"` and `"Did you have any problems today?"`. It also missed the one real action item entirely. The whole field basically tied on the _summary_: the entire ranking was decided by whether a model synthesized the structured fields or just regurgitated. Almost everyone regurgitated.
**Newer and bigger was not better.** More on that in a second.
**And my phone came dead last, unsurprisingly.** 5.10 to Kimi's 7.23. This is the best I can do with a 4B model on my phone.
#### The GLM-5.2 question: is the new flagship worth it?
This was the comparison I most wanted. The answer was refreshingly blunt: **no.**
GLM-5.2 is [z-ai](https://z-ai.com/)'s newest and largest 1M context window model, the flagship, the one you'd instinctively reach for over its cheaper sibling. On this task it tied GLM-4.7 _to the decimal_: 6.67 overall, with **identical** scores from all three judges (6.5 / 6.4 / 7.1). Same quality. For that tie it charged you ~**13x** the latency (43.7s vs 3.4s) and a higher price tier.
Worse, where it differed, it differed _down_ on exactly the fields that decide this benchmark. GLM-4.7 listed one action item: the real one, "I owe people slides." GLM-5.2 kept that and bolted on _"I think you just tell them I don't know what's happening"_... which is not a task, it's a fragment of the conversation. Its questions got mushier too, sliding back toward the same `"Are you recording now?"` filler the Claudes lost on. On the judges' numbers: action items dropped from 4.5/5/5.5 to 3.5/4/4, questions from 4/3.5/5.5 to 2.5/3.2/5. It bought a hair of summary polish and paid for it in the structured fields, where it mattered most.
**GLM-4.7 dominates GLM-5.2 for this use case: same quality, ~13x faster, cheaper, better action items.** The newer model wasn't an upgrade, it was a wash that regressed where it counted. That surprised me more than anything else in the run. It's a useful reminder that "flagship" is a marketing tier, not a benchmark result.
#### About that last place
Here's the part that really stings because the entire promise of this app is trust: my on-device model didn't just lose on sparseness, **it made shit up.** Twice.
Two of the three judges independently caught it inverting the core fact of the whole conversation. I was talking about how I live in Germany and would maybe consider moving to America. Specifically, I said _"I hate the system, but I love the land,"_ (about America), weighing a German passport as the safety net that finally makes the move possible because Germany's a great fallback (I have a [complicated healthcare situation](/blog/health-fitness-devrel-hemophilia)). My model confidently wrote it backwards, as if America is home and Germany is the destination! It flipped an extremely important fact of the recording!!
Then it invented a task out of thin air:
> Check if the recording of the app is available and accessible within 12 minutes.
There is no such thing. It stitched that "12-minute" to-do together from someone offhandedly mentioning that ground beef needs twelve minutes to cook. (Amusingly, Qwen3's much larger cloud sibling, Qwen3-Max-Thinking, flipped the _exact same_ geography. A family trait, apparently and a hint that the fabrication is baked into the lineage, not the quantization.)
**For a notes app, a hallucinated action item is worse than a missing one.** If my app puts a fake to-do on your list, you've lost the one thing a notes app is _for_.
And yet the 4B on my phone (5.10) out-scored two frontier _cloud_ models on the rubric: Grok 4.3 (5.37, only 0.27 ahead) and, on structure, held its own against Qwen3-Max-Thinking (5.53). A 4-billion-parameter model running on the GPU in my pocket, no network, no bill, landing within striking distance of models a thousand times its size. That is genuinely, unreasonably impressive. It's just not yet _trustworthy_.
#### What this benchmark can't tell you
I want to be straight about where this is a fun blog experiment and not a real paper. A good study is loud about its own limits (ref: [Ten Simple Rules for Writing Research Papers](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1003453)). Read the decimals as vibes, not physics.
- **n = 1.** This is one transcript, from one conversation, in one domain (me rambling with my wife). It shows how these models handled _this_ note, not yours. Not justifying your sample size is, ironically, the exact hole most LLM evaluations fall into (ref: [empirical study of LLM judges](https://arxiv.org/pdf/2506.13639)).
- **One run, no error bars.** Models sample and so do the judges, but I ran each exactly once. So I can't show you the variance. A rigorous version would run it many times and report the spread. Unforunately I didn't want to spend (waste?) a lot of money running it many times.
- **The judges are LLMs, not humans.** LLM-as-judge is genuinely useful, but it carries known biases, and high agreement between judges does not prove they are measuring the same thing a human would (ref: [reliability without validity](https://arxiv.org/pdf/2606.19544)). Three prompted personas blunt the logo bias, they do not turn the panel into ground truth. (I spoke about this recently at [AI Engineer World's Fair](https://ai.engineer/worldsfair/2026) in San Francisco).
- **Shared transcript, shared flaws.** The imperfect speech-to-text was identical for everyone, which is fair, but it means a slice of what I measured is "who copes best with messy transcription," not pure understanding.
None of this dents the headline (a cheap model synthesized where the frontier regurgitated, while the little on-device one confidently made things up). But if you want to _act_ on this, run it on your own recordings before you trust the ranking.
#### So, is the AI on my phone good enough?
Nope. Well, at least not yet. Not on its own, and certainly not for the trust of a user.
The bigger lesson, the one I didn't expect to write: **the frontier is not where the interesting movement is.** The best output in my test came from a model most people haven't heard of. The best value ran in 3.4 seconds for pennies. The most expensive, most-hyped flagships either timed themselves out of contention or quietly regressed against their own cheaper siblings. The gap from my phone to the frontier is about 2.1 points and it's closing fast enough that I'd bet the next 4B closes most of it.
#### So where the app actually lands (I flipped my own plan)
I was all set to ship on-device by default and treat the cloud as a scary little opt-in. Then the benchmark happened and embarrassed me out of that position. The 4B on my phone totally made shit up and flipped the geography of my own life, inventing a to-do out of ground beef in the process. The trustworthy output, the one that found the single real action item and invented nothing, came from a cloud model. The trustworthy answer was in the cloud. So I flipped it. **Cloud is the default now. On-device is the offline fallback.**
That said, I refuse to hand some random inference vendor a transcript of me and my wife talking about moving countries, my [healthcare](/blog/health-fitness-devrel-hemophilia), and our friends with my name stapled to the top. So everything from here down is how exactly I plan to get the same/similar benefits of on-device processing but in the cloud.
The plan is **cloud by default, but built so the vendor learns as little about you as I can manage.** Some text has to reach the model to get analyzed though. There's really no way around that. It's the same reason Apple can't end-to-end-encrypt iCloud Mail: somebody, somewhere, has to read the cleartext (ref: [Advanced Data Protection](https://support.apple.com/guide/security/advanced-data-protection-for-icloud-sec973254c5f/web)). So we can't do "send nothing", but we can shrink what the model sees down to almost nothing, making it really hard to tell that nothing is _you_. Here are three ways I plan to pull that off:
##### 1. Misdirection, so the vendor can never guess who you are
A vendor can tie a request back to a real human through four _independent_ channels:
1. your network identity (the source IP),
2. your account (a login or API key),
3. your payment trail, and
4. the PII (personally identifiable information) sitting inside the transcript itself.
They're four separate locks so you need a separate key for each. The whole design principle is that no single party in the pipeline ever holds two channels it can link together (ref: [Cloudflare](https://blog.cloudflare.com/stronger-than-a-promise-proving-oblivious-http-privacy-properties/)). Defense in depth: break one lock and you've still got nothing.
The good news is those four locks aren't equally hard. The scariest one for a notes app, the PII sitting right there in the transcript text, also happens to be the cheapest to kill. So that's the one I'm building first. The IP and the account channels need a lot more machinery, so they come later.
- **Hide the IP with OHTTP (Oblivious HTTP).** [OHTTP (RFC 9458)](https://www.rfc-editor.org/rfc/rfc9458.html) splits a request across two parties that are not allowed to collude. The client encrypts the request with `HPKE` and posts the ciphertext to a _relay_, which blindly forwards it to a _gateway_, which decrypts it and calls the model. The relay sees your IP but only ciphertext; the gateway "does not learn the Client's IP address or any other identifying information" and only ever sees the relay's IP (ref: [RFC 9458](https://www.rfc-editor.org/rfc/rfc9458.html)).
One party knows _who_ and the other knows _what_. It stays that way "unless the relay and gateway collude" (ref: [Cloudflare](https://blog.cloudflare.com/stronger-than-a-promise-proving-oblivious-http-privacy-properties/)), which is why they have to be run by different companies. This is exactly how Apple's [Private Cloud Compute](https://security.apple.com/blog/private-cloud-compute/) routes requests "through an OHTTP relay, operated by a third party, which hides the device's source IP address before the request ever reaches" the model. The plan is to run my own gateway behind a third-party relay, so the relay sees a phone talking gibberish and the gateway sees text arriving from some other server.
The catch is that the whole trick only works if the relay and the gateway are run by _different companies_. If they're both me, or both one big [CDN](https://developer.mozilla.org/en-US/docs/Glossary/CDN), then the unlinkability is just theatre. So the real work here isn't code, it's finding a relay operator who isn't also my gateway host and keeping that relationship alive. This is probably the heaviest lift on the list.
- **Decouple the account.** There's no per-user login with the vendor. The model's API key lives only on my gateway. So every request goes out under the _same_ shared credential. From the vendor's side, all my users blur into one caller. Who is that? No idea. Could be anyone. The gap right now is that the credential is a single shared secret baked into the app, so the next step is minting a short-lived per-device token on the server, so one leaked secret can't impersonate everybody at once. Apple does the fancy version with single-use blind-signature credentials that "authorize valid requests without tying them to a specific user" (ref: [Private Cloud Compute](https://security.apple.com/blog/private-cloud-compute/)). I'd like to copy that.
- **Scrub the PII _before_ it ever leaves the phone.** Kinda table stakes and the biggest bang for buck: remove all the personally identifiable information before it leaves the device. Like, think about what's actually in a transcript: names, employers, phone numbers, all of it. But iOS already ships on-device named-entity recognition in the [Natural Language framework](https://developer.apple.com/documentation/naturallanguage). You can infer people, places, organizations, fully offline. I can reach it from [React Native](https://reactnative.dev/) with a small native module. It needs no model download and no network call. On top of that I use the [Microsoft Presidio](https://github.com/microsoft/presidio) reversible-pseudonymization trick: "Peter" becomes `` every single time. The model only ever sees the placeholders. The map from `` back to "Peter" never leaves the device, so only _your_ phone can turn the answer back into real names. It still protects you if every other layer fails. A totally compromised vendor sitting on raw plaintext just sees ` owes some slides` and has no clue who that is. Now, is it perfect? Nope. On-device recognition will miss a name here and there, or misread a weird one. So I keep it conservative and keep the map on the phone. It's one layer of defense, not a magic eraser. (If the built-in recognizer isn't good enough, tiny redactor models like [OpenAI's open-weight Privacy Filter](https://openai.com/index/introducing-openai-privacy-filter/) are a later upgrade).
- **Cover the boring channels too.** These are mostly cheap and mostly soon. Batching and padding requests on a slightly random schedule and stripping identifying headers are app-level stuff I can do alongside the gateway work anyway (OHTTP leaves timing and size correlation out of scope, so mild batching is the sensible patch). [Encrypted Client Hello](https://blog.cloudflare.com/announcing-encrypted-client-hello/) is a CDN toggle, not app code. A boring, standard [TLS](https://developer.mozilla.org/en-US/docs/Glossary/TLS) fingerprint I get for free just by using the phone's normal networking stack, so I blend into the crowd.
##### 2. Encrypt everything the app stores
Everything the app _stores_ (audio, transcript, the insights, even the titles and timestamps) should get encrypted on the device before it ever touches disk, so my own backend only ever holds ciphertext. The interesting question is where the key comes from.
To begin, I make a random 256-bit key per note, seal each payload with `XChaCha20-Poly1305` (there are solid, maintained crypto libraries for React Native, or I lean on SQLCipher down at the database layer), and wrap the master key with a [Secure Enclave](https://developer.apple.com/documentation/security/protecting-keys-with-the-secure-enclave) key that never leaves the chip and unlocks with Face ID. That alone gets me encrypted-at-rest, hardware-backed, on this device. It also sits on a data model that [Proton](https://proton.me/blog/proton-pass-security-model) and [Standard Notes](https://standardnotes.com/help/security/encryption) have already battle-tested: one random key _per note_, each wrapped by the master key. I encrypt the metadata too (titles, tags, timestamps), because Signal's whole [sealed sender](https://signal.org/blog/sealed-sender/) lesson is that locking the letter but printing the address on the outside is only half a job.
Eventually we can go **multi-device.** The [WebAuthn PRF extension](https://www.corbado.com/blog/passkeys-prf-webauthn) lets a passkey cough up a deterministic 32 bytes of secret from a Face ID gesture, which I run through `HKDF` into a key. The neat part is that a passkey synced through iCloud Keychain carries that secret to every device you own, so the same key just shows up on your iPad and MacBook and your notes decrypt themselves. There's no key server and nobody (me included) in the middle. I love it. It's also the newest, least-trodden path on this whole list, so it waits until the basic version is rock solid. Since a passkey that fails to sync would take your notes down with it, I'd like to ship it with a printable recovery key so losing every device isn't the same as losing your notes. The end state is basically [Apple's Advanced Data Protection](https://support.apple.com/en-us/102651): keys live only on your trusted devices, recovery is a code _you_ hold, and the provider (me) simply can't read your stuff (ref: [ADP](https://support.apple.com/guide/security/advanced-data-protection-for-icloud-sec973254c5f/web)).
##### 3. Don't just trust the vendor, verify it can't read you
My winning model, Kimi K2.6, is _open-weight_. In 2026, open-weight models can run inside a GPU confidential-computing enclave that you can actually verify. [Phala](https://phala.com/confidential-ai-models) lists Kimi K2.6 on [Intel TDX](https://en.wikipedia.org/wiki/Trust_Domain_Extensions) plus NVIDIA H100, behind an OpenAI-compatible endpoint. The model runs in hardware-encrypted memory that's sealed even from the machine's own operator. The enclave hands back a signed attestation quote proving exactly which code and which weights are about to touch your transcript (ref: [NEAR AI](https://docs.near.ai/cloud/private-inference/), [Tinfoil](https://tinfoil.sh/technology)). TLS terminates _inside_ the box, not at some load balancer that could peek. The old complaint about all this was speed. That's basically gone now: overhead is down around [95 to 99% of native](https://www.spheron.network/blog/confidential-gpu-computing-nvidia-tee-encrypted-vram/).
This is probably gonna be a longer effort, but initially for the MVP I plan to start with [OpenRouter's one-click Zero Data Retention](https://openrouter.ai/docs/features/privacy-and-logging), routed only to endpoints that don't store or train on your data, prompt logging off. It's a config flag and really more of a _promise_ than a proof, but it's a decent start imo. The provider still sees plaintext while it's working. You're trusting them to keep the contract. But it can ship today. Paired with the on-device PII scrubbing from move #1, what they see is already ` owes slides`.
The latter part, the actual enclave, leans on stuff I don't control. First, it only exists if a vendor is genuinely hosting the model I want, in a [TEE](https://en.wikipedia.org/wiki/Trusted_execution_environment), at a price and speed I can live with. Second, parsing one of those attestation quotes _on the phone_ is a real project, so the sane version verifies the quote on my gateway (which I run and already trust) instead of asking a React Native app to do enclave forensics. Change the base URL, check the quote there, and you've turned "trust the vendor's word" into "verify it". And per my own rule that the user should always see what the system's doing, the app already tells you which engine ran each note: cloud Kimi, on-device Qwen, or the offline heuristic. The goal is to grow that little banner into a "verified enclave" badge once the attestation is wired up for real.
##### Where the trust boundary actually sits
So the PII column and the shared-account column are the near-term wins. The IP column is still waiting on that relay. There's exactly one unavoidable moment where plaintext has to exist off your phone: the instant the model reads the already-redacted transcript to analyze it. No amount of crypto (the cryptography kind, not the web3 scam kind) makes that go away. But look at how little of "you" is left by the time that text shows up:
| Party in the pipeline | Your IP? | Readable content? | Your account / payment? | Your name / PII? |
| --------------------- | ----------------- | ----------------------------------------------- | ------------------------- | ---------------------- |
| OHTTP relay | Yes | No (ciphertext) | No | No |
| My gateway | No (relay's IP) | Yes, but de-PII'd | Shared key only | No |
| The model vendor | No (gateway's IP) | In an enclave, no; on [ZDR](https://openrouter.ai/docs/features/zdr), yes but not retained | Login-less, crypto-funded | No (it's ``) |
No single row holds two channels it can link. Subpoena the relay and you get an IP attached to gibberish. Breach the vendor and you get ` owes slides`, unstored, with no IP and no name. Pull the payment trail and you get a prepaid top-up attached to no usage. Some risks that still remain are that the relay and gateway could collude (so they're run by different orgs), timing and size correlation survives content encryption (so, batching and padding), and my on-device scrubber could miss a name (so I keep it conservative and keep the reversible map on-device). None of those give anyone the full picture.
So yeah, that's the plan. Maybe a bit overengineered for a passive AI notetaker for myself but I love the craft so who cares? If you've shipped a small model into a real product, watched one confidently invent your homework out of ground beef, or built the misdirection stack above and can tell me where I'm wrong, please let me know on [𝕏](https://x.com/tejaskumar_).
---
### Biggest Lessons of 2024: Honor, Trauma, and People
Published: 2024-12-28
URL: https://tej.as/blog/biggest-lessons-2024-honor-people-fear-failure
Dissecting honor, what it takes to overcome trauma, how to heal from the fear of failure and prioritize relationships.
It seems like just yesterday that we lit fireworks and popped champagne in our Berlin home surrounded by friends and family yet here we are one entire year later. 2024 was my best year yet. Let's unpack the top lessons I learned this year.
Before we begin, I think it's worth emphasizing that learning is a consistent process and the best leaders tend to be the best learners, as indicated by this [2024 Harvard Business study](https://www.harvardbusiness.org/leadership-learning-insights/2024-global-leadership-development-study/). Every moment presents an opportunity to learn and when we invest the time to reflect and consider the lessons each season brings, it often tends to be among the highest yielding investments one can make. **If we're not learning, we're not living.** With that, let's get into it.
#### Lesson 1: Honor All
At the beginning of the year on January 7th, I heard my friend [Dave](https://www.instagram.com/daveschnitter/) say something so profound. He decided he wanted to start the year talking about and carefully considering _love_ and what it means to truly love ourselves and those around us. In his exploration of the topic, he mentioned _"Love doesn't dishonor others"_ and then went on to explain it by example:
- When you're kind to people but then gossip about them in their absence, even just to yourself, you dishonor them.
- When you look at a person who believes differently than you and consider them ignorant without even talking to them, you dishonor them. I've seen folks complain about _"those people who still wear masks! The pandemic is over! Come on!"_ I've heard people talk about their hatred of _"blue haired people"_. I've watched people wish that [the shooter didn't miss](https://x.com/DramaAlert/status/1812943426947850278). All of this is dishonoring others and ultimately not loving.
- When you're contractually obligated to work ~40 hours a week and you do more or less, [you dishonor your teammates](). Working overtime and being a 10x engineer sets unrealistic expectations and dishonors the good work your teammates are doing. Underworking raises the workload on others and also dishonors them.
Dave clearly illustrated how we tend to dishonor others and revealed to me my own flavor of dishonoring others which I wasn't even aware of. He then flipped the script and asked what honor might look like given that we now understand _dishonor_. Like magic, I immediately became aware of a few things:
1. **Honoring others is a _verb_:** we often talk about honor as a _value_ when we say "he has honor", "she is honorable", etc. and while it can be a value, it's also a _verb_. It's something we do. It is a _deliberate choice_ to honor others. We can _do it_.
2. **Honoring others is a _process_:** I tend to believe most if not everything is a _process_ and not an _event_. Things don't happen, but are constantly happening. We don't just breathe, we are breathing. Our cells don't divide, they are dividing. Things are processes, not events. If this is true, then honoring others is a _process_ and not an _event_: I'm not going to honor you once, but it's a process and a lifestyle composed of multiple deliberate and intentional choices over a lifetime.
3. **Honoring others is _context-dependent_:** my best friend [JB](https://twitter.com/jithinbas) and I grew up together. We met at age 5 and today, we live in the same city and meet each other somewhat regularly. Honoring him in the context of our friendship means we make dumb teenager jokes about each other's moms and talk nonsense. Funnily enough our moms are never _actually_ dishonored because we both mutually understand there is no disrespect intended, just young (now, slightly older) fools being fools. This is the context we grew up in and being _"familiar"_ in our shared historical context honors it and each other because we _"speak the same language"_.
I sometimes go to the gym with other friends. In the locker room, honoring them might mean I whip their ass with a towel (or they whip mine) and we talk shit and laugh. I work at [DataStax](https://www.datastax.com/blog/introducing-tejas-kumar-developer-relations-engineer) with a delightful team. Honoring them means I communicate clearly, have ideas, unblock and support where I can, and ship code and content at the highest quality I can. Honor is context-dependent and not one size fits all. Honoring context has shown very positive outcomes towards building unity, camaraderie, and togetherness.
A few weeks ago, [Christopher Ehrlich](https://x.com/ccccjjjjeeee), [Will Klein](https://x.com/willklein_) and I walked around Berlin talking about random topics, laughing, and sightseeing honoring the context we found ourselves in and it was a truly unforgettable experience. When we stopped by the [Berlin memorial to the murdered Jews of World War II](https://www.visitberlin.de/en/memorial-murdered-jews-europe), we honored that context with silence and reverence too.
Learning to flexibly honor as many people and contexts as I can as consistently as I can has been extremely fulfilling and has **severely** improved my quality of life. This is by far the biggest lesson I've learned this year, and honoring people and contexts the most significant skill I've cultivated with marvelous help.
##### How to Honor others
I can say with full confidence that this has positively impacted every part of my life and those around me: I am a much better friend, coworker, and family member as reported by people in those groups relative to me. I am also kinder to myself, honoring my mind, body, and spirit as often as I can by being mindful of what I consume and what I produce. If you'd like to try and cultivate this skill in 2025, the main driver that worked for me was **intentionality:** I firmly placed showing honor to others at the top of my mind since January 7th. I made a point to honor others (and contexts) as often as I could. What does this mean practically? When I communicate, **I communicate with a _person_, not an _avatar_**. [I don't respond to pull requests with "LGTM".](https://x.com/tejask/status/1747176544433230198) I don't half-ass greetings and send low-effort interactions like _"gm"_.
Prompted by my intention to show honor, I've spent most of the year _actually communicating with intent_ no matter the medium: sentences, not words, often padded with greetings and salutations to indicate that the person on the other side matters to me. After almost an entire year doing this, I've noticed that we're losing the humanity around communication in our culture today: when I intentionally honor people in communication, they end up being pleasantly surprised (that I care about them) and remark how refreshing it is. Being mindful of the actual human being I'm interacting with, and the context in which I'm interacting with them, has definitely set apart these interactions and made them orders of magnitude more impactful and meaningful to the point where people legitimately thank me and tell me they feel like "this was so special" when all I did was care. This slightly bothers me because this should not be an exception but instead be the rule.
What that means for me:
1. As much as I can, stop and make time to honor people.
Instead of responding to a PR with “LGTM” or an email with “k thx”, I try to actually take time to show the person that they matter and we’re thankful for them.
I hate to seem like an angry old man shaking my fist at the world, but it legitimately seems like most of us are severely broke when it comes to paying attention. When I deliberately made the choice to be intentional with showing honor to people, everything else fell into place. This is also backed by research from Gollwitzer and Brandstatter in this [1997 paper](https://kops.uni-konstanz.de/server/api/core/bitstreams/14cc2a36-5f01-4dc1-b9ca-f2d0ca0c8930/content) that shows that literally just setting an intention makes the goal more attainable.
##### When Honor is too Hard
Of course, sometimes we encounter people and/or contexts that seem impossible: people with whom we fundamentally disagree on many deep levels. How might we honor them? I found myself working with such a client while trying to intentionally honor others. Most interactions required extraordinary amounts of effort to process and then respond honorably. There was constant second guessing and making sure I was treating them with honor. There was a lot of _"am I the asshole?"_. The floor was eggshells. Can you relate? Perhaps there are people who have wronged you, cheated you, or betrayed you. If not, perhaps there are those who only communicate indirectly and you never truly know where you stand. The thought of honoring them might seem absolutely ridiculous to you and it very well might be.
In my particular situation, I found that the best course of action was to leave. To honor them was to say "we don't see eye to eye, and I cannot sustainably continue in this relationship [because it's far too taxing to do so honorably]" and suggest going our separate ways. Ironically, this was the one thing both sides agreed to in a long while and we honorably parted ways. Ultimately, it is my belief that [we're really just bags of chemicals walking around and when we meet other chemicals, there's a reaction: sometimes positive, sometimes negative](/blog/how-to-grow-professional-relationships-tjs-model#:~:text=Ultimately%2C%20human%20beings%20are%20more%20or%20less%20big%20bundles%20of%20chemicals%20with%20legs.). This is no one's fault, so we do the best we can and sometimes we have to leave. Months later, we still talk once in a while and maintain a mutual respect for each other while having no intention of working together again. This brings up an important distinction.
##### Honor vs. Respect
I've spent months thinking about this: aren't honor and respect the same thing? Two sides of the same coin? While I still don't know, I think they aren't. If we consider them as verbs, _honor_ is as described above but respect as a verb seems different? To respect someone to me seems to be to acknowledge their value and worth, which can also be done without interaction and from a distance. To honor them is to _do something_ to/for them that demonstrates this respect _and more_. Honor seems like respect++. This likely deserves more thought and maybe a discussion ([let me know what you think on 𝕏](https://x.com/intent/post?text=I%20don't%20know%20about%20that%20one%2C%20%40tejaskumar_!%20I%20think%20respect%2Fhonor%20is%3A%20)), but I'm comfortable with this distinction: honor is active, respect is passive.
#### Lesson 2: You Can Just Do Things
I've been building on the web for over 20 years at places like [Spotify](https://www.spotify.com/us/), [Xata](https://xata.io/), [Vercel](https://vercel.com/), and more. Over this time, I've come to believe that my technical skills are at a place where I can build whatever I want whenever I want. I am extremely comfortable with all parts of the software stack:
- for user interface (UI) work, I'm intimately familiar with JavaScript/TypeScript and popular UI frameworks
- for web API work, I'm more than comfortable with Node.js and Rust
- for database work, I've worked at Xata and deeply understand relational and non-relational models and when to use what
- for reliability, part of my role at Spotify was deploying a [tier 1 service](https://support.atlassian.com/jira-service-management-cloud/docs/what-are-service-tiers/) with regional failover and redundancy
- to deploy and scale it all with devops, I'm confident in my abilities with Docker and today operate my own self-provisioned bare-metal Kubernetes cluster on [Hetzner](https://www.hetzner.com/) with all the controllers, [TLS](https://developer.mozilla.org/en-US/docs/Glossary/TLS) termination and more with a fair amount of ease
I am not trying to flex, but the truth is that none of this is particularly challenging to me. Still, I haven't really built or shipped anything outside of a job despite being able to do so. I've done quite a bit of yapping about building things sporadically, but when it came time to put finger to key I often backed away. Why? My go-to answer/excuse was "it's so easy it's boring". While that's true, it wasn't the full story.
##### Fear of Failure
Do you know people like this? People who, all they do is yap but don't actually do the thing? I know quite a few and I myself could be one if I'm not careful (if I don't _intentionally_ avoid it). In fact, until this year, I was one! In a deep-dive discussion about this with [my wife](https://de.linkedin.com/in/lea-artemov-839107239?trk=public_profile_browsemap), she mentioned a Reddit thread where folks sounded similar: they wanted to be farmers but kept coming up with excuses and reasons not to.
Ultimately, people in the comments called them out on it and mentioned that no matter how much their excuses get refuted, they still find a way to come up with another one because **to them, the anticipated/predicted pain of going through with it and failing is greater than the pain of doing nothing**. While it makes sense that we want to avoid pain, I think we have enough [data](https://www.anderson.ucla.edu/faculty/keith.chen/negot.%20papers/GilovichMedvec_Regret95.pdf) to know that this is just categorically false: the pain of not trying (regret) is far worse over time than trying and failing. This insight around the fear of failure was incredible because it very clearly described my own behavior. To fully understand this, we need to dig a little deeper into my past.
##### The Pain of Failure
One of first ever websites that I made was published in a magazine when I was 11 years old. 3 years later, I used to heavily enjoy online discussion forums about various topics: games, software, etc. I particularly remember enjoying making cool signature art. Inspired by how useful software forum solutions like [vBulletin](https://www.vbulletin.com/), [phpBB](https://www.phpbb.com/), and [MyBB](https://mybb.com/) were, and the advent of Web 2.0 and interactive in-place editing with [AJAX](https://www.computerweekly.com/de/definition/Asynchronous-JavaScript-and-XML-AJAX), I set out to build my own forum software reimagined for Web 2.0 with AJAX as a first-class citizen: sort of like [SPAs](https://en.wikipedia.org/wiki/Single-page_application) but for forum software before even [jQuery](https://jquery.com/). So, I built it (with [Scriptaculous](http://script.aculo.us/) and [MooTools](https://mootools.net/) if you're interested).
While building it (as good as a 14 year old could), I fell in love with it. The more code I wrote, the more I enjoyed the process. The more I saw it come to life, the more hyped I got. I eventually made this hype contagious and shared it [widely on the internet](https://www.theadminzone.com/threads/new-forum-software-on-the-block-radiantboard-coming-soon.37372/). I created a countdown timer and had hundreds of people (literally around 300 at peak time) watching it tick down to the launch.
On it went,
00:03
00:02
00:01...boom. It crashed. [The server literally crashed.](https://www.theadminzone.com/threads/new-forum-software-on-the-block-radiantboard-coming-soon.37372/post-266588) No Kubernetes, no replacement replicas, no failover, just a straight up [`HTTP 503`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/503) followed by ultimate rejection to resolve DNS and eventually, rejection from the community. I failed. And it hurt. A lot. It was a real [gut punch](https://youtu.be/knBU0nXsxf4?si=lW8HroTLKpRDUzjr&t=3808). You'd think I'd have been used to pain [given my childhood](https://www.youtube.com/live/B8e1r2L7iq8?si=rXISl_m5cYKKIu_-&t=3052) but this was different because it wasn't physical pain, it was _social pain_; compounded by the crumbling of my self-image: I thought I was good at this. Literally everyone around me said I was. _The magazines_ said I was! Am I really nothing? Is what I made actually useless?
Fast forward 17 years and while there's little doubt that my skills and competencies have grown, the wound is still there. I've been afraid to fail ever since. And so sure, I could build anything I want, but ultimately I've just built a long list of excuses.
##### Overcoming Trauma; Toward Healing
[Dr. Paul Conti](https://drpaulconti.com/), trained at [Stanford University](https://en.wikipedia.org/wiki/Stanford_University) and having served on the faculty of [Harvard Medical School](https://en.wikipedia.org/wiki/Harvard_Medical_School) before opening his own clinic, defines trauma as a loss of control: you're not in the driver's seat, your agency is robbed from you and you're controlled by external forces.
This was me.
The solution then is to take back agency, but how might one reclaim their agency unless they know it's been taken from them? We often live in cages that we don't see. My wife, this Reddit thread, the yappers, all joined together to show me my own cage and once I saw it, it immediately lost its power; exactly as described by the great psychologist [Dr. Carl Jung](https://en.wikipedia.org/wiki/Carl_Jung), who emphasized that evil's power operates primarily through our psychological blind spots. When we become conscious of the darkness within ourselves, we gain the ability to transform it.
I can say that in 2024, this prevalent trauma for the last 17 years has finally healed through:
1. Becoming aware of my cage
2. Recognizing that the cage is a lie: significant growth has happened since
3. _Intentionally_ making the effort to break it down
I wonder if this is relatable at all and if you've got your own cage. Maybe one you don't see? [Let me know on 𝕏](https://x.com/intent/post?text=OMG%20I%20just%20discovered%20my%20cage%2C%20%40tejaskumar_!%20%5B...%5D). In any case, now that the cage is broken and I'm free to build whatever I want, I've thoroughly enjoyed building so many things that bring me joy happily, including:
- the [blog portion of this website](/blog)
- I've written some [wonderful](/blog/how-to-grow-professional-relationships-tjs-model) [articles](/blog/coding-nights-weekends-good-work-life-balance) that I enjoy recently
- I made a [game: an AI-first multiplayer movie quiz called UnReel](https://www.datastax.com/blog/building-unreel-ai-movie-quiz)
- I've been working nights and weekends outside of normal operational employment hours on a [marketing SaaS product](https://topfu.co) that I'll likely launch in 2025 _if_ I can safely do so considering legal matters and [Intellectual Property](https://en.wikipedia.org/wiki/Intellectual_property) (IP) clauses with my employer. When we clear this, it'd be fun to launch it and see where it goes. I'm already talking to HR about it and I'm sure we'll figure something out. I've already shown this to [friends](https://x.com/jamesqquick) and family and folks are often blown away and excited to use it. It's definitely a good sign.
Of course this time, I probably won't build it in isolation and then overhype it but instead invite people I respect to give me feedback and slowly onboard the first 100 users, listening to feedback and iterating along the way before a bigger launch, learning from the [earlier RadiantBoard debacle](https://www.theadminzone.com/threads/new-forum-software-on-the-block-radiantboard-coming-soon.37372/). The very fact that I'm doing this at all is evidence of healed trauma and a lack of fear failure. 2025 will be a good year.
#### Lesson 3: People are the Thing
Last but finally not least is a lesson I knew, but one I continue learning anew: meaningless, meaningless; _everything under the sun is meaningless_. I spent some time in SF this year and, respectfully, the zeitgeist smells of bullshit: there were a non-trivial number of conversations about "agents" and related topics where each person had a different context and working definition than the next, a vastly different experience level than the next, but the hype and confidence levels were equal.
One person described an agent as a [custom GPT](https://openai.com/index/introducing-gpts/): it doesn't use tools, it doesn't model reasoning, it just has a knowledge base against which it can perform [RAG](https://youtu.be/uiZ6dwmVtYU?si=v0Xk1oJWYQba3GIm&t=813) which is, to this person, an agentic action. It smells like bullshit. Just like the [Rabbit R1](https://www.rabbit.tech/), the [Humane pin](https://humane.com/), [Apple Intelligence](https://www.makeuseof.com/why-i-find-apple-intelligence-underwhelming/), and so many cases of _overpromise and underdeliver_. I think the hype cycle is bullshit. I think tech bro posturing with esoteric language to appeal to VCs is bullshit. I think the grind is bullshit. There's just so much bullshit under the sun.
Let's reconsider from first principles. To quote the great [Carl Sagan](https://en.wikipedia.org/wiki/Carl_Sagan) about the [Pale Blue Dot](https://en.wikipedia.org/wiki/Pale_Blue_Dot), take a look at this picture for a few uninterrupted, quiet, reverent seconds:
Now, read his words:
> “Look again at that dot. That's here. That's home. That's us. On it everyone you love, everyone you know, everyone you ever heard of, every human being who ever was, lived out their lives. The aggregate of our joy and suffering, thousands of confident religions, ideologies, and economic doctrines, every hunter and forager, every hero and coward, every creator and destroyer of civilization, every king and peasant, every young couple in love, every mother and father, hopeful child, inventor and explorer, every teacher of morals, every corrupt politician, every "superstar," every "supreme leader," every saint and sinner in the history of our species lived there--on a mote of dust suspended in a sunbeam.”
Look at it again and think about that for a moment.
Now bring it back to the AI hype cycle and [tell me you have the same perspective as before](https://x.com/intent/post?text=Nah%20%40tejaskumar_%20you're%20wrong%2C%20everything%20matters%20a%20lot). I bet something changed. Don't get me wrong: AI is great, tech is great, ambition is wonderful, builders move the world forward. This is all well and good, but ultimately, we have to ask: [who are we doing it for? Is the dog wagging the tail or is the tail wagging the dog?](https://youtu.be/LL4mwJAt0i4?si=5ltTkr-i5kFyXsrt&t=1738)
My favorite study is [the Longevity Project](https://www.longevity-project.com/stanford-center-on-longevity) from Stanford University: a **groundbreaking eight-decade research study** that began in 1921 when [Stanford Professor Lewis Terman](https://en.wikipedia.org/wiki/Lewis_Terman) started tracking 1500 children to understand the factors that lead to a long and healthy life. 80 years later, the findings were that healthy relationships were the strongest predictor for longevity, and that their quality, not quantity, were the most weighted.
To reinforce this fact, they also discovered that children whose parents divorced during childhood generally had shorter lifespans. TL;DR? **People are the thing.** There's no real reason to participate in any Silicon Valley-style rat race and grind like a sigma giga Chad at the cost of human beings, relationships, and human flourishing. We do what we do for a purpose above the sun, because everything under the sun is meaningless.
There's a similar study from palliative care nurse [Bronnie Ware](https://bronnieware.com/blog/regrets-of-the-dying/) conducted between 2009 and 2012 who documented the most common regret among dying patients. The results?
- People regretted not staying in touch with friends
- Many had let valuable friendships slip away over years due to busy lifestyles
- By the final weeks, only love and relationships remained significant
- Men consistently regretted working too hard and missing their children's youth
- They lamented missing companionship with their partners
- Physical details and material concerns fell away (no one was talking about AI agents)
- Financial matters became secondary, mainly addressed for loved ones' benefit
- The only things that truly mattered in the end were love and relationships
Death is a humbling experience. It makes you question what you want out of your time here. I grew up constantly questioning this and I still do sometimes. All of what I do is almost always exclusively for people. Nothing else. People are the thing. Human beings are _it_. Life on planet Earth and whatever other planet we may move to is a gift, and we only get it for as long as we get it. What are we doing with it in 2025?
---
### It's Okay to Code on Nights and Weekends
Published: 2024-12-22
URL: https://tej.as/blog/coding-nights-weekends-good-work-life-balance
I love coding on nights and weekends because it's my favorite hobby. It only becomes a problem when it turns into a god or an expectation.
I’ve been wrestling with this for a long time (my entire life): I love coding and building software. A lot. I [started when I was 8 years old](https://www.youtube.com/live/B8e1r2L7iq8?si=CCTyvmnwlr3VKsav&start=3408). My nervous system developed wrapped around a computer.
A keynote presentation at THAT Conference about how I got into coding.
I hear a lot of _“have work/life balance”_ and _“touch grass”_ and while this is [actually sound](https://pmc.ncbi.nlm.nih.gov/articles/PMC10838459/), **coding is not work for me**: it brings me so much joy, meaning, and purpose that few other things even come close to and really only one other thing vastly exceeds.
I code on the weekends and at night because I derive a lot of joy from it. It’s my greatest hobby and I have the privilege of it also being a significant portion of [my job](https://www.datastax.com/blog/introducing-tejas-kumar-developer-relations-engineer). I see nothing wrong with that and definitely don’t expect others to be the same, but to me this is not “wrong”. It’s just a chill dude who loves his craft.
For years, I’ve tried to avoid my beloved hobby on the weekends because of self-doubt that others amplified: _“the weekend is for relaxing!! And family!!”_, but aren’t hobbies a wonderful creative relaxing escape? Not sure how others do it, but my closest family and friends enjoy their hobbies (baking, climbing, etc.) on the weekend, sometimes with others, sometimes alone to recover. Why should a hobby that happens to be a part of my job be different?
While trying to live by other folks’ rules and avoid coding on the weekends, I often found myself doing similar things: playing puzzle games, getting deeply invested in other logic-oriented tasks that also have a creative element... it was the same neural circuitry as coding but not _actually coding_. I really was just coding (in a sense) but fooling myself and others that this specific logical game that gets all my attention was somehow different.
My brain works the way it works and loves what it loves. There is no divorcing me from something so foundational that I started as a child.
And so finally, the best conclusion I can come to today is this: **doing what one loves and gives them purpose is never really a problem.** In fact, it’s a gift! There are so many people out there looking for that thing who haven’t yet found it and my heart genuinely goes out to them. I wish they are able to feel a fraction of the joy I feel in this wonderful hobby of mine as regularly as I feel it.
So… when does it become problematic?
#### It Becomes Problematic when it Becomes a god
I think this is a question of worship. We don’t talk a lot about that in highly intellectual and logical secular STEM, but if I look around, it’s quite clear to me that there’s a lot of worship around: where we devote ourselves to ideas, things, people, or ourselves; where one thing and our devotion to it eclipses other things including rest, relaxation, restoration, and relationships with family and friends.
This is the line that ought not be crossed: if I worship my hobby and offer myself up to it like a living sacrifice, me and everything and everyone around me crumbles. I place a weight on it (and myself) that neither party can bear. In plain language, _“too much of a good thing becomes a bad thing when it becomes a god thing”_.
This is validated in this [October 2024 research article from Nature](https://www.nature.com/articles/s41598-024-77226-8) that found that sports work among school students had a bell-shaped curve where there was a peak in cognition at about an hour of physical work per day, but a steep decline after 2 hours. We're likely all not school students doing sports, but the [law of conservation of energy](https://en.wikipedia.org/wiki/Conservation_of_energy) represented here stands: if we give most/all of ourselves to topic A (in this case sports), then other topics will suffer. There's no two ways about this. We cannot (yet?) negotiate with the laws of thermodynamics.
So, how do we prevent things from becoming gods? [Science](https://pmc.ncbi.nlm.nih.gov/articles/PMC2863117/) tells us that the best way is to maintain multiple sources of meaning and engagement rather than intense focus in any single domain for extended periods of time. This involves:
- Regular assessment for signs of imbalance like neglect of relationships or decreased life satisfaction
- Maintaining both individual pursuits and social connections
The key is cultivating what researchers call **"psychological richness"**: having variety in experiences and perspectives rather than intense focus on any single pursuit for _too long_: all our endeavors have an expiration time, or if you speak engineering, a [_TTL_](). In the case of the kids doing sports, it was about 2 hours. For us, we might spend all day, night, and weekend coding, but at some point we _will hit a wall_. I know I do.
When I hit a wall, instead of becoming frustrated at myself or my equipment, I've learned to recognize that this is time for some psychological richness: I'll message my friends and family and see how they're doing, which will usually result in sharing a meal together and enjoying them. After an interaction like this, I realize I've completely forgotten about the thing that was irritating me as I hit my wall. I then go back to it and fix whatever issue I had within 15 minutes and not a lot of effort. I bet this experience I'm sharing is not unique to me given that I hear it constantly from other software engineers. [Let me know if this is relatable at all on 𝕏](https://x.com/intent/post?text=The%20part%20about%20psychological%20richness%20from%20https://tej.as/blog/coding-nights-weekends-good-work-life-balance%20was%20totally%20relatable,%20@tejask!).
#### It Becomes Problematic when We Expect it of Others
What works for us may not work for everyone. I realize that not everyone started coding at age 8 and likely has other interests. Good for them! Some developers find fulfillment in completely disconnecting from code outside work hours, while others might prefer to blend their passion across their entire schedule. Neither approach is inherently superior; they simply reflect different personalities and life circumstances.
Pushing our own work patterns onto colleagues can create toxic environments where people feel pressured to match unrealistic expectations. This is especially problematic for:
- Junior developers still finding their path
- Parents and caregivers juggling multiple responsibilities
- Those who need clear boundaries between work and personal time
- People who find meaning and joy in other pursuits
This is also exactly why doing _work_ work outside of work is not ideal: you'll inadvertently and (hopefully) unintentionally make the rest of your team look bad, while simulatenously getting annoyed that the others aren't doing as much as you. You'll also likely get your head puffed up with _"wow, I'm so great! Look at all I'm accomplishing!"_ and become a real nuisance to most everyone around you. I've fallen into this pattern before when I worked at [G2i](https://g2i.co) and the outcome was not positive: most of the engineering org quit and mentioned it was because they couldn't work with me in their exit interview. Since then, [G2i's leadership team](https://x.com/gabe_g2i) have gotten me some [professional executive coaching](https://michaelterrell.com/) to grow and improve and I've been able to avoid this pattern ever since.
Instead of going down that path, if it's truly the craft of coding alone that we enjoy, then we recognize that there are other applications of the craft outside of the work domain, like that side project you started but never finished. Maybe actually do something with all of those domains you keep paying for.
One of the top reasons for all the things we hate in the world is [folks imposing their modus operandi on others](https://direct.mit.edu/ngtn/article/38/3/435/121229/Worldviews-in-Conflict-Negotiating-to-Bridge-the). Perhaps we'd all be better off if instead of _imposing_, we stick to _proposing_ ideas and letting our peers do whatever works for them and figure it out along the way. This too is backed by science, specifically this [research paper that examines over 50 years of findings on team effectiveness](https://journals.sagepub.com/doi/10.1111/j.1529-1006.2006.00030.x) and provides insights into how teams can be made more effective. Unsurprisingly, one of the main findings is that teams achieve greater effectiveness and stronger collective climate when team members collectively develop and agree upon frameworks, rather than having them imposed by individuals.
What does all this mean for us practically? **Just let people be.** If you like coding on nights and weekends, great. Do it. If others don't and it works for them, awesome. Good for them. There's no need for everyone to follow one specific way that works for one specific people group with some common attributes. In fact, there's beauty in the diversity.
#### It Becomes Problematic when Others Expect it of Us
I've been in situations where **when you repeatedly exceed expectations, then the expectations rise to where what was once considered exceeding them is now just meeting them.** When this happens, any average level of output due to any reason: fatigue, other priorities, new hobbies, is suddenly below average and this reflects poorly on your performance review despite you still performing on an average level at worst. As my coach [Carter](https://x.com/crtr0) says, _"the prize for winning the cake eating contest is more cake"_. Expectation management is extremely critical here.
If this goes wrong the outcomes can be drastic, resulting in:
- Implicit pressure to work nights and weekends
- Using enthusiastic developers as benchmarks for team productivity
- Celebrating unhealthy work patterns as badges of honor
- Conflating personal coding projects with work obligations
To prevent this, we must proactively manage expectations through clear communication and realistic goal-setting. This alone will be exceptional, because [expectations are rarely addressed proactively](https://www.ckju.net/en/blog/why-managing-expectations-essential-management-and-practical-ways-how-do/112977), not even by most leaders which threatens organizational performance. **Good leaders proactively manage expectations and make them explicit. Poor ones do not.**
This idea is further reinforced and validated by this [2024 research study from the Norwegian University of Science and Technology (NTNU) titled "The Role of Expectation Management in Value Creation"](https://www.mdpi.com/2076-3387/14/5/95) which proves that misaligned expectations significantly undermine job performance, organizational commitment, and job satisfaction. The paper itself talks about how municipal managers have to improvize under strong economic pressure that forces them to rethink value creation when providing housing services with significantly less money than ideal. What they found was that the keys to creating value (read: delivering their housing services) heavily depended on:
1. Managing expectations effectively
2. Building long-term relationships with their "customers"
3. Balancing planned vs. urgent matters
While I bet most of us here aren't municipal managers helping residents with housing, there's a high probability that the work we do everyday is _value creation work_ all the same and so, these principles apply. When we are able to clearly maintain appropriate expectations that the coding we do during nights, weekends, and off hours is _hobby work_ and done _just because we love it_ and we may stop when we want and start when we want and follow the whims and ways of our desire, then we're likely to be in a healthier space where we retain the agency to do with our time that which we wish and don't slowly become slaves to the expectations of others.
#### A Way Forward
With all that said, here's a protocol that works exceedingly well for me:
1. Accept that I just deeply love my work, the work that [found me as a child](https://youtu.be/zOKCrgQOiME?si=Zsir46HhjRpNL0QU&t=744), and the work that I’ll probably die loving.
2. Recognize that this doesn't affect "work/life balance" because this is a deeply rooted part of my life with or without "work" (a job).
3. Set my heart and mind on the right priorities: human beings, friends, family, and relationships are imbued with something so inherently and intrinsically beautiful and divine that sets them/us so far apart from any hobby that could ever exist. I intend to never lose sight of this.
4. Maintain awareness of seasons and cycles. There will be times when coding feels energizing and times when I need space from it. I try to listen to those rhythms rather than forcing myself to either code or not code based on external rules. Most external rules are made up and don't matter anyway.
5. Pay strong attention to warning signs: decreased ability to psychologically detach from work, reduced sleep quality, elevated stress levels, declining social connections, and adjust where needed.
At this point in time, at 31 years of age, going through all that I have gone through and [suffering all I’ve endured](https://www.youtube.com/live/B8e1r2L7iq8?si=CCTyvmnwlr3VKsav&t=2686), this seems like the ideal, optimal, and most fruitful path for me. What do you think? [Let me know know on 𝕏](https://x.com/intent/post?text=Here's%20what%20I%20think%20about%20https%3A%2F%2Ftej.as%2Fblog%2Fcoding-nights-weekends-good-work-life-balance%2C%20%40tejaskumar_%3A%20).
---
### How to Grow Professional Relationships
Published: 2024-11-28
URL: https://tej.as/blog/how-to-grow-professional-relationships-tjs-model
My TJS model maps professional relationships across seven states, from zero-sum competition to toxic enmeshment, and why collaboration is the peak.
Over my career, I've had the opportunity to get to know some of the world's [most](https://x.com/tejask/status/1862048032973324369) [incredible](https://x.com/DavidKPiano) [builders](https://x.com/swyx). This same career has also seen quite a significant amount of gatekeeping: various `(m|b)`illionaire boys clubs and cliques have made it quite clear that they'd prefer to keep their world small and exclusive, and that there's no room at their table. To each their own, but this dynamic has led to some thinking and reflection around the nature of professional relationships, friendships, and identity, ultimately resulting in what I'm calling **TJS (The Journey to Synergy)** Collaboration Model.
This spectrum is how I measure professional relationships and where I stand in those relationships. It outlines seven states moving from a competitive, zero-sum mindset to one of shared identity (which is equally problematic).
Let's briefly understand each state. One way we can make this information really practical is to understand it in context. A great illustrative context for this is [my podcast](/podcast), because it requires regularly interacting with people that inevitably reveals where we land on this spectrum.
#### States of the TJS Collaboration Model
The TJS collaboration model is made up of the following seven distinct states.
1. **Everything is a competition**: in this initial state, interactions are characterized by **gatekeeping and a zero-sum mentality**: the idea that _for one party to eat, the other must starve_. People are not willing to share information, resources, or opportunities. There's usually discrimination and exclusionary behavior here, either from racism, sexism, xenophobia, etc. I tend to not spend too much time with parties that hold this perspective.
In the context of the podcast, this is usually characterized not by rejection but instead by outright refusal to participate in any interaction whatsoever: what some call ["ghosting"](). I'm not entirely sure if they leave read receipts on to make their point, but I've found this behavior to be a pretty good indicator of where we stand on this spectrum. Of course, there are those that simply don't receive any notifications and have read receipts turned off: these folks are likely not in this state and are just as busy as the rest of us.
Also in the context of the podcast, I've had guests accept an invitation and then later decline closer to the time of recording because they got invited to go on [Lex Fridman](https://x.com/lexfridman) and mention "thanks for the invite, but now I don't need this anymore". There is no judgment at all here, but such behavior indicates where on this spectrum these relationships stand.
2. **Coexist**: parties acknowledge each other's existence but maintain minimal interaction, summarized as "I know _of_ them, but we don't really talk". This is usually characterized by mutual respect, but a general distancing for myriad reasons that might include:
- **Personal differences**: people might not get along personally, and while they may respect each other, they choose to maintain a distance. Ultimately, human beings are more or less big bundles of chemicals with legs. When chemicals interact, there's usually a reaction: sometimes positive `(2H₂ + O₂ → 2H₂O)`, sometimes negative `(SO₃ + H₂O → H₂SO₄)`. This is usually natural and nothing personal.
- **Professional differences**: people may have different professional goals or values, which can lead to a lack of shared interests or collaboration. Some might want to be influencers, some might want to be builders, some might want to be investors, they pick the right relationships to be in for them at the time.
- **Values differences**: people may have different values that lead them to invest in different relationships. Some might value emotionality highly, leading them to be friends with other emotional people; others might value logic and reason, leading them to be friends with other logical people. Some might value money, leading them to be friends with other wealthy people, etc.
In the context of the podcast, I've experienced folks who are aware it exists and even talk about it, but have never expressed interest in being a guest on it. I too have not extended invites here because we're both in the same state of the spectrum. There's nothing wrong with this: instead it's kind of beautiful that both parties clearly understand where the other one stands on this spectrum and can move without any drama. It also doesn't exclude the relationship from ever progressing and is usually just a matter of time before it does.
3. **Communicate**: basic information exchange occurs, where either party would describe the other as "we spoke about something once" but the relationship doesn't progress much further for similar reasons as above.
In the context of the podcast, this is where a conversation eventually leads to _"yeah, let's do it"_, and then nothing ever happens, or an event is scheduled but has not yet taken place. Communication has happened, positive communication even, but, specifically in the case of the podcast, we have not yet cooperated on anything.
This is where the vast majority of western relationships live: a "comfortable distance" of sorts. We see traits of this outside a professional context as well, where shallow friends will talk and say _"let's get coffee some time!"_, but then never actually follow up. Perhaps even worse, people in this state often make plans and then cancel at the last minute because it's simply not convenient.
It's pretty remarkable that this state is quite prominent in western culture and less so in other parts of the world as eloquently highlighted by my former [Spotify](https://x.com/tejask/status/1384524632263471106) colleague [Himanshu](https://x.com/orkohunter) in his [blog post about moving back to India](https://orkohunter.net/blog/why-dont-you-move-abroad/).
4. **Cooperate**: parties participate in a neutral task together, where they're both contributing to the same goal. The stakes are usually low, and the relationship is still mostly transactional.
A great experiential example of this from my career is when I've spoken at conferences with some folks who I've heard of but haven't really developed much rapport with. The relationship is cordial, but not much else. How this low-stakes cooperation goes strongly influences next states: from here, either party can choose to remain in earlier states, or progress to the next state, **Coordinate**, based on how well they were able to work together (as popular culture calls it, _"the vibezzz"_).
In the context of the podcast, this is where we actually spend time in conversation together on an episode: both parties are contributing to the same goal, cooperating with each other to meet it. It's slightly less convenient than the previous state, but given the quality of the cooperation, leads to far better outcomes.
5. **Coordinate**: at this stage, one or both parties take deliberate steps to coordinate their actions toward a goal that belongs to one of the parties. This goal is often "adopted" by the other, looking something like:
- _"we're both going to be at this conference a day earlier, shall we go explore the city together?"_, one person's goal of exploration is adopted by the other.
- \_"I see you're [working on a new course](https://x.com/kentcdodds/status/1861808243590549572), shall I do a [giveaway](https://x.com/tejask/status/1845140333933322311) on my podcast when you launch?"\_, one person's goal of promoting their course is adopted by the other.
Both of these cases are coordinated efforts. Though the latter is a more advanced state of coordination, the main gist here is that one or both parties take deliberate steps to coordinate their actions to achieve a newly shared goal: to support each other.
Either party can make the first move, and this tends to be a pretty chaotic space because it calls into question a number of topics like motivation, trust, and alignment. The party that makes the first move risks the other one thinking they're being too aggressive, pushy, or plain weird.
They also risk the other party questioning their motivations:
- _"Why is this person offering to amplify my course launch?"_
- _"Why do they want to explore the city together?"_
- _"What's the catch?"_
- _"Will I owe them a favor later?"_
The coordination state is usually perceived as risky, though empirical evidence proves it is not because **people are on average more good than evil** according to research from the lab of [Dr. Jamil Zaki](https://psychology.stanford.edu/people/jamil-zaki) at [Stanford University's Department of Psychology](https://psychology.stanford.edu/), where they have demonstrated that [coordinated efforts can lead to increased trust, motivation, and even happiness](https://www.youtube.com/watch?v=M7aUF3hi_8Q).
Coordination is typically an inflection point in the relationship, as referenced in the diagram. If people have not spent enough time in previous states, this state usually will not work. If there were intense positive vibes in previous states, this will feel natural and seamless. Ultimately, both parties grow synergistically from coordinated efforts while working on entirely separate but complementary topics.
Folks that I've coordinated well with include:
- **[Kent C. Dodds](https://x.com/kentcdodds)** on deprecating his library [glamorous](https://github.com/paypal/glamorous) in favor of [emotion](https://github.com/emotion-js/emotion): we built _separate things_ that were complementary and coordinated on them together.
- **[Aymen Ben Amor](https://x.com/Aymen_Ben_Amor)**, **[Clark Sell](https://x.com/theclarksell)**, and **[Josh Goldberg](https://x.com/joshuakgoldberg)** on [supporting their conferences via the podcast](/podcast/ep/clark-sell-founder-that-conference): they were building a conference, I was building a podcast, and we coordinated on promoting the conference together (I adopted their goal of promoting the conference).
- **[Alex Moldovan](https://x.com/alexnmoldovan)** who runs [JS Heroes](https://jsheroes.io/) and has me as an ambassador: he creates the conference and coordinates with a set of ambassadors. We do not _create the conference_ together. If we did, this would be the next step, **Collaboration**.
6. **Collaborate**: something beautiful happens when two or more people repeatedly execute successful coordinated efforts: there is a common recognition of high-quality synergy; that together, they are greater than the sum of their parts and they can continually share joy in their work. Collaboration is not when people coordinate efforts on building separate things that are complementary, but instead when they **build the same thing together**.
I've had the privilege of collaborating with a number of great folks over my career. If I was to start a company, go to war, or happen to be in a zombie apocalypse, I'd want these folks by my side. At this stage, all parties have established a high level of trust and understanding of each other. They understand boundaries and each other's value systems extremely well. They are able to push boundaries and challenge ideas respectfully, with grace, without ego, at the right time and in the right circumstance.
Folks that I've had and continue to have excellent collaboration with include:
- **[Fabien Bernard](https://x.com/fabien0102)** and **[Mikhail Potomin](https://x.com/mpotomin)**, where we built some software that was cool at the time but is now obsolete. Specifically,
- **[Restful React](https://github.com/contiamo/restful-react)**: a RESTful data layer for React applications that had a fully type-safe interface for working with REST APIs predictably.
- **[Operational UI](https://github.com/contiamo/operational-ui)**: a React component library whose documentation had interactive [Monaco Editor](https://microsoft.github.io/monaco-editor/) playgrounds with IntelliSense for TypeScript autocompletion _in the browser_. I did a talk about this at [React Finland](https://www.youtube.com/watch?v=ZsBW4S8hYMU) in 2019 where I first met
- **[David Khourshid](https://x.com/davidkpiano)** and **[Jenny Truong](https://x.com/jen_ayy_)**, where we built their wedding ceremony together where I was the officiant. This is a collaboration and not a coordination because we built the same thing (a wedding ceremony) together, instead of coordinating on building separate things that are complementary.
- **[Daniel Afonso](https://x.com/danieljcafonso)**, **[Sergii Kirianov](https://x.com/sergiikirianov)**, **[Matheus Albuquerque](https://x.com/ythecombinator)**, **[Mark Erikson](https://x.com/acemarke)**, **[Rick Hanlon II](https://x.com/rickhanlonii)**, and more where we built my book [Fluent React](https://www.amazon.com/Fluent-React-Performant-Intuitive-Applications/dp/1098138716/ref=sr_1_1?dib=eyJ2IjoiMSJ9.eigFqxPBQ8MG8Reub4v6d26VACrOAWNNB4flZUD6j_lArvmiIuT-RzRq5-7vyhvJd3ZruoaI9ZRp_I3r3-a5SNuGE_MAKaNluhRqBfjh6FQ.JAAVgZuJ8Rxht6r7T-dw4pSLd6FOIt8ckVtmo5QIHZ4&dib_tag=se&keywords=fluent+react&qid=1732797223&sr=8-1) together. I may have authored the book, but it was a strong collaborative effort where they reviewed it and continued to provide high-quality feedback until it was ready for publication. It was _one thing_ that we all built together: a collaboration.
I don't yet build the podcast with anyone, but I'm open to it.
7. **We are the same**: the final state represents a shared identity and enmeshment, which is **not a positive state**. Keeping with the old adage of "too much of a good thing is a bad thing", this is a state where parties are co-dependent and enmeshed, where one or more members unhealthily depend on the other. There is a dissolution of individuality, a loss of identity and boundaries: this is a toxic state. **In this state, we find and experience burnout.**
It's easy to exploit this state and take advantage of one or more members. Ownership over collaborative efforts is also disputed in this state, and it's not uncommon to see folks take credit for things that they didn't do, or to see people step down from collaborative efforts because they feel they're not being valued.
Attempts to reach ideal and healthy levels of collaboration often go wrong and end up here, usually by employers using toxic positivity and platitudes like _"we're a startup family"_. You may recognize you're in this state by several key warning signs:
- **Loss of Personal Identity**: inability to develop or maintain a strong sense of self, only being able to describe yourself in relation to others, being uncomfortable taking credit for your own good work, and difficulty knowing your own wants and needs.
- **Difficulty Making Independent Decisions**: struggling to make choices without consulting others, feeling unable to function independently, anxious overthinking, and constantly seeking approval before taking action.
- **Lack of Boundaries**: having trouble saying "no," allowing others to invade your privacy, and being unable to separate your emotions from those of others.
I've fallen into this state a few times for very short periods and what has helped me get out of it is to redevelop **my identity alone** as a separate and beautiful thing from really any other party. That and separation from the problematic party. The combination of rediscovering self-identity, establishing healthy boundaries, separation, and working with a board-certified therapist is something that can be helpful for folks that find themselves in this state.
Ideally, we learn to recognize quality collaboration as the peak of synergy and protect against this state. I am thankful to rarely if ever find myself here and take strong measures to avoid it. If you're in this state, it is my hope that this diagram and post will help you understand where you are and how to move forward. Keep reading for some actionable steps you can take to move your relationships forward.
#### Making it Practical
Take a moment to think about where your relationships stand on this spectrum. It's a great exercise to help you understand where you are and where you want to be. I've already mentioned a few of my own excellent collaborators and folks with whom I coordinate well, who are yours? Who can you credit? For real, scroll up, copy the image, place it beside you, and ponder it closely.
Who are folks that you coexist with? Why? Who gatekeeps and excludes you? Who would you build a company with? I'd encourage carefully considering the answers to these questions and even copying the graph and placing avatars along its axis to help you visualize the status of your relationships. From there, you can start to take action to move relationships to where you want them to be, ultimately bringing your social setting into alignment with your goals and values.
Should you decide you'd like to move some relationships forward, here are some actionable pathways you can take.
#### Moving Relationships Forward
There's plenty of evidence that shows that we're at our worst when we are exclusionary and _zero-sum_. The inverse is also true: we are at our best when we are collaborating well with others. For example, [this paper](https://pmc.ncbi.nlm.nih.gov/articles/PMC4360764/) has two key ideas that I think are worth repeating here:
Working in isolation creates significant limitations:
1. It creates a **false sense of security** because ideas are not likely to be challenged.
2. It results in work that **will not reach as wide an audience**.
3. It **wastes limited resources** through duplicated efforts.
The paper also states that:
> The benefits of collaboration allow participants to achieve together more than they can individually, serve larger groups of people, and grow on individual and organizational levels.
With this, we can see that **collaboration is not just a nice-to-have but a necessity**. It's not just about getting along with others, but about building greater things together. Should you decide to move some relationships forward, here's what has worked well for me:
1. **Cultivate an abundance mindset**: not virtue signaling, but I often [give away money](https://x.com/Beccalytics/status/1858935386757886175) and time to folks. People question this from time to time and ultimately, the answer I end up giving is that **there is so much to go around**. The world is abundant and not zero-sum. I intentionally let people take advantage of me because I know I'll recover whatever I need in another way. If you pour your entire bucket into others, it may become empty but it will never _stay empty_: it has rained on this planet since the beginning of time on rich and poor alike, and it will continue to rain. **The rain will fill your bucket again.**
To cultivate this mindset, these practical steps from [these](https://pmc.ncbi.nlm.nih.gov/articles/PMC10039809/) [scientific](https://pmc.ncbi.nlm.nih.gov/articles/PMC10794476/) [papers](https://www.researchgate.net/publication/236137739_Volunteering_Predicts_Health_Among_Those_Who_Value_Others_Two_National_Studies) may help:
- **Start Small**: begin with micro-giving. Allocate a small percentage of your resources to deliberately give away. I do 10%, but you can start with 5% and see how it feels. Another useful habit is to practice random acts of kindness daily, whenever convenient.
- **Build Social Connections**: join giving circles, participate in community service, and create giving networks. This is a great way to meet like-minded people and cultivate relationships. It's like _"scarcity mindsets anonymous"_: a rehab group for those that suffer with scarcity mindset. Cooperate and collaborate with each other to achieve goals that are greater than the sum of your parts.
- **Mindfulness Practice**: daily gratitude journaling, abundance visualization, and regular meditation focusing on interconnectedness have all been scientifically proven (papers above) to help shift your mindset towards abundance.
- **Track Impact**: keep a "giving diary" to document your positive outcomes and ripple effects. This can help you remember to do it again and track your personal growth.
2. **Abandon lost causes**: people have literally blocked me on social media, ghosted me, or outright said "there's no room for you at this table". Anti-foreigner folks have physically attacked me and mentioned "go home" (to your country) in Germany, where I am a tax-paying permanent resident.
A lesson I learned from reading [Mark Manson's "Models"](https://www.amazon.com.mx/Models-Attract-Women-Through-Honesty/dp/1463750358) as an awkward stupid teenager who wanted to get girls is that the world is an abundant one full of all kinds of people: some who shun us, others who love us. When someone reveals that there's no room for a relationship, they do us a huge favor and free us up to go pursue others who are open to it. I've seen great success in quickly being thankful for the data and moving on.
3. **Love your neighbor as yourself**: I really love myself well. I feed myself good food, I give myself good exercise, I make money to invest in myself. I've seen enormous value and joy in extending the same love to others, beyond just one's physical neighbor. It would be strange of me to expect something in return from myself as I take care of myself. When I treat people the way I want to be treated, and honor them appropriately, **giving expecting nothing in return**, there usually ends up being quite a wonderful return that leads to quality collaboration.
Obviously this isn't _every time_, but the few times it works is worth all the times it doesn't. It does open you up to abuse and being taken advantage of, but the few times it has worked for me heavily outweighs the times it hasn't. I'd recommend reading [Hope for Cynics](https://www.amazon.com/Hope-Cynics-Surprising-Science-Goodness/dp/B0D5SD8W2B/ref=sr_1_1?dib=eyJ2IjoiMSJ9.YGSiHm0vKfPnGGrkfEHzjo81gfFIgxL-9JYZ3wynncT9hkigUoOdVe5Xf7co4vmVoA67pcbuC0blFH61PwRXw-jsQYC2X4Tmt7MvGdhEs1ew59RSDe-NSq2RvklLU_ZKA0xljACwL2T2dUUYYhzVow.6TyURxQ4Lkcxjo6baEUiRI0cpgny4R5Bay4IUE9Hu0k&dib_tag=se&keywords=hope+for+cynics&qid=1732808871&sr=8-1) by the aforementioned Dr. Jamil Zaki for more on this topic.
4. **Sweat the details**: we live in an age where we're constantly bombarded by random nonsense vying for our attention. Conforming to the pattern of this world, it's fairly common to respond to folks with low-effort communication.
- _"sup"_
- [_"lgtm"_](https://x.com/tejask/status/1747176544433230198)
- _"sounds good"_
This is characteristic of the **communicate** state in our diagram.
Every single time a relationship has moved forward for me has been when **I cared. A lot.** It has been when folks have mentioned something that's stressing them out and I listened. It has been when I followed up with them about it weeks later. It has been when my people and I have **shown up and done the work** that puts them at ease or actively invests in their goals, when we don't conform to the pattern of the world, but instead transform our behavior to align closer to our values.
To circle back, **coordination happens when one party adopts the goal of the other and takes initiative to support it**. Sweating the details and doing the work, even at a cost to ourselves, is a great way to move from cooperation to coordination. When there are repeatedly successful coordinated efforts, the relationship will naturally progress to collaboration.
#### Conclusion
If you've made it this far, I hope you've found this useful. I also hope that you have actually _done the exercise_ (and cooperated with me) to identify the current state of your relationships and feel empowered to move the ones that you'd like to forward.
If you'd like to join a **coordinated** effort to bring this information to more people, you can do so in the following ways:
- Share this post on social media however/wherever you want.
- Share your version of the graph above with avatars superimposed on it with your collaborators and others.
- Share your thoughts about this text with me on [𝕏](https://x.com/tejask) or other platforms.
If you'd like to **collaborate** on this post or its ideas, some great ways to do so are:
- Translate it into other languages to make it more accessible to more people.
- Suggest typo fixes and studies to include.
- Fact check and suggest removal of any inaccuracies.
Notice how for **collaboration**, we're working on the same thing (this post) together, and for **coordination** you're creating separate things that are complementary? Okay, I think I've made my point.
Goodbye.
---
### Health, Fitness, DevRel, and Hemophilia
Published: 2022-09-03
URL: https://tej.as/blog/health-fitness-devrel-hemophilia
A deeply personal post about my health journey and how it's affected my fitness, devrel work, and more.
**Update, October 2026: what living with hemophilia is like, in short.** I have severe hemophilia A, which means that without medicine my blood has less than 1% of the clotting factor yours has, so a bleed that would stop on its own for you can keep going inside a joint or a muscle for me. Since moving to Berlin in 2015 I've been on a preventive plan and inject the medicine into my own veins, on the road too, which is the only reason a life of conferences and travel is possible at all. Everything below is the post I wrote in 2022 about how that shapes my health, my fitness and my work, and [the whole story](/story) is told chapter by chapter on its own page.
This is a deeply personal post that will give you quite the insight into me as a person and my health journey so far. I'm literally laying it all out there. This may affect the way you see me, and might make some relationships awkward or something, but I don't really care: vulnerability and the positive results that follow are worth it. With that, let's kick this off.
[Brené Brown](https://www.youtube.com/watch?v=iCvmsMzlF7o) told me to be vulnerable, so here's an attempt. Before we get started, I need to make a few things clear:
- **1. This Isn't Medical Advice**: While I've spent most of my life in hospitals with doctors (more on that later), I'm not a doctor and the things I'm saying here are not to be considered medical advice. Heck, they're not supposed to be considered _any_ advice, this is just personal experience. I hate unsolicited advice, so far be it from me to give it.
- **2. You're Probably Fine**: We're our own worst critics, and can be pretty hard on ourselves. I'm here to tell you that even if you're feeling not-as-fit, or if you've got a few extra pounds, or whatever it may be, you're probably fine. Allow me to be the counter voice to your inner critic: you're probably fine.
We're our own worst critics, and can be pretty hard on ourselves. I'm here to tell you that even if you're feeling not-as-fit, or if you've got a few extra pounds, or whatever it may be, you're probably fine. Allow me to be the counter voice to your inner critic: you're probably fine.
Now, if there's real health impact where you're [having trouble breathing while sleeping](https://www.mayoclinic.org/diseases-conditions/sleep-apnea/symptoms-causes/syc-20377631) or are at higher risk of injury or death, then there's work to be done and I hope you're able to do it. I'd even be willing to help! Generally though, the difference between what our inner critic tells us and reality is pretty wild. Again, you're probably fine.
- **3. Comparison is a Trap**: I'm going to be talking about my health and fitness journey, and I _might_ talk about it in a way that could make some feel bad about themselves or like they're not doing enough or something. We naturally compare because [we evolved to](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4222713/), but again, you're probably fine.
I believe the only one worth comparing myself with is my past self. If I compare myself to a beast like [Nader Dabit](https://twitter.com/dabit3), I'd probably consistently feel awful and unmotivated. But if I compare myself to my past self, I can see how far I've come and how much I've improved. That's a much more positive and motivating comparison.
- **4. Privilege is a Thing**: I fully recognize that I was privileged enough to have the stars align in my favor. We'll talk more about that later in this post, but for now, I'm aware that not everybody has the opportunities and the privilege that I have today that makes the wins I'm about to share possible. This motivates me to work even harder to help others who don't have the same opportunities.
Similarly, there are others with _way_ more privilege than me just by virtue of something as trivial as _where they spawned on the planet_. Inequality's an unfortunate thing. My strategy is to work hard to eliminate it, while also not resenting those more privileged than I am.
Whew, okay. Lots of disclaimers. Let's get into the meat of this thing. (Pun intended, but it'll probably only make sense after you've read further)
#### Context
Just kidding! We need to establish some context first. You see, my life is quite different from most because **I have a rare genetic disease that affects about 1 in 20,000 people in the United States**. Pretty sure that can be considered _"rare"_. It's called [hemophilia](https://www.mayoclinic.org/diseases-conditions/hemophilia/symptoms-causes/syc-20373327) and is _the literal worst_. The TL;DR of it is that when I start bleeding (both _internally_ and _externally_), I cannot stop: my body is unable to produce [factor 8](https://pubmed.ncbi.nlm.nih.gov/6424437/), a clotting factor responsible for stopping bleeding.
Of course, thankfully there's medicine for it. Of course, the world is a messed up and unequal place, so this medicine is [ridiculously expensive](https://www.statista.com/statistics/1089192/price-of-factor-viii-by-country/). The drug I need (called **[Recombinant Factor VIII](https://en.wikipedia.org/wiki/Factor_VIII)**) costs about $2.53 per [International Unit](https://en.wikipedia.org/wiki/International_unit) (IU). For optimal treatment, I need about 3000 IU, 3 times a week. That's about $22,770 _a week_. **If I don't take this, my risk of death is and remains very high**.
I have _the worst kind of hemophilia_: severe hemophilia A. That means, at any given time, unmedicated, my blood contains a concentration of <1% of clotting factor. A normal range of this is 50%-150%. Your body increases it to 150% when you have an injury, and maintains a lower level when you're sedentary. All of this is magically maintained by your healthy body. All of this is impossible for mine.
#### Spending $22,770 a Week on Medicine
$22,770 a week? In India? Lol, you must be joking. Not only is the median income of India like $2,500 US, but I was also born into not a rich family. What's the alternative? You either die, or you hope for "the cheap stuff". My grandpa also had my disease (it's genetic). He lived his whole life in India. He took the cheap stuff, which _gave him AIDS_, which he ended up dying from (wtf, right?!).
Yeah, so India's a no-go. At about age 4, my dad miraculously got a job that moved us to [Qatar](https://en.wikipedia.org/wiki/Qatar). After a near-death experience (maybe a blog post for another time), we learned that the treatment at the time in Qatar, only in case of emergencies, was free for all, even expats.
This was an incredible thing and a total game changer. My life was saved, but _just in case of emergencies_. This led to me going about my life as usual, but then having to go to the emergency hospital (ER) every time I did some basic physical activity, like carrying a backpack, opening a door, or _walking_.
You see, **human beings bleed internally all the time**. Like literally _all the time_. When you walk up some stairs, tiny blood vessels near your knees rupture and start trickling blood into your knee cavity. This stops in a matter of seconds for you though, and you never even notice.
For me, walking to a grocery store would present a very real possibility of being bedridden the next day, because my knee would eventually fill up with blood such that the blood would pull the ball away from the socket in the joint and it would be in a pseudo-dislocated position which was quite painful, which required emergency medication. From _walking_. Yeah. Similar things happened with other joints, like elbows (from opening heavy doors) and ankles (also from walking).
With this, 18 years of my life between the ages of 4 and 22 were lived on a pendulum:
- Go to school on Monday.
- Bleed internally from _some random action_ for hours.
- Lose a lot of blood and be in a lot of pain by Monday evening.
- Go to the emergency hospital on Tuesday.
- Argue with doctors and clarify that _yes, I'm here again not because I'm a junkie but because I bleed a lot_.
- Hematology specialists get it, emergency doctors don't. This was a constant struggle.
- Get treated.
- Spend the rest of the week recovering.
Next Monday, repeat. Over and over again. _For 18 years,_ after which I'd move to Germany for a better life (more about that later).
Being frustrated with this disgraceful existence I was born into as a young child, I would often question what it would have been like if I had never been born and often wished I wasn't. This was painful for those around me (and me), so food become a nice comfort. Now, do the math: since exercise would literally kill me and food was comfort, what do you think happened?
#### Obesity
I was a large child: weighing in around 80kg or 180lbs at age 13. On the few days I went to school, I was bullied pretty heavily both physically and verbally: people would hit/kick me, and I'd bruise and nearly die the next day. Of course, they didn't see me bleed internally and they didn't understand the gravity of it. I had to deal with it all the same. **I bet there's a parallel here for people saying mean things on the internet because they're not exposed to the consequences and impact of their attacks.** Anyway, my nickname was "fat mushroom" because I had a bowl haircut for a while, which made me look like a fat mushroom.
To make matters worse, when a body has dense subcutaneous adipose tissue (a lot of fat under the skin), it makes veins pretty hard to find. The only way to administer my clotting factor is through a vein (intraveinous/IV injections). This made treating me way harder, and I needed these injections to live.
Things started to change when my dad saw a doctor for his cholesterol. His doctor introduced him to a diet/lifestyle that would go on to shape this entire blog post for the better. While we'll get into the details later, I learned from my dad and adopted this diet/lifestyle, which led to me losing a lot of weight and feeling better about myself.
Little did I know, even then, I _still_ wouldn't like what I saw in the mirror.
#### Emaciation
Following the advice of my dad's doctor, even _without exercise_, I had lost a lot of weight just by adjusting what I ate. Turns out **abs are made in the kitchen**. The problem is, I had literally none of them. I don't know what I was thinking or what I expected, but I should have done the math: I'm a teenager who has never exercised a day in his life because _I couldn't_. I should have known what I'd see under the fat.
Unlike most people, I never had the ability/possibility to develop even the _basal muscle_ most people develop by basically existing and going about their life: playing around as a toddler, going to kindergarten, school, etc. I had almost zero muscle mass. There was literally just skin and bone. When people saw me, they'd ask if I was sick because I looked sick. Dang.
I stayed like this for a while +/- a few pounds until, yet again, I was very uncertain about my future.
#### Moving to Germany
Qatar is no stranger to [international](https://www.business-humanrights.org/en/latest-news/indian-workers-suicide-in-qatar-raises-concern-over-stranded-migrants/) [controversy](https://en.wikipedia.org/wiki/2022_FIFA_World_Cup_controversies#:~:text=There%20have%20been%20numerous%20allegations,and%20ex%2Dpresident%20Sepp%20Blatter.). While I'm not going to throw shade at them for what I'm about to say, it definitely inconvenienced me a great deal. At the time, I had spent most of my life in Qatar, benefitting from the free emergency healthcare, bouncing between the ER and my house for 18 years. This was about to stop.
The law in Qatar is such that when the head of a family turns 60, they have to take their family and go back to their country of origin. [Qatar does not issue visas for people over 60 years old](https://www.dohaguides.com/qatar-family-visit-visa-requirements/#:~:text=Currently%2C%20there%20is%20an%20age,for%20a%20visa%20on%20arrival.). To me, this is basically a death sentence since there's no way we can afford the expensive medication I require to stay alive in India.
After panicking a little bit, I decided to try and find a job in some _white people country_ with a good healthcare system that would meet my needs (so, not the United States). I found a job in Germany as a Front-end Engineer (tbh after BS-ing my way through interviews because I _needed_ the healthcare), and then I moved.
Pretty much immediately after moving, I found the [hemophilia center in Berlin](https://www.vivantes.de/klinikum-im-friedrichshain/fachbereiche/zentren/zentrum-fuer-haemophilie-und-haemostaseologie) and met the doctor hastefully.
> Hi, I just met you and this is crazy, but I have severe hemophilia so give me medicine maybe?
He had no idea who I was, I had no records. He asked for the brand of medicine I used to take in Qatar, I told him, and he sorted me out.
#### Better Treatment
Instead of responding to emergency situations, they placed me on a **preventative plan**: I take 3000IU of clotting Factor VIII, 3x per week (every other day), and it stops out-of-control bleeding before it can start. This was amazing. They even trained me to inject my medicine into my own veins. Things are starting to look up.
I would later find out about the wonder of a functioning healthcare system: the entire population pays a fee towards insurance, even if they never go to the doctor. The insurance system collects all this money and redistributes it to people who go to the doctor a lot and who need expensive medicine: people like me. **Thank you for paying your health insurance premiums**.
With this treatment plan, I could finally live a little bit and travel freely, taking my medicine with me on flights and injecting myself on schedule, even in remote locations. This opened up literally the entire world to me. 😍
#### Enter Developer Relations (DevRel)
After living in Berlin for a couple of years, I had the opportunity to attend [ZEIT Day Berlin](https://www.yld.io/blog/zeit-day-berlin/) where I hung out with [Guillermo](https://twitter.com/rauchg), [Ives from CodeSandbox](https://twitter.com/CompuIves), [Dan Abramov](https://twitter.com/dan_abramov), and the beautiful community. It was a really great conference. I learned a lot, and also learned that tech conferences were a thing.
A few years later, I'd go on to speak at [my first ever tech conference](https://www.youtube.com/watch?v=ONlLvZWXv1Y) largely thanks to an anonymous call-for-papers (CFP) process and a lack of racial bias. This talk was pretty well received, and I'd continue speaking at conferences to this day while enjoying it and trying to bless the community as much as I am able.
##### DevRel: The Scary Parts
While a devrel role is an incredible type of job with a ton of opportunities and good vibes, things are seldom _perfect_. Writing docs, creating content, looking after the community are extremely rewarding. However, devrel _can_ include attending a large number of events.
The events themselves are wonderful. When they accumulate, they can take a toll:
- You've got a pre-party, where you're eager to meet people and make friends, usually over a good amount of food and drink.
- You're probably tired from the flight and the day before.
- You've got the day of the event, which is _sustained_ high social energy and constant excitement, being "on" the whole time.
- You've got the after-party, which is a lot of fun, but also a lot of drinking, eating, and socializing with KARAOKE YEAHHHHHHHHHH
What this leads to, if we're not careful, is a lifestyle of constant socializing, eating, and drinking with overly high energy and adrenaline. This is not a bad thing, but it can lead to a lot of stress on the body. Moreover, because of the regularly shifting environments, it can be hard to maintain a consistent fitness routine. Because of the delicious free food at events, it can be hard to maintain a consistent diet. Because of the intoxicating open bars, it can be hard to say no to alcohol. Did you know that alcohol can mess up your sleep? Because of a lack of sleep, [it can be hard to maintain sanity](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6048360/).
I slowly started to unravel after traveling a lot for devrel and needed to find a solution. Thankfully, I did (keep reading).
As a disclaimer, I get that this can sound very "first world problems". I am extremely thankful for my privileged and wonderful position in devrel. There are a lot of great parts to it. We live in this culture though where we show off the highlights on Instagram and leave off the rest. I'd like to be able to be transparent about the trade-offs here.
#### A New Drug
In late 2020, I was invited to participate in the clinical trial of a newer and more experimental clotting agent: one that lasts longer than the standard at the time. This would mean that instead of my usual 3000IU 3x per week, I'd switch to 4000IU 1x per week. I'd go from injecting stuff into my veins 3x per week to once. Heck yeah! I accepted immediately.
After being on this drug for a while, we found out its impact on quality of life is _major_. **Someone with my disease had a full hip replacement surgery** and didn't need much medicine to fully recover. Previously, this would be out of the question because it would either be fatal, or require too much clotting factor. Wild!
This new drug made me feel like I experienced rebirth or evolution: my world got way bigger because I became way stronger and far more resilient. Keep in mind, in reality I'm just getting closer to people without hemophilia, probably like you. Anyway, with this _"super-soldier serum"_, I figured it's time to give the gym more than I could have in the past.
#### Today(ish)'s Results
A little over a year later, these are the results. Keep in mind: I work in devrel and constantly travel so maintaining a consistent routine is hard if not impossible. Warning: **these may be NSFW.** I'm not nude, but I'm shirtless, which, depending on your convictions might be too much. Open it at your own risk.
Show me
So, I mean, it's not _that_ significant, sure, but it's also not _insignificant_, right? Like if we remember the beginning of this post, we're just comparing ourselves to our past selves. Comparing myself to my past here, I'm pretty satisfied. Especially compared to my childhood self.
Comparing myself to [Shaka Smith](https://www.google.com/search?q=shaka+smith&sxsrf=ALiCzsaH3IA57-x4tcoFeYa5jVPCTW1Pcw:1662236873313&source=lnms&tbm=isch&sa=X&ved=2ahUKEwjz5_byuvn5AhVaFTQIHXtxDZEQ_AUoBHoECAIQBg&biw=1800&bih=972&dpr=2), who also has my disease, _can_ leave me unsatisfied, but honestly it's an exercise in futility: I have no idea how severe his condition is, what healthcare/privilege he was born into, etc. I _do_ know my circumstances and my past, so again, self-comparison works to my benefit here.
Okay, so I might be able to guess what you're thinking looking at the before/after above.
> "How?"
This is a consequence of a literal lifelong struggle with myself: from being born predestined to be physically weak, to then being hated for being fat though it was out of my control, to getting overly skinny and still hating myself, to today. All of this comes from a lot of baggage, some that still exists to this day.
#### Weight Loss
I am able to lose weight at will consistently using things that my dad's doctor told him earlier and building on it: I eat [keto](https://www.healthline.com/nutrition/ketogenic-diet-101), avoiding any carbohydrates I can. In the absence of carbohydrates, the body turns to fat for energy: both dietary fat (that is, fat that you eat from food), and stored fat (that is, fat on your body). We need energy for literally everything, _even sleeping_ and chilling.
There's an adjustment period when eliminating rice, bread, pasta, and all carbs from my diet but after it, I don't even miss these things if I'm being honest.
I lose quite a bit of weight just doing keto on its own. The thing is, when I start seeing results, I get motivated to do more. Since keto consumes fat for energy, if I reduce dietary fat intake (thereby reducing even food intake), my body will still continue to use fat for energy: the fat on my body.
Because of this, I practice [**intermittent fasting**](https://www.hopkinsmedicine.org/health/wellness-and-prevention/intermittent-fasting-what-is-it-and-how-does-it-work) (IF). I fast for 16-20 hours per day every day, and only eat between an 8-4 hour window. There's a common myth that when you're not eating you're not eating. The truth is that our bodies are _always_ eating: either from the outside (food), or from the inside ([autophagy](https://www.healthline.com/health/autophagy)). Managing this with a little discipline, even when traveling for work, has served me well.
Keto + IF also makes devrel work extremely convenient. I don't have to think about food as much, and when I do, it's easy: something without starch/sugar. Steak, cheese, whatever. Green, leafy vegetables are also keto, so I could literally just eat a bowl of nice fresh lettuce, broccoli, and other healthy goodies. You ever look at a menu and panic because you don't know what to get? The constraints I have help me decide on meals faster, which also improves my quality of life.
##### Fasting Considered Harmful
While fasting can have [very good results](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2495396/), it can be dangerous if not managed well. When fasting, you can create deficiencies in multiple essential minerals, vitamins, and electrolytes. To combat this, I supplement these carefully while also consuming a bit of salt occasionally while fasting (a powerful electrolyte).
At very low levels of body fat, fasting can also be _fatal_: if there's no fat left to consume, [your body _will_ turn to consuming muscle tissue for energy](https://pubmed.ncbi.nlm.nih.gov/2243122/) in the absence of alternative energy sources like carbs. Your heart is a muscle. Do the math. It's not worth it. If you're thinking about it, please, _please_ think critically and count the costs first, preferably consulting with an _actual_ doctor.
##### Lifestyle, not Diet
It's important to make a distinction here: this is a _lifestyle_, not a _diet_. Diets, especially crash diets, rarely ever work. They don't work because the basic principle around them is _deprivation_, which eventually leads to _binging_ and a bunch of other problems. The result? You often put the weight right back on after you lose it.
This is different: keto and intermittent fasting are things I _enjoy_. There are [multiple benefits to keto](https://pubmed.ncbi.nlm.nih.gov/35036220/) in the science. Some that I experience are:
- Reduced brain fog, increased focus.
- Consistent energy levels, no sugar crashes.
- Fat-first metabolism.
- Improved insulin sensitivity.
This makes it a lifestyle I want to adopt, regardless of how it affects my physical appearance. I believe this is a huge key to achieving the results I enjoy, and I'm convinced a simple crash diet would fail me.
##### Veganism & Climate Impact
There's no denying it, industrial farming is destroying the planet, and keto involves eating animal fat. That said, I think it's quite important to do grass-fed organic responsibly sourced meat if able. Keto is also not _only a lot of meat_, and green leafy vegetables have their place.
Additional [research](https://www.annualreviews.org/doi/10.1146/annurev-animal-022516-022943) proves that human beings _need_ certain bioavailable essential amino acids (the building blocks of proteins, the building blocks of muscles) that our bodies cannot produce through our dietary intake that are only available through animal proteins. That said, I'll stop here before the vegan army comes for me.
A reminder, I'm not interested in giving anyone advice and am only sharing what works for me.
#### Muscle Gain
I've also grown a bit of muscle compared to earlier through consistent weight/resistance training. I've consumed literature on literature on literature from [PubMed](https://pubmed.ncbi.nlm.nih.gov/) usually and have taken an extremely scientific approach to it. Exactly like the scientific method, the results are reproducible consistently.
[](https://twitter.com/tejask/status/1407590318065680384)
That's literally it: consistent weight training. This works even when doing devrel work because most hotels have gyms. No gym? I use [resistance bands](https://www.amazon.com/Fit-Simplify-Resistance-Exercise-Instruction/dp/B09MJKJYLQ) and work out in the room. Your muscles don't care if you use dumbbells or barbells or bands, they just need stimuli and stress.
What's even better is now that I'm lighter, calisthenics and body-weight exercises like pushups and pull-ups are more accessible and more fun. Weight loss before muscle gain has been helpful for me because I have a wider variety of exercises to choose from.
But wait, if I don't eat as much with intermittent fasting and keto, how do I grow muscle? From my experience, it would seem that being in the state of ketosis and consistently training is enough to sustain and grow muscle given an energy (caloric) surplus and adequate protein intake. Ketones [do make things grow](https://www.youtube.com/watch?v=pfgM6nfWU-I&t=4m1s), so there may be something here. Take this with a grain of salt though, because this is a pretty weak experiment I've done on myself where n=1.
##### Self-Compassion and Bro Science
Early in my weight training days, I've heard a lot of things that confused me and didn't seem to make any sense:
- I bought into the "go hard or go home" philosophy, often leading to poor form and injury.
- I heard arbitrary rules like "you must do 4 sets of 10 reps" without anyone ever talking about how much weight and why.
- I heard that unless I was sore after every workout, workouts were ineffective.
Thankfully, the science has shown me that **bro science is a bunch of bullshit**, and the true gains come from knowing thyself and from being kind to your body. "Go hard or go home" leads to [major problems](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3435910/) in the science, including increased cortisol (the stress hormone) which can short-circuit muscle growth.
My science-based strength protocol is based largely on self-compassion: I leave my ego at the door when I enter the gym and do whatever my body feels comfortable doing. To speak science, I use a method called "RIR (Reps in Reserve) training" that I learned from [this paper by Eric Helms and co.](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4961270/) that is basically self-compassion-driven weight training. The TL;DR of it is that you lift as much as you comfortably can, until you can't. It's totally fine to stop just short of muscle failure, and you don't _need_ to hit failure every time.
While it's hard to come up with a magic number for everyone since everyone's different, my weight training routines usually have 10-20 _hard sets_ per muscle group per week of any number of reps I'm comfortable with: the sets just have to feel difficult. That's it.
I go by feel, and optimize for **progressive overload**: I try to do a little more each time, so that my body gets enough physical stress that it adapts and gets stronger. Concretely, I increase at least 1 of 3 fundamental variables to strength training over time. These variables are:
1. **Intensity:** how heavy the weight is.
1. **Volume:** how many times I lift it (reps/sets).
1. **Frequency:** how often I work the muscle (2-3x per week).
Sometimes if I don't sleep enough or something, I regress. That's fine. It's just a day in an otherwise continuous flow of progressive, consistent overload. It's okay, I'll increase a variable next time. **Self-compassion is what leads to gains and consistency, while pressure makes me quit.**
What about soreness? Should I be sore after every session? The [science](https://pubmed.ncbi.nlm.nih.gov/3521903/) shows on multiple occasions that while DOMS (Delayed Onset Muscle Soreness) needs to be understood a little more with research, soreness is usually triggered by _novel stimulus_ (that is, some new exercise), and not necessarily overly strenuous exercise.
In other words, you could lift heavy and never be sore while still growing muscle if you consistently lift heavy and the heaviness is not _new_. You could also lift something not-as-heavy for the first time and be sore the next day. The science lends itself to the idea that **novelty leads to soreness, not stress**.
This reassures me that if I'm not sore after a workout, it doesn't really matter. My body will appropriately adapt to the challenging environment I'm providing it. _That's what bodies do_: they have literally _one job_, and that is to adapt to whatever environment they're in (whatever environment you give them) and adapt to ensure your survival. If you consistently stress your muscles and help your body recover well and adapt, you _will_ get stronger. It's nature's way.
So yeah, here's my training protocol in a nutshell:
- 10-20 hard sets per muscle group per week.
- Divided up into 4-7 sets, 3x per week.
- No rep ranges, but I lift things that are heavy enough to lift <10 times in a given set and no more, leaving as few reps in reserve (RIR) as I can comfortably.
- Prioritized progressive overload and increasing at least 1 fundamental variable.
- Muscles grow during recovery not during training, so plenty of sleep and food.
- Self-compassion covers all: if I can't perform, then I can't perform. It's fine. I'll perform next time. Enjoyment and consistency over time is more important than a single performance.
Okay, enough gym bro-ing out. Let's wrap this up.
#### What’s Next?
So today, I'm pretty satisfied with what I've accomplished so far, especially in the context of my disease and circumstances. I feel lighter, stronger, happier. Reflecting on being born with hemophilia and all that drama, how can I not be thankful? Even though there's still quite a bit of work to do and I'm not "perfect", it's incredibly satisfying. It's a little heartbreaking that people do treat me differently now and are more accepting of me because I supposedly look more "attractive", but I suppose it's a human tendency to treat people we perceive as more attractive better. I'm not sure what to do about that, but it does bother me a little bit.
One thing to note at my current state is that the goal keeps moving: at a lower level of body fat and more muscle, I _should_ be happy with what I have, but I also tend to notice more imperfections. This is why **I prioritize the journey instead of the destination**: because the destination likely is unreachable, unrealistic, and generally unreliable. In the meanwhile, I'll just enjoy my steak salad and barbells.
I also am keeping a close eye on my minerals, electrolytes, and mental state, being hyper-vigilant to prevent any eating disorders from developing. To me, **the focus is peak health, well-being, and quality of life.** Nothing more, nothing less. This is more than just shallow, vain aesthetics, but a pursuit of _health_. In fact, I believe **we get healthy, then lose weight and build muscle** instead of losing weight, building muscle, and then being called "healthy".
I sometimes also think about being one of these instagram influencers or a personal trainer specifically for people with disabilities or something based on all I've learned and experienced so far, working within my own medical constraints and limitations. Who knows? If my past says anything about my present, I feel like I'm living on the best possible timeline and I'm quite excited about the future, whatever it holds. Maybe I'll end up doing that stuff. For now, life is pretty beautiful and I intend to keep going.
---
### Pillars of Impact for Web Engineers
Published: 2022-03-10
URL: https://tej.as/blog/impact-pillars-web-engineering
I break down the four pillars of impact for web engineers: emotional, social, creative, and technical, and how to grow each one over time.
This blog post about impact web engineers can have was intended to be a reply to a text message.
You might be reading this title and thinking _wat_. It's okay, so am I. Thing is, my friend and ex-coworker [Iris](https://twitter.com/iris_schaffer) asked me for some thoughts about "different ways web engineers can have impact, and how they can grow it over time", and I started writing an answer when I realized it would be way too long for iMessage. This is that answer. But before I answer, maybe I should build some credibility before?
#### Tejas why should I trust u
I've been "an engineer" since I was 8 years old. That's in quotes because, well, I wasn't a professional. Still, I wrote code from that age. Started with basic HTML, then CSS, then JavaScript, then TypeScript, then YAML, then SQL, GraphQL, [HCL](https://github.com/hashicorp/hcl), you get the gist. It's been 21 years since my first line of code, and 10-ish since my first job. Since then, I've worked either full-time or contractually for [Spotify](https://spotify.com/), [Vercel](https://vercel.com/), [G2i](https://g2i.co/), and others, picking up things along the way. The jobs have been some mix of Individual Contributor (coding-heavy) roles, and managerial roles between companies.
The TL;DR is I've been both, a web engineer, and a web engineering _manager_ for a significant portion of my life (I think 1/3). In this time, I've seen things and recognized patterns where engineers can have impact and grow it over time. So, here's how I think web engineers can have impact and grow it over time.
The answer is nuanced and so abstract that I can't really think about it much without first isolating categories. Think of it as adding a few constraints in order to narrow scope, _then_ formulating a more structured answer. The categories I'm using to narrow scope are categories that I consider important for general flourishing in a given human's life that are usually also backed by science and general wisdom. Each category is not a silo, and there is considerable overlap between them. Without further ado, here's how I think web engineers can have and grow impact.
#### 1. Emotional Impact
Web engineers can (and often do) have emotional impact on their teams, managers, and companies at large.
[If you’ve ever asked for help and heard _“just read the docs”_](https://twitter.com/tejask/status/1129815603554988032), you’ve seen this kind of impact on its negative side. Conversely, if you frequently experience communication prefixed with “yes and” over “no, but”, you might see positive _emotional_ impact from engineers.
In all of my years working either as an engineering manager or engineer, **negative emotional impact is the number 1 reason I've seen people leave companies and experience burnout**, while positive emotional impact allows teams to not only flourish, but **consistently go the extra mile without experiencing burnout**. This is also backed in science, with [this 2018 study](https://pubmed.ncbi.nlm.nih.gov/30087493/) referencing burnout as emotional exhaustion from adverse working conditions, and [this 2020 study on nurses working in long-term healthcare centers](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7399977/) reporting that the optimism (or positive vibes) among nurses modulated their occupational health (in other words, prevented burnout).
With these facts, I consider this not just _a_ pillar of impact, but _the_ pillar of impact that is foundational to the skill set of any web engineer because **we work in teams**, and partially due to the fact that **as long as people care, there is always an emotional impact**, even if we don't notice. It is the onus of a talented engineer to be aware that their thoughts, words, deeds, and motives have an emotional impact on those around them, and work to have a positive one.
##### How Can We Grow It?
Assuming we want to grow _positive_ impact, I'd encourage **practicing vulnerability.** Human beings have evolved tremendous bullshit radars, and most of us can tell fake from a mile away. Even if awkward or uncomfortable, truth always wins over deceit. We usually are afraid to be authentic because we've been hurt or judged in the past for it. It's putting a fig leaf over our nakedness. We do it because it makes us feel safe while not recognizing that it's actually hurting us and the relationships around us.
I propose, through trial and error, even if it's awkward and painful, working out at an individual level what it would take to present the naked, beautiful truth, and do it. This will probably be different for everybody, but I truly believe it's worth it.
If we're looking for a resource that can help get started, my go-to is [Brené Brown's incredible TED Talk on vulnerability](https://www.ted.com/talks/brene_brown_the_power_of_vulnerability?language=en).
##### A Personal Example from Me, A Web Engineer
- **Negative Impact:** At one of my first jobs, a bug of mine was found in production. The engineer then proceeded to say
> I can't believe we pay for this shitty Indian code. What a mistake hiring such a junior developer
I went home crying, and eventually burned out and quit.
- **Positive Impact:** By being vulnerable and respectful, I was able create a team where we spoke freely and openly while creativity soared and people often said things like this. It was the best team I've ever been on to date.
This is not ego-stroking, but actual, measurable impact I had as a web engineer where people felt emotionally safe and well represented. Throughout my entire tenure there, nobody quit until I eventually did. Once I left, it wasn't long before others followed.
My whole goal is for you to be able to have a similar impact through the contents of this blog post.
#### 2. Social Impact
As [Sandra Ahlgrimm](https://twitter.com/sKriemhild)'s Twitter bio says, _we rise by lifting others_. Human beings have evolved to be where we are today because we're social creatures. Thousands of years ago, **isolation meant death**: if you're not part of the group, you're left alone against the wolves. This hasn't changed. Humanity falls apart when people are excluded, with [empirical evidence](https://www.frontiersin.org/articles/10.3389/fpsyt.2019.00042/full) that exclusion creates nazis, terrorists, and people like [Vladimir Putin](https://en.wikipedia.org/wiki/Vladimir_Putin).
Therefore, I'd consider this another import pillar of impact I'd expect web engineers (but also people in general lol) to pay attention to.
##### How Can We Grow It?
We rise by lifting others. Web engineers tend to be a relatively privileged echelon of society. Who are we lifting? Who can we lift? Who can we mentor? I'd suggest that if we want to grow our social impact, we keep our eyes and ears open, both inside our places of work, and outside using platforms like [Tupu.io](https://tupu.io), for those we can lift with us either through mentoring, pair programming, or even something as simple as _lending an ear_ (since we have two) and **listening to understand over listening to respond**. This can and does move mountains in the lives and careers of our peers.
##### A Personal Example from Me, A Web Engineer
- **As a Mentor:** I mean, you see the stuff from Twitter above, but here's more:
[Shruti](https://twitter.com/shrutibalasa) asked me to mentor her and I agreed. Today, she's soaring in success and her joy is my joy. I take great joy in having as much positive social impact as I do, and I grew it by siezing every opportunity to serve people, starting with 1-10 people in like 2015, to many more worldwide today.
- **As a Mentee:** [Lee. Freaking. Johnson.](https://twitter.com/leejohnsonMS) Hands down **the best manager I've ever had**. He has an energy about him that is extremely relaxed, kind, patient, and servant-hearted; so much so, I used to feel so free I'd even call him on Saturday for marriage advice and he'd take the time to give me some.
I was his report at [G2i](https://g2i.co/), one of the best places I've worked. His mentorship, combined with the executive coaching G2i got me, would go on to have me grow in emotional intelligence and benefit every relationship I have: personally, and professionally.
I am convinced this is Lee's joy, as he rises by lifting others.
This is an important note. For social impact, I feel like the motivation _has_ to be **their growth and our joy**. If we're not the kind of people who take joy in others' success, there may be more personal issues within us to work through in order for us to have a truly abundant human experience.
#### 3. Creative Impact
Human beings are idea machines. If you start a database company, it's only a matter of time until someone has an idea to create a drag-and-drop CSV import _because they can_. How we deal with these ideas is the creative impact we can have as web engineers. While this is a _technical topic_, the process of having an expressing an idea is a creative one. Thus, I'm focusing on the creative aspect of impact here.
When people have ideas, creative ideas, maybe unexpected ideas out of left field, it's usually motivated by positive intent to help improve a given situation. Even bad ideas of harming other people are usually enacted to benefit the idea's author. Ideas, more often than not, are a means of intentionally wanting to improve a circumstance.
If a teammate shows up with a creative idea and it's met with suspicion, apprehensiveness, uncertainty, or doubt, this will often have an adverse impact and [people will leave](https://www.youtube.com/watch?v=f60dheI4ARg&t=2m). Why? Because, at the root of it, an attempt to improve a circumstance is rejected. If a common occurrence, this sends people down a rabbit hole of _"what's the point? There's no use sharing this"_, which will ultimately drive a negative emotional state that leads to pessimism, and eventually burnout. Do you see now why emotional impact was at the top of the list?
When ideas are met with receptiveness and open collaboration, beautiful things happen, like [Vercel's beautiful landing page](https://vercel.com/workflow), [React](https://reactjs.org/) as a web framework, and [Yeezys](https://www.adidasyeezyboost.de/product-category/yeezy-foam-rnnr/) (okay, maybe subjective on beautiful). You get the idea.
##### How Can We Grow It
I feel like a lot of this just comes down to _"be aware you have an impact"_. If you'd like to see people's creativity explode where they come up with some of the [best](https://makefrontendshitagain.party/) and [unexpectedly awesome](https://blahaj.xyz/) [stuff](https://whitep4nth3r.live/) you've seen, **trust them**. Like [Steve Jobs](https://en.wikipedia.org/wiki/Steve_Jobs) says in the [video](https://www.youtube.com/watch?v=f60dheI4ARg), trust them, let them see it through, and help them bring their vision to life.
With this, it's probably best to also exercise caution. When presented with ideas, I often find myself asking "what's the worst that will happen if we go through with this?", and the answer is usually "it won't be that bad, let's go with it". If someone's big idea is to intentionally drop your production database though, probably some apprehensiveness might be wise. I'm not sure much less warrants it.
##### A Personal Example from Me, A Web Engineer
- I've worked at places where there's a committee and a 3-hour long discussion before any idea is implemented. I usually have not lasted very long at any of these companies. Obviously, names won't be named.
- I work with [Michael](https://twitter.com/msevestre) on [software](https://www.wapps-hemo.org/) that directly benefits people living with my disease [hemophilia](https://www.youtube.com/watch?v=TUIcTl9Hto4). The software we create together gives people, especially parents of children with the disease a tremendous amout of hope and peace of mind. We collaborate and bounce ideas around occasionally, and every idea is usually met with a resounding _"yes, and"_ and little to no doubt. If we have a bad idea (I once decided to use [RDS](https://aws.amazon.com/rds/) for a tiny database; terrible idea, very overkill), we still do it, learn from it, and iterate. **We embrace failure and controlled chaos to bring out the best in each other and our products**, and for this, I've considered joining Michael full-time on multiple occasions and am always eager to continue due to the creativity afforded to me.
#### 4. Technical Impact
Yes yes, this is at the bottom of the list because technology is usually binary and far simpler than human complex emotions and such. And also it's kind of obvious, no? Web engineers can have a technical impact? Of course, the _degree_ of technical impact is what I find so fascinating.
You've got people like [Sebastian Markbåge](https://twitter.com/sebmarkbage) who seem like these wise sages who sit in the clouds and [dream up powerful concurrent features](https://twitter.com/sebmarkbage/status/1142084171717730304) that revolutionize UI rendering, and _then_ you have the early-career 19 year old bootcamp grad whose impact is a company's landing page. Both impacts are not only meaningful, but _complementary_. Would Sebastian's concurrent features be useful if there was no demand for it from web engineers with lesser impact? Doubtful. It's a system where every cog is key.
##### How Can We Grow It
In my opinion, this is the easiest to grow out of these 4 pillars because it's a cycle of build break build break build break build break build break build break build break build break build break build break over time until you build and scale resilient systems that can then be modularized and used across virtually infinite parts of the web.
[Jeremy Keith](https://twitter.com/adactio) has an amazing talk about this kind of thing expressed as [pace layers](https://www.youtube.com/watch?v=ll1e8cYx3do). I feel like (this isn't a proven fact) **increasing technical impact is an inevitibility if there is enough desire**. Unlike the phenomenon where people stay emotionally ignorant for an entire lifetime of experiencing emotion, if you write enough code and want it to get better, it usually will. Why? Because it's binary rules. Do it enough, and your technical impact will grow. This is also how mine has.
##### A Personal Example from Me, A Web Engineer
I've been writing code 1/3 of my life or more. Here's the journey:
- started making landing pages, mostly HTML + CSS
- learned about [GraphQL](https://github.com/TejasQ/basically-fullstack-graphql) and [WebWorkers](https://github.com/TejasQ/basically-web-workers) because I felt incompetent, grew
- learned Postgres, PowerBI, a bit of (non GraphQL) API design, grew
- learned advanced TypeScript because I heard buzzwords and felt incompetent, grew
- learned RxJs because someone told me it's awesome, grew
- [was scared of React internals, so I though "let's try to create it from scratch", grew](https://www.youtube.com/watch?v=f2mMOiCSj5c&t=185s)
Honestly, my whole life is **incompetence-driven development** and here we are. Today, I'm the director of developer relations at [Xata](https://xata.io) with quite a bit of technical impact both in the workplace and out through [various](https://github.com/TejasQ/add-gitignore) [open source](https://github.com/xataio/screenshot) [stuff](https://github.com/contiamo/restful-react).
#### Conclusion
This was long. I guess this is why this didn't fit on iMessage. Hi Iris, hope this is what you wanted. Appreciate you. Peace!
---
### Goodbye Facebook
Published: 2021-01-11
URL: https://tej.as/blog/goodbye-facebook
Why I'm deleting Facebook, Instagram, and WhatsApp: FOMO, lost time, and engagement algorithms that radicalize people. I'm moving to Signal instead.
Why I'm deleting my Facebook, Instagram and WhatsApp accounts at the end of the month.
On the surface, [Facebook](https://facebook.com), [Instagram](https://instagram.com), and [WhatsApp](https://whatsapp.com) each have had a generally positive impact on my life: I've connected with friends in rich ways; I've seen meaningful updates from their lives while also being able to share mine. It undoubtedly brought us closer, while _also_ rekindling old friendships that would have otherwise grown stale. All for _"free"_!
I say _"free"_ because, while I don't pay for it with money, I pay for it with _my life_. Facebook's entire business model depends on _my engagement_ within their apps. Knowing this, they [have a reputation](https://www.thesun.co.uk/tech/12724230/facebook-lawsuit-instagram-spying) for actively collecting as much data on me as they can, and using it for their profit, selling targeted ads to advertisers. (This also includes Instagram)
While the shadiness of it all irked me a bit, I found it understandable: _it's capitalism_. They need to make money, and they can do so from whatever data they collect. Fine. I mean... [there's a scary amount of data on me](https://threatpost.com/twenty-something-asks-facebook-his-file-and-gets-it-all-1200-pages-121311/75994/), but whatever. I'm not a spy or anything so this is mostly OK.
#### Is it though?
Let's dig a little deeper.
##### FOMO
The more I find myself scrolling Instagram or similar, the more I feel like I'm missing out.
> Wow, Tony traveled to Estonia again! How beautiful! Man, I wish I could travel! Ugh!
While the reality is that **I'm taking a moment out of my mundane to look at someone's highlight reel**, there's a different story going on subconsciously. If I'm not careful, I often find myself feeling like my life isn't as good as everyone else's. Their grass looks waaaay greener.
Thing is, people tend to only post green grass. Fertilized with bullshit.
##### Too much to do, too little time
Based on conversations I have with _real people in real life_ (as opposed to on WhatsApp), there seems to be a prevailing idea that 24 hours just _isn't enough time in a day_ to get all the things done that I want to get done. I've heard this even _in a lockdown_ — where there's literally not much else to do than stay at home!
Now, while social media might not be the only cause of this constant chasing after our goals, the truth is this — **with every swipe through our timelines, we're trading a moment of our present for someone's past.** At some point, we've got to ask ourselves — is it worth it?
For me, it isn't.
##### MAKE AMERICA GREAT AGAIN
For platforms whose entire business model depends on user engagement, one super effective way to keep customers engaged and engagement high is similar to what we see in the film industry: _make 'em feel things_.
Using the data Facebook collects from me, it can (and does) show me a _lot_ of content I agree with. I am [pro mask](https://www.ucsf.edu/news/2020/06/417906/still-confused-about-masks-heres-science-behind-how-face-masks-prevent). They know this. They fill my timeline with people wearing masks.
_"Ah yes, \*clicks like\*"_ 👍
This makes me feel like I'm right.
Then, they show me [maskless Karens screaming about something or the other](https://www.facebook.com/133793163343849/videos/314666256452529). This makes me feel annoyed.
_"Ugh, \*clicks angry face reaction\*"_ 😡
And on and on the cycle goes — echoes echoing in the social media echo chamber — until I see more and more of what I believe to be true, and content that _ridicules the other side_.
Friends, **the them vs. us narrative is a goldmine for user engagement**. And Facebook knows it. They know it and use it to further the only goal for-profit companies ultimately care about: cold. hard. cash.
2020 (and unfortunately 2021) has shown us what inevitably becomes of this: we've been locked in our homes because of an ongoing pandemic, often with nothing else to do but _scroll, scroll, and scroll on social media some more_, each time seeing content that fuels a narrative where _we're right and **they're wrong**_.
> GUNS ARE MY RIGHT!
> MY FACE, MY CHOICE!
> PRESIDENT TRUMP WILL DESTROY THE CULT OF EVIL PEDOPHILES AND RESTORE UTOPIA!!!
Without social media, I don't see how [QAnon](https://en.wikipedia.org/wiki/QAnon) could have become what it has become.
Here' the bottom line: **it is exceedingly clear to me that social media, when driven by a capitalist agenda, is toxic and altogether dangerous, proving to be an echo chamber that catalyzes the radicalization of human beings to the detriment of society.**
The recent [attack on the US Capitol](https://en.wikipedia.org/wiki/2021_storming_of_the_United_States_Capitol) and the incredible momentum of the QAnon conspiracy theory is clear evidence of this.
And I want no part in it.
For this reason, effective January 31, I am deleting my Facebook, Instagram and WhatsApp accounts and taking all my data with me. Enough is enough.
Since I love connecting with people, I'll need to fill the void with something better. Stay tuned for a follow-up blog post about where I'm going instead.
Spoiler: [Signal](https://signal.org/en/download/) over WhatsApp.
---
### 2020 in Review: Still Thankful
Published: 2021-01-01
URL: https://tej.as/blog/2020-in-review
A month-by-month look back at my 2020: the friends, family, and small moments that made a pandemic year worth being thankful for.
A look back at the weirdest year I've lived yet.
What a year. An unprecedented novel coronavirus, all kinds of lockdowns, politics, racism, aaaahhhhhhh. Yet, here we are. On the other side of it, we made it! Here’s a short look back at _my_ 2020, highlighting one special moment from every month.
I hope this gives you hope and makes you smile at the joys we can share, even when the whole world is forced into distance.
#### January
This is [Robin Böhm](https://twitter.com/robinboehm). He helped organize a [Global Diversity CFP day](https://twitter.com/gdcfpday) back in January, where I was able to meet a ton of vibrant, interesting, and talented people in tech.
The collaborative energy in the room, along with the open, tolerant, and diverse atmosphere made this a definite highlight of January 2020.
Also lockdowns weren’t even a thing back then, so there’s that.
#### February
I GOT TO SEE MY PARENTS!!!!!!!! Thanks to an invitation from my dear friend [Jed Watson](https://twitter.com/jedwatson), I was able to visit Australia to speak at [ReactConf AU](https://www.youtube.com/watch?v=9xL0a6YJIQU).
While there, my parents decided to meet me in Australia to celebrate my mom’s birthday. It was an absolute delight to be able to spend my mom’s birthday with my immediate and [extended family](https://twitter.com/valparkie), speak at an amazing conference, and make a ton of new friends.
#### March
This is [Raden Dwikie Wicaksono Pranindityo Pinontoan](https://twitter.com/dwikster). One of my best friends in the whole world. We met _on a boat_ in Qatar when I was 18 and, to this day, have a friendship that knows no borders. I love Dwikie and was extremely thankful for the opportunity to hang out with him in transit on my way back from Australia.
#### April
Hannah is an extremely creative and talented artist in Berlin. One fine day in April, when her internet wouldn’t let her complete an upload, she came over to our house with a USB stick and we finished her upload here.
It was great to catch up with her, even in the middle of the first lockdown.
#### May
In this photo are two of the most talented engineers I’ve ever worked with in my entire career, but more importantly, a couple of my really good friends in Berlin.
[Fabien](https://twitter.com/fabien0102), [Mischa](https://twitter.com/mpotomin) and I worked together back when I worked at [Contiamo](https://contiamo.com) and, they were so much fun that we’ve stayed in touch ever since. We schedule time now and then to cowork with each other and get lunch and things. It is _very_ life giving.
#### June
We spent a weekend glamping in the middle of nowhere with our good friends Shaw and Katharina from [The Limelight Collective](https://limelightcollective.com). They've been good friends of ours for years and pour so much valuable wisdom and joy into our lives.
It was an extremely beautiful and enriching time we spent, lost somewhere out in the German countryside, away from the busy city vibes.
Fear and anxiety surrounding the pandemic seemed nonexistent so far away from the media, but we were still cautious and vigilant.
#### July
MY HOMIES. There’s a bridge at [Rathaus Schöneberg](https://www.berlin.de/sehenswuerdigkeiten/3560314-3558930-rathaus-schoeneberg.html) where I get together with these lads. We’ll talk about the others later, but this one’s about my boy G (dude to my right).
G, not to be confused with _the moon emoji_ 🌚, loves cooking and has a wealth of information about pretty much any topic you can think of. Hanging out with G this year was a total highlight because he can relate to pretty much anything, and the food he cooks always hits the spot.
#### August
My wife. The love of my life and the most beautiful person I’ve ever met. We got married last August, and celebrated a year of marriage this August in Vienna. We saw sights, ate local food, and had a photoshoot to make it the perfect weekend anniversary getaway.
I am very, very thankful to have been able to celebrate our wedding anniversary the way we did this year, despite the pandemic.
#### September
[Johannes. Freaking. Schickling.](https://twitter.com/schickling) Dude founded [GraphCool](https://graph.cool), then [Prisma](https://prisma.io), and a bunch of cool things, but beyond that, a lovely, kind, smart, reflective friend and brother whom I genuinely enjoy interacting with.
We got sushi together and talked about life and growth and [Jed Watson](https://twitter.com/jedwatson) and software and it’s an interaction that left such a positive impact on me that I will not soon forget.
Johannes and I especially bonded over the gift of _coaching_ and understanding ourselves for the joy and profit of those around us.
#### October
ADIWHOMST. As in, Adrian. Adrian is a volunteer video person who is SO FREAKING GIFTED with live-streaming things, it’s nuts.
I had the privilege of volunteering with him at a local church here to help with live streaming. His sense of humor and ridiculous ability to quickly grasp things was a blessing to have experienced this year.
#### November
KAPLIGNAT. This dude is a fitness freak who’s pretty much always ON AND about to GET IT. **I’M KAPLI UNNNGGFHH!!**
I met Kapli this year as he finished up university and got a job. Watching him grow from one blessing to the next was a definite highlight of this year.
He also got me into running at the end of November and now I run 10K every other day, something I’ll probably be eternally thankful for.
I LOVE RUNNING. If you'd like to enjoy running too, maybe [check out this playlist I curate](https://open.spotify.com/playlist/1tum32lT4hhiUCJEO7cGAG?si=H8FZSsO_Q5Cqyytd4xzKIg) for cool songs to run to. I use it often and comfortably run 10K while grooving to the songs.
#### December
It was an incredible blessing this year, in the middle of a pandemic, to be able to celebrate Christmas with people I love and hold dear.
In this picture is my wife, her family, and my brother JB: my brother though not by birth, but by choice. We’ve been friends since we were children in Qatar, through today in Germany. I am/we are deeply thankful to have been able to spend Christmas surrounded by family.
#### Summing it up
While 2020 was generally not the best year, I am thankful for the people and the relationships with them that I got to enjoy throughout the year: new and old alike.
And yes, I earned more money in 2020 than I did in 2019, I am physically stronger in 2020 than in 2019, I have a whole new league of skills in 2020 than I did in 2019, but ultimately, I believe it’s the people we meet and the experiences we have that make us richer as humans. In the words of [Jon Foreman](https://twitter.com/jonforeman), [I want to be rich in memories, not money, our love is our inheritance, honey.](https://m.youtube.com/watch?v=sVG6C3iuCsQ)
With that, I’d call _my_ 2020, despite the circumstances, a year that I am thankful for as I eagerly peer into 2021.
---
### Why I Don't Prefer Speaking at Remote Conferences
Published: 2020-03-16
URL: https://tej.as/blog/why-i-do-not-prefer-speaking-at-remote-conferences
Why I'd rather not speak at virtual conferences during COVID-19: the hallway conversations are the point, and video calls lose that connection.
I have spoken at a number of international conferences. In the wake of COVID-19 and the novel coronavirus (SARS-CoV-2),
this blog post outlines my thoughts on remote speaking engagements held over video-conferencing platforms.
I've got to start by saying, I love you.
You, the person reading this.
We may have never met. You may not even know who I am. Yet, it's _true_. I love and care for your well being. I want you
to succeed. I want you to get the most out of life. I want to see you flourish. I want it to be as though the most
perfect version of your life was brought down from Heaven (if you're so inclined) to Earth.
#### Conferences
I travel a lot. I speak at a lot of conferences [all](https://www.youtube.com/watch?v=9jNu1k4Bwa8)
[over](https://www.youtube.com/watch?v=ZsBW4S8hYMU) [the world](https://www.youtube.com/watch?v=9xL0a6YJIQU) about
[technology](https://www.youtube.com/watch?v=f2mMOiCSj5c&feature=youtu.be),
[management](https://www.youtube.com/watch?v=rdiUFma8QJU), [health](https://www.youtube.com/watch?v=TUIcTl9Hto4) and
other topics. At the time of writing, I have around 20 speaking engagements planned in about 16 different cities across
the globe. I had every intention to speak at all of them until
[something so small](https://www.who.int/emergencies/diseases/novel-coronavirus-2019) that we can't even _see_ started
to disrupt the world and shut down travel, education, and economy.
🧐 2019 in review, geographically.
🚩12 countries 🚶🏾 705km walked 🚲 675km bicycled 🚞 4,092km on trains/cars
Total travel distance: 62,007km, or 🌏 1.5x around the Earth
Making hard calls, conference organizers are opting to do the [right thing](https://staythefuckhome.com/) in order to
prevent the spread of this novel coronavirus: from outright cancelling conferences for the foreseeable future, to moving
to a _remote model_ where speakers present via video conferencing.
> So Tejas, would you speak at {{insert name of remote conference}}?
After asking around on Twitter to see what people generally think, there are a number of differing opinions on the
matter. All valid, all good.
As an org/speaker I just don’t feel the point of virtual events. It kinda degrades the experience to a plain video, where you can’t meet the community itself. The stage, the excitement is different. The personal connection is not there.
#### I think it's time to voice mine.
Given how I feel about you from the start of this post (spoiler alert: I love you), you must know, what motivates me to
travel thousands of miles between [🇦🇺 New South Wales](https://www.youtube.com/watch?v=9xL0a6YJIQU) and
[🇺🇸 Utah](https://www.youtube.com/watch?v=71pKrWWOE0k), is really only love. It's not exposure, it's not money, it's
not applause. It's love.
Conference talks are nice, sharing knowledge is definitely important, but my favorite thing about it all is **the
conversation**. Particularly, the conversations that we're able to have behind the scenes, over coffee ☕️, or just
hanging back at the venue; topics ranging from hope, webpack, pair programming, life, and TypeScript.
I really enjoyed hearing [Deshi](https://twitter.com/deshiknaves)'s story of how he grew up in third-culture
circumstances as I did, or [Jan](https://twitter.com/jansche)'s incredible story of
[how he turned himself into a cyborg](https://www.youtube.com/watch?v=Sm9BjqfgPNM) for an optimal quality of life.
Whether you want to admit it or not, there's something of a human soul in and around these personal interactions that is
somehow lost on video calls. I am here for this personal connection more than much else.
For this reason, I cannot, in good conscience, _easily_ speak at remote events. To me, it seems like a short sell: my
face on a screen for a few minutes sharing mere knowledge, and then abandoning the crowd or engaging in toneless textual
conversation.
My hope is that in terms of implementation, organisers might get creative and crack the secret sauce on remote
conferences, making things more personal and cultivating a real connection. This seems like quite the challenge. I've
never seen the same type of human connection on a digital medium _ever_ so far.
#### My Apologies
With all this said, I must apologize, in the wake of COVID-19, I am not willing to speak at a conference on a
video-conferencing basis. This **does not mean** that I am not open to _any_ remote speaking engagements over
video-conferencing ever. I will evaluate each engagement on a case-by-case basis.
Conversations will not be cancelled. Relationships will not be cancelled. Love will not be cancelled. Songs will not be cancelled. Reading will not be cancelled. Self-care will not be cancelled. Hope will not be cancelled.
I really look forward to this pandemic being over and things going back to normal, where physical, _real_ human faces,
voices, stories, and experiences are able to be exchanged once again. I truly believe these interactions make all
parties involved far richer than they were prior.
---
### Why I Think Remote Work is Incredible
Published: 2020-01-27
URL: https://tej.as/blog/why-i-think-remote-work-is-incredible
Two months into my first fully remote job, I compare it with office life: deeper focus, better health, and the sleep rhythm trap I had to fix.
Two months ago, I started a new job at [G2i](https://g2i.co/) that is fully remote. Here’s why I think working from home is incredible.
#### Prior Art
In my previous on-site desk jobs, I’ve often struggled with self care: I rarely had the chance to get enough sleep, and when I did, it was seldom stress-free. Morning meetings would ruin the night before, and location-sensitive events would interrupt the regular working day. The result? Less-than-happy Tejas.
#### On-site work in a nutshell
To put it succinctly, my experience working on-site looked a lot like this:
- Go to bed stressing out about waking up on time and making the morning standup
- Can’t sleep because I REALLY WANT TO FALL ASLEEP right now
- Wake up unrested, continue to stress out about being on time
- Get to the office on time to find out the morning meeting moved
- Ok, at least there’s free coffee ☕️
- Start coding
- Ah, it’s time for the (probably unneeded) meeting
- _talk talk talk_
- Okay where was I
- Start coding
- Oh it’s time for lunch
- Eat
- Coffee
- Yes, back to work 💪🏾
- Ah, another meeting
- What?! It’s 4pm already?!
- Okay, time to code
- Oh. Planning meeting. Right.
- Hm. 6pm and I didn’t get as deep as I wanted to. 😕
- K home time
- want to gym but I’m tired
- hi wife how are you
- start stressing out about going to bed on time to wake up on time
- repeat
I should say that this isn’t targeted to one specific employer or work environment. This is pretty much the pattern I’ve seen in most working environments that were bound to an office location.
Sure, there weren't planning meetings _every day_, and some days, I was able to get a satisfying amount of work done, but by and large, interruptions happened far more than I would have preferred and finding focus was often quite challenging.
#### Remote work in a nutshell
What does remote work look like? How does it compare? This is what I’ve experienced over the last 2 months:
- Wake up, all my coworkers are asleep.
- Make coffee just the way I like it at home. ☕️😌
- Focused, uninterrupted work because it’s like 4am where most of my coworkers are.
- OK things are green. ✅ Time to commit and push. 🚀
- Hm. It’s beautiful outside. Let’s go to the gym. 💪🏾🚴🏾♂️
- Ok, back to work.
- Focused, quality work time.
- Around 5pm, people have woken up and are working. It's time for meetings!
- Finish the day talking to people I appreciate after feeling like I contributed meaningful code.
- Encourage some of them to go about their day well.
- Go to bed satisfied.
- Repeat.
To be clear, I find meetings _good_, especially pair programming and mentorship. I especially appreciate them because they bring us _together_ and give us a shared sense of responsibility. What I find a little hard are _spontaneous_ meetings: I've often worked in open offices and got summoned quite a lot either directly (hey there!) or indirectly (people talking and my ears following).
_"Just get noise-cancelling headphones"_ doesn't help in this case because there are more environmental factors than auditory ones.
#### Remote work: the not-so-incredible parts
While it's been mostly positives, I've also struggled with remote work in some places. For example,
- hmmm I bet I can do this
- _get focused_
- _get in the zone_
- it's 3am?!
- sleep
- wake up at noon
- struggle to sleep at 10pm or a more "reasonable" time
- lose sight of a normal lifestyle
- insomnia
- (unhealthy) weight gain
- etc.
It all centers around losing some type of rhythm. It seems to me we have an internal clock that _reeeeeally_ doesn't like to be disturbed. Kind of like how taking long flights _wrecks_ us even though we don't do much but sit around on a plane ✈️ for 14 hours.
To combat this, I've resolved to wake up at 7am every day, no matter what. My routine for the past few days has been:
- wake up at 7am
- work out
- start work around 10am
- stop work around 7pm
- enjoy my evening
- go to bed and chill with netflix or something around 9pm
- fall asleep at 11pm
- repeat
With this, my body seems to be happy and I get the benefits of regular daily exercise, while also meeting my work goals. This appears to be some type of golden ratio that I've found recently. Things are more or less _pretty freaking great_ these days.
Do you have any other tips for me? [Let me know!](https://twitter.com/tejask)
#### It’s not binary
I must add — all of what I've said is speaking only of _my experience_ (and my experience _so far_) with remote work. I have never worked a remote job before in my life and these are preliminary findings. I'm sure there's a lot more nuance to it that I have yet to discover.
I’m sure it’s not entirely binary, but a spectrum of tradeoffs, as are most things in life.
What do you think? Do you agree with me? Do you disagree? What was your experience like? I’d love to hear your perspective. Let me know on [twitter](https://twitter.com/tejask).
---
### 5 things I love about my website (and how they're built)
Published: 2020-01-20
URL: https://tej.as/blog/5-things-i-love-about-my-website
I walk through five things I love about my website, including automatic dark mode, Next.js server rendering, whimsy, and GitHub as my backend.
This site is home to certain tech and web dev goodies that make me very happy. This post is about what they are, and how they work.
#### 1. It follows light/dark mode based on your preference
While most websites these days come with some type of dark/light mode toggle switch, I serve you content based on the setting that you've set on your system: if you use your phone/computer in dark mode, you get dark mode. If you use it in light mode, you get light mode.

This is made possible by the powerful [`prefers-color-scheme` media query in CSS](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme). [Here's a code sample that makes that possible](https://github.com/TejasQ/tejaskumar.com/blob/d96da38f6fbb32c4b1be760d95d5226f4f482fe7/components/BlogPost.tsx#L49-L64).
#### 2. It is a dream to develop
This website is built with [React](https://reactjs.org/) and [ZEIT](https://zeit.co/)'s popular framework [Next.js](https://nextjs.org/), which honestly is such a dream to work with. 😍 Next.js' opinionated-ness as a framework takes a lot of the mental overhead of structuring things away from me and, in many ways, _"just works"_. What's even better, is it's all magically ✨ server-rendered out-of-the-box, without extra work from me so search engines can pick it up and people can find it!

##### Server Rendering
What is server rendering? It's when a site is _"rendered"_ (think, _drawn_) on the server and then delivered to a browser. This way, you get the content _immediately_ from a _server_. This is a bit different than how many websites work on the web today. If you've ever opened up a website and seen spinners immediately before your content, it's quite likely that it was _not_ server rendered: it was _"drawn"_ (or _rendered_) in your browser (AKA the client, AKA _not_ a server).
The benefit of server-rendering for me is:
- You get your content immediately, instead of spinners
- Search engines can read it easier
- No jumpy and possibly unpredictable behavior: if you load a non-server-rendered-spinner-driven website on a train, or somewhere with intermittent internet, the user experience could end up in some strange, unpredictable state. This risk doesn't quite exist with server rendering.
Next.js gives me all of this _for free_, without having to do anything.
##### Deployment
IT GETS BETTER! Using another product from ZEIT called `now`, I'm able to upload this site to the internet _magically_ by running _one_ command. And _just like that_, tejaskumar.com is up-to-date with the latest blog post and can scale infinitely and handle billions of readers at any given time.
What a time to be alive. 😍
#### 3. Whimsy
I've tried to keep this website playful and _whimsical_, with the [silly photos of me](https://github.com/TejasQ/tejaskumar.com/blob/master/public/tejass/13.png) and [odd nicknames](https://github.com/TejasQ/tejaskumar.com/blob/master/util/tej-variants.ts). I feel like we can all sometimes get too serious. I'd like my little corner of the internet to be fun and not so [_langweilig_](https://www.google.com/search?rlz=1C5CHFA_enDE756DE756&ei=6PMlXt-LAoH6kwXZp5zoBQ&q=langweilig+in+english).
| Real Mac Dock | My Dock |
| -------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
|  |  |
I even created a mouseover effect to mimic the [macOS dock](https://support.apple.com/guide/mac-help/dock-mh35859/mac) in CSS just for fun because _why not_. Let's make it playful and fun. If you have ideas for ways we can continue to boost the whimsy of this website, [let me know on twitter](https://twitter.com/tejask) and it could be a cool collaboration between us! 😄
Working on a <ConfettiGeyser> component for my React Europe Whimsy Workshop :D this one'll be a ton of fun to build. pic.twitter.com/JlTMUWaxad
I really appreciate [Josh Comeau](https://www.joshwcomeau.com/) and [the things he creates](https://tinkersynth.com/) because they're creative and beautiful. It's this kind of flair/vibe that I appreciate on the web.
#### 4. GitHub is my backend
I've had a number of conversations that go like this:
> I'm starting a blog. What stack should I choose? What should my backend be? 🤔
I've had this conversation with myself often. As with most things, I'd like to employ the KISS (Keep It Simple and Spectacular) principle.
I'm a huge fan of the [JAMStack](https://jamstack.org/): the **JavaScript**, **APIs**, **Markup** stack. That's entirely how this site works:
- the interactivity of this page is provided by **JavaScript**,
- via [GitHub's GraphQL **API**](https://github.com/TejasQ/tejaskumar.com/blob/111ae18633d2fd16aab9fdfaf9ccdba127d86302/util/getInitialBlogPosts.ts#L10), it retrieves [blog posts contained in this repo](https://github.com/TejasQ/tejaskumar.com/tree/master/blog) written in [markdown](https://en.wikipedia.org/wiki/Markdown), and finally
- renders [markup](https://en.wikipedia.org/wiki/Markup_language) in your browser via Next.js.
There are a number of different backends I could use. I could even go _"backendless"_ and have everything be statically generated using [Gatsby](https://www.gatsbyjs.org/) or similar. Why do I choose a GitHub backend? I'm glad you asked.
1. **The source code lives on GitHub.** Like... it's _there_. A database is essentially a folder containing files and things in a certain structure. There's no real reason my [blog folder](https://github.com/TejasQ/tejaskumar.com/tree/master/blog) couldn't be a database. It seems like the simplest solution. There _are_ limitations, but they don't matter much to me.
2. **Static build time.** This blog has 3 posts on it at the time of writing. 3. Three. T h r e e. Drei. That's not a lot. But, when building something, I think of scenarios where it could have 3,000,000.
Curious: what are y'all's thoughts on using a static site generator (maybe like @gatsbyjs?) at scale?
Say for example I have a project with 150k-200k articles.
What are your thoughts, concerns, etc. about this in terms of build time and deployment?
In this case, a static site _could theoretically_ take a [looooooong time](https://twitter.com/monicalent/status/1128030476780937217) to build, which could be problematic. **This is the reason I have not chosen a static site generator.** I love client/server because it scales better and allows more clearly defined, non-blocking boundaries between components.
3. **Enforced transferrable writing.** Realistically, GitHub has a rate limit. I think it caps out at 5K requests per hour (please don't [DDoS](https://www.cloudflare.com/learning/ddos/what-is-a-ddos-attack/) me). At some point, I might have to move my blog post writings out of this GitHub repository and somewhere else. How hard will this migration be?
Copy. Paste.
It's _all text_. Literally, it's [_all markdown_](https://github.com/TejasQ/tejaskumar.com/blob/master/blog/1579543554591__5-things-i-love-about-my-website.md). The images are externally hosted and can be polyfilled, but besides that, it's text. I can copy these files to any other backend that supports, well, _text_, and nobody will be able to tell anything changed. Having GitHub as my API enforces me writing this way (transferably) and I love it!
In case I outgrow the GitHub backend, I'd consider [Fauna](https://fauna.com/) or similar as a DB.
It supports text.
#### 5. It is community driven
Did Tejas build this site? Kind of. Tejas built this with [these wonderful people](https://github.com/TejasQ/tejaskumar.com/graphs/contributors). It's a team effort! This website is community driven.
📣 I have some stuff I want to add to my website.
I would like to help underrep’d people in tech and/or newcomers. Let’s build these together! 🙌🏾
1) 🍔 Burger menu for mobile 2) 🎙 Talks section
👨🏾💻 If you want to learn to code, please reach out.
I also have a list of developers I plan to collaborate with in the near future. This list is composed of people with varying backgrounds (beginners through experts) and usually from underrepresented groups in tech. It's an honor and a privilege to use my little corner of the web as a platform to help others in the tech industry as it grows increasingly beautiful each day.
Ah, writing all this reminds me how much I have to be thankful for.
_brb_
---
### What I Learned From Getting Pushed Off My Bicycle
Published: 2020-01-15
URL: https://tej.as/blog/what-i-learned-from-getting-pushed-off-my-bicycle
A blog post about things I learned after being randomly attacked on the streets of Berlin when a stranger pushed me off my bicycle.
This post is about things I learned after being randomly attacked on the streets of Berlin when a stranger pushed me off my bicycle.
Last week, [I tweeted](https://twitter.com/tejask/status/1214970326695710721) about being at my end when someone
pushed me off my bicycle. I was _genuinely confused_ because I've never experienced such an act of random aggression.
This, coupled with my mental issues, led me down a depressive spiral wherein I questioned life, humanity, and our
behaviors. This blog post aims to summarize what I've found.
#### The Context
For context, here are a few things you need to know about me:
- I have the most severe kind of [hemophilia](https://www.youtube.com/watch?v=BoXBuJSURTI).
- Because of this, I spent the first 23 years of my life in a very volatile state between life and death:
- I would be healthy one day, and some insignificant, unnoticeable event (like _opening a door_) would cause me to
bleed internally.
- I would notice hours later that I had lost a significant amount of blood and _nearly die_.
- I would then, fueled by a lot of adrenaline, **_hustle_** to the emergency hospital for urgent care.
- I sometimes would spend weeks admitted in the hospital thereafter.
- I am not cured, I just have better healthcare. If I don't take my medicine every 48 hours, the same things can happen
today.
- These mental gymnastics of swinging between _"OMG IM DYING!!!"_ and _"heh, life is pretty great 👍🏾"_ have given me
prominent [bipolar disorder](https://en.wikipedia.org/wiki/Bipolar_disorder).
- The nearly dying on and off has given me
[PTSD](https://www.mayoclinic.org/diseases-conditions/post-traumatic-stress-disorder/symptoms-causes/syc-20355967). I
sometimes panic and think I'm dying even though I'm more or less fine nowadays.
#### The Incident
I had woken up depressed and had a generally crappy day. This is not atypical for me since I have bipolar disorder. I
didn't feel like it, but I dragged myself to German class (it's one of my
[goals](https://twitter.com/tejask/status/1212085975050047490) for this year). On my way back, as I'm casually
riding my bicycle 🚴🏾♂️, someone walking alongside me on the street stretched out his arms and pushed me _off my bicycle_.
I fell. When I got up, I looked at him and said _"what's the problem?!"_.
Turns out, it was a pedestrian (zebra) crossing that I had not seen.
- The zebra stripes were yellow on a black asphalt road,
- it was night time, and
- the contrast ratio between the yellow street light and the zebra stripes wasn't ideal.
[Pay attention to a11y](https://www.youtube.com/watch?v=04DOp1F9Od4), y'all!
##### It Was My Fault
The person who pushed me off my bicycle is _"in the right"_ in this case. **It was my fault.** I should have stopped and
let him pass. Perhaps he overreacted a bit, but most people who know me know I overreact a few times myself. It's part
of the human experience.
He also didn't know I have severe hemophilia. He probably would have exercised a little more restraint if he did.
#### The Lessons
In retrospect, all of this makes perfect sense to me. In the moment though, it sent me down an exponentially darker and
more depressive emotional rabbit 🐇 hole than I was already on. I woke up depressed, this made it worse.
> "why are people like this?" "why is this city so evil?" "why do I overreact just like this?" "are we all just lost and
> angry"
I wonder if you can relate.
My good friend Dave 🧔🏻 says something I really appreciate often:
> We often want the mountaintop experiences in life, where everything is beautiful and where we're _happy_, > experiencing accomplishment from the climb and the breathtaking beauty on top of the mountain 🏔.
>
> What we keep forgetting though, is that nothing can really live on mountaintops: it's all dead up there.
>
> Life and growth happens in the valleys.
I love this. As someone who has spent an extraordinary amount of time in the valleys (you know,
[from _nearly dying_ all the time](#the-context)), I agree. People often say to me _"oh dear, you're depressed, that's
so sad! I hope it doesn't last long and you feel happy again soon!"_. I hear where they're coming from, _and_ I
appreciate it, but I'll feel happy again _when I feel happy_.
For me, it all happens in waves. Sometimes I'm happy, sometimes I'm not, but when I'm in a depressive state, it needn't
be _bad_, [it serves me well](https://www.youtube.com/watch?v=TUIcTl9Hto4&t=8m40s)! When I'm happy, I'm too busy living
in the moment to reflect and re-evaluate the world and my place in it, I just want to have a good time. It's in the
depressive episodes, in the valleys, where I go looking for hope, truth, meaning, and purpose, and where I find it.
#### The Outcome
Here's what came out of my depressive episode, triggered by my hemophilic-bipolar disorder, and amplified by a random
dude who threw me off my bike:
0. **I should start a blog to collect my thoughts** and share things LOL
1. **I am _thankful_ to have a community of friends who care for my well being.** I have received
[so](https://twitter.com/gethackteam/status/1215170952876756992)
[many](https://twitter.com/hdjirdeh/status/1215004323253555206)
[messages](https://twitter.com/manjula_dube/status/1214997686102810624) from friends and family expressing a ~genuine
concern~ _love_ 🔥 for me. _Little old me! The sick nobody! That odd hemophilia dude!_ I'd never want to take this
incredible gift of community for granted. From the bottom of my heart, y'all, I am **_thankful_** to and _for_ y'all.
❤️
2. **People are hurting.** Would the d00d have pushed me off my bike if he was happy and content with the world?
[Studies say most likely no](https://www.ncbi.nlm.nih.gov/pubmed/29279219). I wager that the reason we have things
that make us cringe with disgust in the world today: gatekeeping, racism, mansplaining, etc. is because people are
hurting.
People are hurting from feeling like they're not _clever_ enough so they gatekeep using esoteric language that
inflates the ego, because _they need it_ to feel important and ease the pain. I sometimes _mansplain_ (to my shame!)
because I want people to think I'm smart. I don't do it to put people down, but rather to help me bring myself up!
It's approval seeking because on some deep level, I feel inadequate and it _terrifies_ me.
The (counterfeit) solution? Pretend. Fake it 'til you make it, no matter the cost.
The _actual_ solution? Truth.
I publicly acknowlege that **I fail** in one way or another, either technically or physically or whatever. I'm a
flawed human. It is what it is. I'm trying to improve, but it's kind of a
_[gradient descent](https://ml-cheatsheet.readthedocs.io/en/latest/gradient_descent.html)_ kind of thing. There will
be error. It's unavoidable and that is okay.
3. **I have a mission.** I'm convinced the world is broken. You're welcome to disagree with me but I mean...
[look](https://twitter.com/Silvie_Reichert/status/1216822288076681220)
[around](https://twitter.com/chrstnplcnnn/status/1216376212823724033). And so, while I can occasionally get
sidetracked with my depression and bipolar and PTSD and bleeding to death or whatever, there are people around me
facing just as much hardship as I am.
As one who has suffered possibly far more than most can imagine, my mission is clear: _restoration_.
I want to help put the pieces back together however/wherever/whenever I am able. What a world it would be if the dude
who threw me off my bike's hurt was healed. What if he would then go on to help others heal, and they'd help others
and those people would help even _MOAR PEOPLE_ and exponential healing and wholeness would cascade through all that
we know.
This is kind of what I dreamed of in my depression.
[I think we can do it.](https://twitter.com/tejask/status/1183038225717313538)
It's the mindset of "I think I can, I think I can" that ultimately makes you succeed. (3/8)
Better go get started.
---
### Hello World
Published: 2020-01-13
URL: https://tej.as/blog/hello-world
My first post here: a quick hello world I published to make sure the blog works. The real writing starts after this one.
hi just testing, lewl
---
## What people say
Real posts from other people, quoted as they were written.
### On his talks
- Josh W. Comeau (@JoshWComeau): "I’ve said it before, but @tejaskumar_ has the most amazing energy when he speaks (and also in real life!). Amazing talk as usual about the tradeoffs React makes and why they’re really pretty good compromises."
- Mark Dalgleish (@markdalgleish): ".@tejaskumar_ is such a charismatic speaker."
- David K 🎹 (@davidkpiano): "Whenever @tejaskumar_ live codes in a presentation, it's absolutely stunning. Feels like he can turn almost anything into a 2-minute demo."
- Cassidy (@cassidoo): "This talk by @tejaskumar_ is so inspiring. He’s got hemophilia, and he built an app that has a data visualization of the half life of his medicine! #DinoJS"
- Francesco (@FrancescoCiull4): "I met Tejas Kumar !!!! An amazing speaker and a super friendly, funny person in real life! Thanks for wearing my sticker @tejaskumar_!!"
- swyx (@swyx): "dude. i wish i had your energy, technical, and speaking skills! I dont know how you do it."
### On the podcast
- Josh Goldberg 💖 (@JoshuaKGoldberg): "There have been too many people on ConTejas recently I really really want to hear from: @ladyleet, @alexnmoldovan, @MichelleBakels, @gabe_g2i... ugh. I'm getting FOMO from the last 2 weeks of just one podcast. You did this to me @tejaskumar_ :("
- Michael Wheatfill (@mwheatfill): "I love the long format Tejas. It kind of reminds me of the Lex Friedman of web dev focused podcasts. The thoughtful questions and depth of answers was awesome to experience."
- Guillermo Rauch (@rauchg): "Had a great podcast with @tejaskumar_ on: ◆ the physics of networks ◆ why move away from edge rendering ◆ fast vs slow global data transfer ◆ latency numbers every engineer (@jeffdean) and web engineer (@cramforce) should know ◆ RSC, PPR & Streaming Dropping soon!"
- Shriram Balaji (@shrirambalaji): "highly recommend watching this video, if you haven’t, definitely needs more views! https://youtu.be/G-Js3CcD000?si=ufrOBE58U9q3ISSh @tejaskumar_ has the ability to break things down calmly, and explain how computers work - from subatomic particles, electricity, hardware, software, firmware to servers and more."
- Yoav Ganbar (🥑 Builder.io/Qwik) (@HamatoYogi): "Just finished listening to @tejaskumar_'s new podcast. The first one is jam packed with tons of knowledge and great insights on what's going on in the web and software in general. Awesome to hear him taking time to talk about @QwikDev especially 🙂 Highly recommend a listen 👌🏾"
- Atila Fassina (@AtilaFassina): "This was one of the most fun conversations I’ve had in a long time! @tejaskumar_ is a great podcast host and an even better conversation partner!! ❤️"
### On the book
- Una 🇺🇦 (@Una): "I think I need to read @tejaskumar_'s new book 😅 Great talk about optimizing React w/useDefferedValue and useTransition at #ReactParis"
- Michelle Bakels (@MichelleBakels): "I got dropped into web dev via corporate mandate 6 yrs ago, so I love that Fluent React begins by outlining the ecosystem of the time, something I was largely disconnected from. This context has helped me appreciate everything I’ve learned so much more. @tejaskumar_ 🙏"
- Daniel Afonso (@danieljcafonso): "Fluent React is #1 best selling. As it should be 😁"
- Amanda 🌿 (@hey_amandam): "V excited for this. As someone who has used React for years but never as my only focus, it will be interesting to see how this deepens knowledge for me I'm a huge fan of @tejaskumar_ as a person and enjoy his teaching style so I expect to feel more of that same vibe in this book"
- Nisarg Parikh (@nisargparikh90): "Fluent React by @tejaskumar_ is an amazing book. Learning React by reading a book is a completely new experience."
- Josh W. Comeau (@JoshWComeau): "Tejas previewed some of his book in his React Paris talk and it's seriously great. Goes deep into advanced topics. Just picked up a copy for myself 😄"
### On working with him
- Kent C. Dodds 🌌 (@kentcdodds): "I love meeting up with @tejaskumar_ at conferences. We always try to find a special time to have a little devotional and prayer meeting together. He's wonderful!"
- Aditya Oberai (@adityaoberai1): "Had an awesome time catching up with @tejaskumar_ at the office today 😄 Y'all should go follow him if you haven't already 🔥"
- Big Sheddy 🦅 (@coder_blvck): "The amount of things I’ve learned from @tejaskumar_ on DevRel in the past few months are gold, you don’t get this anywhere."
- Rachel Nabors (they/them) (@rachelnabors): "I love @tejaskumar_"
- Shruti Balasa (@shrutibalasa): "Grabbed an opportunity to meet the super inspiring @tejaskumar_ today. The one message that stuck with me from his journey - “Life has plans for you”. Been following him for more than two years, I feel so thankful to have met him today!, PS: Forgot to click a selfie 😭"
- Shruti Kapoor (@shrutikapoor08): "It is always a soul-filling chat with @tejaskumar_! I am grateful to have him on the fireside chat earlier this December, discussing the human side of tech and devrel, along with his daily life-threatening struggles. Tejas, your unwavering perseverance is a beacon of inspiration"