An "anti-pattern" is a solution that looks like a good idea at first, feels familiar or convenient, but consistently causes more problems than it solves.
It's worth spending some time to identify anti-patterns in your life. Because once you find one, you might be on the verge of making a major breakthrough that could really meaningfully improve your life. I've written recently about when you are using AI and think that the answer to learning is to have AI give you an answer instead of struggling on your own. When you goal is to learn, the anti-pattern is giving yourself the answers too easily. A good teacher knows this is an anti-pattern and real learning always includes struggle. But it's so easy to fall into the anti-pattern of undermining your own learning. It's so convenient to give your mind an out by just looking at the answer. Doing this repeatedly also causes more problems than it solves.
So how do you solve an anti-pattern? Unfortunately, not easily. But it has to start with recognition. Once you recognize the anti-pattern and label it. You can start to see solutions that might be painful at first but can unwind the negative behavior. Once I realized what I was doing with AI undermining my education. I turned off my auto-complete. And I asked for explicit exercises that I would bang my head against without using AI to give me the answers. I started to take pride in when I could achieve exercises without using Google to search for questions. And without asking AI for answers. And there is a line there too. Because in the course of an exercise there might be a different problem unrelated to your learning. And perhaps that might be worth using a google search or asking AI. But you gotta be disciplined about what you are doing. You have to be ruthless about identifying the goal you and making sure your behavior is going to lead to the end goal.
Another anti-pattern that I observed is the anti-pattern of using command tab to switch between applications. Why is that an anti-pattern? Well, it's certainly familiar and seemingly convenient. It's something that seems like such a good idea. But think about it for a moment. When you start to switch between a handful of applications, how many times do you find yourself hitting command+tab like 15 times to get to the application that you used a few days ago? If you really knew how often you are ineffeciently using command+tab, you'd start to realize how the pattern could be greatly improved upon. And yes, getting to a better place would be hard. Especially because using command+tab just grows to be second nature.
So what's the answer?
A few years ago, i decided to map my most used applications to a specific keyboard shortcut. I hold a custom modifier and press a single key and what happens is that a specific application opens if it's not already running OR if it's already running then it comes to the foreground and gains focus. Pressing that same key again automatically hides the same application.
So a simple thought exercise.
Say you want are browsing the internet and you want to go to your terminal, what do you do?
Most people will just start command+tabbing.
That is not what I do.
super+y
What if you are on Slack and realize you need to open your browser? Command+tabbing? Nope.
super+j (Browser is such a regular application, I use one of the best keys for that application. Right on the homerow of the keyboard.)
If you want to really breakthrough, you disable command+tab altogether. That can help jumpstart the change in your behavior.
And so now that it's been a few years where am I at with the anti-pattern? Well. Honestly, I still sometimes use command+tab (i currently have it allowed). But when I just use my system to go directly without command+tab, it's honestly so much better. You can fly around where you want to be. It's so much more intentional.
When you are on the other side looking back at an anti-pattern you have a much different perspective. You realize how much better things could have been if you'd addressed the pattern much earlier. And you also see other people and wish you could help them. But it's always hard. Because remember, it wouldn't be an anti-pattern if it wasn't seeminly convenient. Or wasn't easy at first.
After you find your first anti-pattern and overcome it you might be surprised that you are now more open minded that there could be other anti-pattern's in your life. If something so sacred as command+tab is an anti-pattern, then what else could be? How much of our interactions with our phone, social media, or even our daily routine could you think about as an anti-pattern? Starts to be scary (and exciting) to look around and challenge everything.
But remember, anti-patterns aren't bad just because they are convenient. Many great things are actually convenient and NOT an anti-pattern. It actually has to be something that causes more problems than it solves after repeated instances. It will be hard to see initially, but if you knew you were going to do it 1 million times you could then realize that it's worth doing things the right way. It turns into an anti-pattern when you extrapolate beyond initial ease and see that not only will it eventually be better to behave differently, but that you are for sure going to get where it's worth doing things right.
Thoughts on Design
In building hatunike.com i've needed to think more deeply about design. In the course of my daily job, I'm used to entrusting questions of design to be made by our designer. And i've grown comfortable with working with a designer. There is a trust that you develop where you learn to give more lattitude to a designer. In doing this over the years, i've learned that regularly my design instincts are wrong and not very good. And that's hard to admit. Because I would say that I've developed taste and that I do have some natural skill in seeing a direction and quickly extrapolating to where the design will be valuable. But when you see those initial instincts, it makes you lose confidence in your own design sensibilities.
Working on this writing project has pushed me to do my own design and it's forced me to push through my own initial design instincts and to go through some of the process around designing things. And though difficult, i've found this to be incredibly rewarding. There's something that just feels fantastic when you are making design decisions from top to bottom. And by design, i guess i'm speaking now much more broadly than just the UI or the aesthetics. Because i'm also referring to the design decisions around how it's built and around the process for how my words get out of my head and into my computer and hosted on a server.
The design is not just what it looks like and feels like. The design is how it works.
Steve Jobs
And of course i could take this even further than I have. The "design" of this website is also connected with how I reach an audience (I don't). Or how I get regular readership (I don't). Or how fast my site loads (hella fast). But for now, my domain of design has been broader than it could be, but more narrow than it could be too.
It doesn't seem like there ever is an end to how design could expand further than where you are in a moment. The original iPhone designers likely have been surprised at the natural harms that come from phone addiction. More holistic design might be paralyzing and I can certainly attest to the fact that this writing project wouldn't have gone anywhere if I was trying to think about everything. Even just the prospects a single reader wanting to read my site on day 1 could be enough to prevent me from being interested.
And so an element of design has to be mapped back to what your goals are for what you are trying to achieve. An aspect of the iPhone was that the team wanted to make money. And an aspect of this site is that I wanted a small project to learn a new programming language and to also learn how to host and configure everything needed for a website.
Design goals can change. And every iteration can be an opportunity change. And if you have creative control you can always shift something to meet your goals.
David Kelly had this to say :
Fail faster, succeed sooner.
And that has felt true. My zig build run to parse my markdown and convert it into the html you see had many failed attempts.
And my goal is to learn. And I do think that once you achieve "success", it's time to redefine the design goals to push yourself further. For example, now that I'm successfully about to post my writing. My attention now turns to the quality of my writing. How could I be more thoughtful and how could the things I write about be better. At a certain point, that aspect of design becomes the goal.
On Ai Learning
It feels like we're right in the middle of peak AI coding hype. And i've been following things pretty closely. But my actions have felt quite counter to the moment. I watch the AI hype pushing for coding agents to do more and more tasks. And yet my programming goals at the moment are very different. I'm still using AI with a pretty heavy firewall. I'm careful about what I ask for, not because AI can't do what I need or that I'm worried about AI taking over. It's just my goals lately are to learn. And to learn some programming that for me is quite difficult. It's really tempting to ask AI for answers when you are struggling. But if you goal is learning and not necessarily to produce something fast. Then it's really important not to have Ai undermine your learning, but instead contribute meaningfully to helping you learn. And it's really good at doing that. If you ask it questions in the right way it can be such an incredibly learning tool.
So on the one hand, I feel really good about the progress i'm making. And for my goals, AI is incredibly, and i'm using it all the time. But i'm not having it do things directly for me yet. Because i'm learning. And if it does things for me, it's kind of like if you were in school and you had other students doing your work. The work might be good...but you are not good.
An investment in knowledge pays the best interest.
Benjamin Franklin
I do want to say that it's not lost on me that I have this feeling that I'm going "too slow". I wish I already knew the things i'm learning. And I wish that there was a faster way to learn. But I realize that I have to listen to my instincts. To learn my best I have to be exposed to a variety of problems and to ask lots of questions. And to do some things many times. I have to really internalize things.
And all of that seems like it's not what the Ai hype train is pushing for.
Hopefully Benjamin Franklin is correct that my investments in my own understanding will pay the best interest and that they will compound later when I'm doing more autonomous vibe coding. Or maybe I will just continue to do everything myself and just use Ai to explain things to me and to critique my code and to show me alternative options. And i'll just slowly build things that I find valuable at a pace that feels outdated.
I will say, that I don't know how formal education systems will survive. An honest drive for education has never been in a better place. But the ability to
Craftmanship
There are a few things that I've been doing that feel like a return to an older time. I'm learning a new programming language, Zig. And for me it's a return to programming with memory management. It's a lower level programming language. And yes it's new and modern. But it's very much a language where you find yourself doing things in a way that programmers of old would feel comfortable with. Zig doesn't try to be comfortable. It tries to be honest.
And over the last couple of years i've also started doing some projects that i've elected to do that are wood working projects. Unlike my programming adventures, the woodworking for me is entirely new. Until the last couple of years, i'd never really built anything out of wood, aside from some childhood tree house projects, or pinewood derby event, or a kids wood working kit where I made rubber band guns and swords, i just never made anything serious. I didn't even take shop during high school. And in my mind, my thinking was that I would likely just buy anything that I ever needed. And so i didn't really think of myself as ever getting interested in building anything out of wood. And honestly that's not a terrible thought process. It's a thought process that feels quite comfortable.
I do wonder why i'm so attracted to these two seemingly different approaches. It's not a regressive mindset against technology. I'm certainly using modern technology to assist me. AI helps me learn and teaches me why I need to do things. But I do think it's related to my life experiences. Modern software development can feel so bloated and so many abstractions and frameworks. When i program in Zig it feels like i'm reaching for something more minimalist. And i mean that in the sense where the kind of minimalism that I'm attracted to is the minimalism where the simplicity is hard fought. And it's better for being simpler, not just less for less sake. One might laugh at the idea that Zig is "minimalist". When it can be quite verbose to accomplish some basic tasks. But it's minimal in that it's honest about everything that is happening. And it feels like the language is trying to be clear about what's happening.
My particular woodworking or zig programming aren't anything to be proud of yet with regards to this aspirational minimalism I speak of. But I see in me the desire to put my own hands on my output. To make something that is more truely my own. I can't find things that I built on the store to buy. Even if I could buy the same or objectively better...it still wouldn't be my own. And the process of doing these things just feels very human. These hobbby's are almost indulgences. Not good ROI on time. And not benefiting from economies of scale.
I get nervous even calling what I do "craftmanship". But there's something in the pursuit that draws me. And it can feel good to be proud of our efforts, even if they are embarrasing to show someone else. Or even when the work I'm doing is still quite derivative.