It’s okay to feel small: AI, open source, and learning again
I had not written on this blog in a long time.
To be honest, this website was born a few years ago during a period when I was playing with a bunch of new things: Midjourney, ChatGPT, Astro, Storyblok.
The dinosaurs you see around here were made with Midjourney.
Then I discovered that ChatGPT was pretty good at fixing my messy writing, and that gave me a small push. After work, even when I was tired, I could still spend a few minutes experimenting, writing, trying ideas, putting pieces together.
Astro got me really excited. I still think it is amazing: simple, powerful, and quite close to the kind of web I like. Storyblok was probably a bit too much for a blog where I post once in a blue moon. I could probably have put everything in Markdown and lived happily ever after. But that is fine. It was part of the experiment.
The original idea was to write articles about things I was learning, maybe with some interactive components inside them, using Astro and React. I have always liked learning by doing, seeing the result immediately, touching what I am studying with my hands.
Maybe that is also why I got into programming when I was a kid.
You write something, press enter, and something happens.
That feeling has always felt kind of absurd to me.
And today, with AI tools, that feeling has become almost violent.
You have an idea, you describe it, you iterate a bit, and after a few minutes you have something that moves. Maybe it is ugly, maybe it is fragile, maybe it is full of problems. But it exists. It is there. You can see it.
It is crazy.
And that is exactly where I wanted to start.
Because this year has been strange for me.
A year between excitement and FOMO
This year I kept alternating between moments of huge excitement and moments where I felt completely buried under FOMO.
If you open X, Threads, or LinkedIn, every day someone is announcing the death of something.
Frontend is dead.
Coding is dead.
Junior developers are dead.
Studying is dead.
Everything is dead.
Then a new tool comes out, a new demo, a new agent, a new benchmark, and maybe you actually try it. And at that point you cannot even be too cynical, because some of these things are genuinely impressive.
I have used these tools to solve problems outside of work. I have seen MVPs come to life in a ridiculously short amount of time. I have caught myself thinking: okay, this really does change the way we can build things.
And at the same time, I have felt crushed by it.
As if every day I had to study a new tool, understand a new framework, try a new agent, learn a new language, build something, publish something, leave something behind.
At one point I even got the urge to learn Unity.
Why?
Because I had bought a Meta Quest 3, got fascinated by it, and for a few days my brain decided that, obviously, the most reasonable thing to do was to jump into VR development too.
Totally normal.
That is a bit of the mental weather of this year: real excitement, huge possibilities, but also a constant pressure to do more.
At some point, I tried to give myself an answer.
And the answer, at least for now, is much less futuristic than I expected:
I need to study more.
Not less.
More.
Because if these tools multiply what I can do, then what I can do has to be worth something.
When you realize you do not really breathe what you use
At the beginning of last year, I found myself in a context where I was using TypeScript every day, sometimes in quite advanced ways.
At times, maybe even overkill for what we were building.
I used to say I knew TypeScript. I used it every day.
But then someone would mention things like overload functions, infer, and I would notice something annoying: yes, I had probably seen them before. Yes, maybe I could use them by following a pattern. But I was not sure I could really explain them.
I did not breathe them.
And that bothered me.
Not in a tragic way. I did not go cry in the shower listening to Ariana Grande. But I did feel a bit bad at it.
And honestly, sometimes feeling bad at something is useful.
I do not mean hating yourself or turning impostor syndrome into an identity. That can become toxic. I mean that healthy feeling where you realize there is a gap and you do not want to pretend anymore.
So I did something a bit crazy.
I bought a wall whiteboard. Then another smaller whiteboard for exercises. I started tracking my days, checking boxes, building a pretty rigid routine.
Wake up at 5.
Study TypeScript.
Algorithms and data structures.
Exercise.
I know. Waking up at 5 sounds like the ultimate motivational LinkedIn cliché.
But in my case there was nothing poetic about it. I needed time. That was it.
And honestly, it sucked.
There were days when I woke up with a face that looked like someone had punched me. Days when I procrastinated anyway. Days when I opened the study material and my brain felt like a Chrome tab frozen since 2017.
My girlfriend, quite reasonably, probably thought I had lost my mind.
Also because, in the meantime, to compensate for this slightly monastic coding life, I had filled my study room with tropical plants. Grow light included.
I already loved plants, so I cannot blame algorithms for all of it. But I admit the scene was pretty funny: me at 5 in the morning, destroyed, standing in front of a whiteboard, surrounded by tropical plants lit up as if I were growing bananas in a secret laboratory. Photo proof: 
For TypeScript, I followed a lot of Matt Pocock’s work. His exercises are focused, sharp in the right way, and they force you to really understand what you are doing.
For algorithms and data structures, I went through a bit of everything: Grokking Algorithms, Introduction to Algorithms, LeetCode, GreatFrontEnd, notes, videos, whiteboards, despair.
Not every week was perfect. Far from it.
But for five or six months, I kept going. And even though at some point I was pretty much running on fumes, I was proud of myself.
Not because I had suddenly become great.
But because I had remembered that, when I really set my mind on something, I can build discipline.
Even imperfectly.
Even with bad days.
Even with a zombie face.
Even with a grow light pointing at my plants while I try to understand a linked list.
AI helps you, but it can also fool you
I am pro AI.
Clearly.
I use these tools, I study them, I experiment with them, I build things with them. I am not interested in being nostalgic about how “things were better before”. I do not think they were. Many things today are simply more accessible, faster, easier to explore.
But the more I use these tools, the more I am convinced they are a multiplier.
And a multiplier amplifies what is underneath.
If underneath there is method, study, judgment, experience, and the ability to verify, they become incredible tools.
If underneath there is only hurry, they can produce a lot of noise.
Some time ago I did an experiment with Swift. With the help of AI, I managed to build a small app in a few hours. And honestly, it felt great.
But as soon as I tried to really put my hands into it, I felt fragile.
I could read the code, sure. My experience as a developer helped. But I did not know it. I did not breathe it. I did not have that confidence that lets you say: I can maintain this, change it, break it, fix it, ship it.
And that reminded me of something simple but important: programming is not just getting a working output.
Programming is understanding the material you are working with.
It is knowing where to put your hands.
It is recognizing a dangerous line.
It is understanding when a solution looks elegant but is wrong.
It is being able to read a system and form your own opinion.
That is still the part I fell in love with.
Security, Keycloak, and a reality check
This year I also managed to contribute to Keycloak, finding and fixing a security bug in the authentication flow.
Keycloak is a huge project. It is used in serious contexts: companies, banks, public administrations, international organizations. It is not exactly the kind of project you clone on a Saturday afternoon and understand in ten minutes.
I do not really know Java.
I can say that without any problem.
AI tools helped me a lot with syntax, with finding my way around some parts of the code, with reducing the initial friction.
But AI did not understand the problem for me.
What helped me was study.
Studying algorithms and data structures gave me a mental structure. Studying the web helped me read a HAR file, follow requests, cookies, redirects, sessions. The habit of asking questions helped me not stop at the easiest explanation: “it must be a bug in my app”.
At some point I had to ask myself: what if the problem is in the tool I am using?
And that question opened everything.
When the PR got merged, I posted about it on LinkedIn in a slightly ironic way, saying that I had found a bug in Keycloak’s authentication flow and that if half the internet suddenly could not log in the next day, I sincerely apologized in advance.
That post got more than 76,000 impressions.
But the best part was not the impressions.
It was the conversation.
I found myself talking with people who eat security for breakfast. People much more experienced than me, asking questions, adding context, correcting details, giving me perspectives I did not have.
And there I felt something very clearly: studying gives you the technical courage to enter conversations bigger than you.
Not to show off.
But to sit at the table, listen, say something useful, and keep learning.
Addy Osmani, Agent Skills, and the strange pleasure of collaborating with someone you studied from
Another beautiful part of this year was contributing to Agent Skills, Addy Osmani’s project.
Addy is not “just someone on the internet” to me.
He is one of the people I studied from. One of those names I associate with serious content, clear explanations, performance, frontend, tooling, quality. Someone who, in my own path, belonged more to the category of “material to study” than to the category of “person I might actually interact with”.
And then, at some point, I found myself there.
Contributing to one of his projects.
Proposing changes.
Reviewing work.
Receiving replies.
Being publicly thanked on LinkedIn for helping improve the skills.
That was emotional for me.
I do not want to make it bigger than it is, but I also do not want to minimize it too much. Because when you study from someone’s work for years, and then you find yourself collaborating even on a small part of what they are building, something clicks.
You think: okay, maybe I can participate too.
Not “I made it”.
Not “now I am good”.
But I can participate.
What I find interesting about Agent Skills is that it is not only about AI. It is about method.
In Addy’s post about Agent Skills, there is an idea that stayed with me: AI agents are capable, but they tend to skip exactly the senior parts of the work. Specs, tests, reviews, scope control, verification, evidence.
So those parts need to be made explicit.
You cannot just hope the agent will “do the right thing” because the prompt was well written. You need workflows, checkpoints, criteria, limits. You need to make verification hard to skip.
And I think this applies to us too.
How many times do we, as tired human developers, skip the test because “it is just a small thing”?
How many times do we expand a PR because “while I am here, I might as well fix this too”?
How many times do we say “it looks right” without real evidence?
One phrase I keep with me from that world is: verification is non-negotiable.
Verification is not the boring part at the end.
It is part of the work.
And I think in the AI era this matters even more.
Generating is not enough.
You have to verify.
Studying with AI, not instead of studying
One of the most powerful things I have found in AI tools is not “write the code for me”.
It is “help me understand why this code works”.
That happened to me often while studying algorithms.
I remember very clearly the reverse linked list problem on LeetCode. I could even solve it recursively, but I could not explain it well.
And to me, that is a huge difference.
If I cannot explain something well, I probably have not understood it enough. Maybe I can pass it today. Maybe I can use it tomorrow. But in six months, that knowledge will evaporate.
So I went to the whiteboard.
I drew the nodes.
I moved the pointers.
I rewrote the steps.
I asked Gemini to explain why I was doing that thing.
Then I asked it to visualize it.
Then I went back to the whiteboard.
Then I realized I still had not understood it.
Then I started again.
At some point, my brain clicked.
And that felt beautiful.
Not because I had “finished the exercise”.
But because I had understood something that had been escaping me.
I think this is one of the strongest uses of AI: not replacing study, but making study more conversational, more visual, more persistent, more personal.
Used well, AI can be an infinite tutor.
But you have to want to understand.
You have to be willing to stop.
You have to accept that initial frustration where you feel small.
Feeling bad at something, in the right way
I know, it is not exactly a motivational-book sentence.
But I think sometimes it is okay to feel bad at something.
Not in the sense of putting yourself down. Not in the sense of turning self-criticism into a sentence. No.
I mean that healthy feeling where you realize you do not really know something.
That feeling can discourage you, of course. But it can also wake you up.
It can make you want to go deeper.
And going deeper, for me, is still the most beautiful part of studying.
Not collecting tutorials.
Not collecting certificates.
Not opening twenty tabs and feeling productive.
Going deep.
Taking something you thought you knew and discovering there is a whole world underneath it.
JavaScript.
TypeScript.
The browser.
HTTP.
CSS.
Authentication.
Security.
Algorithms.
Frontend architecture.
These are all things we can use for years while still staying on the surface.
And maybe that is exactly why I want to start again.
I want to study JavaScript again, even the beginner parts. I want to go back to DSA. I want to understand the browser better. I want to use AI tools, yes, but with more judgment.
Because the point is not choosing between studying and using AI.
The point is making them coexist.
Studying gives you depth.
AI gives you leverage.
Without depth, leverage can make you go very fast in the wrong direction.
So where do we restart?
I do not know exactly where this job is going.
I do not know how much teams, roles, companies, languages, frameworks, and tools will really change.
But I know I do not want to respond to the speed of change by studying less.
I want to do the opposite.
Maybe without always waking up at 5, because honestly I do not know if my body would forgive me another round like that.
Maybe with a more sustainable routine.
Maybe with fewer boxes to check and more real consistency.
But I want to start again.
Even from simple things. Even from a beginner tutorial. Even from an exercise that makes me feel stupid. Even from a concept I thought I knew and clearly did not.
Because I still like this job for that reason.
There is always something to understand.
And even if sometimes that feels scary, because there never seems to be enough time, maybe it is also the reason I still love it.
In a year where everything seems to push us to go faster, maybe it is worth remembering that some important things only happen when we slow down enough to really understand them.
A small final note, because it would feel hypocritical not to say it: I wrote this article myself, with my own chaos, my too-long sentences, and my thoughts dumped on the page. Then I asked AI to review it, more or less like I would with a very patient proofreader.
And I think that is fine.
Because that is exactly the point of the article.
Not using these tools to replace what we think.
Using them to think it better.