Marcel's avatar in comic style

I’ve been using WordPress since I was 15, which is now over 15 years ago. Since I never bothered to learn PHP or read the documentation, I’d be lying if I said I knew how to actually build something with it. I’ve always relied on friends for help.

This is the first time in forever that I’m blogging on something other than WordPress. There’s no backend, no theming, no plugins, and for the first time, I actually understand how to add whatever I want.

It feels great.

There’s a slight chance that I’ll grow tired of using a static site generator as my blog framework, sure. But in the context of my ongoing effort to get better at coding, I feel like gifting myself this playground, with all its possibilities, might make the few downsides worth it.

Look at this cool library of all the books I’ve read in 2023! I wouldn’t even know where to start with something like that in Wordpress.

Just a day after leaving Berlin for good, I got sick for the first time in seven years. It wasn’t Corona, just the flu. There I was, feeling lousy, with all my stuff still in boxes, in a new apartment, in a new city, smack in the middle of winter.

Not exactly the greatest start.

I noticed my mental health starting to slip. Over the years, I had developed several daily rituals that amounted to what I’d call a healthy and happy life. But being too weak to walk for more than a minute for about one and a half weeks, I couldn’t keep up with any of them.

Now, two and a half weeks later, I’m mostly back to my old self. Feeling strong, hitting 10,000 steps daily, and pushing myself to do something productive for at least an hour each day. I’m not just over the flu—I feel like myself again.

Then Gigabyte got sick. She couldn’t open her eye fully. At first, I thought it might just be a passing thing, but it got worse the next day. So there I was, new city, no trusted vet, and no idea how to navigate around here.

Turns out, this was a hidden blessing. I had to tackle this issue head-on, learned that calling a taxi the traditional way still works—kind of a throwback experience. I found a great new vet I’m really happy with, and Giga’s eye is almost back to normal. It’s just conjunctivitis, nothing that a few eye drops (3 times a day, five days in a row. She’s not amused) can’t fix.

The upside of all this was it made me feel like I’d really settled in. My apartment’s turned into a cozy space, and I’ve been making use of what’s available in my new neighborhood. It’s working out well. This gave me a sense of progress, like I’m moving in the right direction.

Growing pains!

It’s not surprising to read something like what you’re about to at the beginning of a new year. People find time to relax and think over the holidays. They find motivation, feel like everything is possible, and decide to finally give it a go in January. Whatever “it” may be.

For me, it’s gardening. Digital gardening. Because I needed to code something and my current app project (more on that later) needed a bit of time to breathe, I started playing around with a couple of web frameworks. The previous iteration of this site used good old WordPress, but I never felt like I was able to sculpt it to my liking, even after more than 15 years of using it.

These lines are now powered by Astro. My current goal is to use this not only as a blog but as a playground for whatever comes to mind. A flexible canvas for all things I’m interested in. Something I’m able to craft into whatever I need it to be. I never got there using WordPress, so this can be considered a freedom strike.

I’ve been programming for a bit over a year now and I’m far from giving substantial advice on how to write good code. What I actually do know a bit about is the right mindset for shipping products.

Perfectionism

Embrace the truth that wanting to ship something perfect is the same as not shipping anything. You’ll never(!) get to a point where everything is to your absolute liking. It’s impossible. It has nothing to do with how skilled you are either. You can be the very best designer and programmer ever, entropy doesn’t allow perfection. On the contrary: Entropy is perfection. Embrace the fact that “good enough” is a moving goalpost. It means that you don’t have to try to be perfect. How soothing is that!?

Imposter syndrome

You’ll never be as good as you think you should be. I feel like human existence is a binary state. Either you’re overconfident or suffer from imposter syndrome. Both are problematic but the latter is easier to manage, in my opinion. Acknowledge the fact that your being capable of shipping something in theory is good enough to do it in practice. Worst case: Nobody will care about your project. The good news: That’s already what’s happening. There’s no chance anyone will ever truly care about your unreleased project and pre-release hype is not real.

Maximalism

Ideas are cheap. You don’t want to be one of those people that are stuck in “Wouldn’t it be cool if…” land and never get around to actually confronting their ideas with reality. Or reality with their ideas. The common pitfall is to think that you only have to cram enough ideas (read: features) into your product for it to be the very best out there. The opposite is the case: You need to get rid of all the features that don’t reflect the essence of what you’re trying to do. There’s a reason why basically everything ever written by people who ship reiterates this point over and over: it’s true. Confronting your ideas with reality can’t happen fast enough.

The right goals

This might be the most important point: The product isn’t the destination. Shipping is. If you think that your current idea is the be-all and end-all, you’ll most likely make the aforementioned mistakes over and over again. Good ideas, loosely held. Shipping must be the motivation because only shipping creates the positive mental feedback-loop that is required to keep shipping. If you’re somebody who shipped something once, you can do it a second time and the third time is even easier. That’s the process. You build, you ship, you keep building. A project fails? You don’t care because you’re in it for the process of shipping and iterating.

The status quo is the worst case. Ship yourself out of the status quo, everything else will follow automatically.

It happened. The switch flipped and I‘m now one of those people who believe that it‘s far more productive to design in code than to move boxes and text in some design software.

I spent the last decade not wanting to believe the people who praised designers who code, but I‘m convinced now.

It‘s been about a year since I worked through 100 Days of SwiftUI. I built four iOS apps and about 4-5 web projects using React since then. I‘m obviously still a coding-baby but it‘s already very clear to me that being able to code made me a better designer.

AR interfaces are going to take this up a notch.

Three years ago, when I had an epiphany and realized that AR/VR interfaces are going to be the future of computing, I wondered how current design software would ever be able to allow me to do a good job designing AR interfaces.

I came to the conclusion that it wouldn‘t. It couldn’t.

If I would wait until the Figma of AR/VR interface design shows up, I‘d be behind the curve of what‘s going to be considered modern interfaces in the blink of an eye.

Fast forward to earlier this week, three years later.

I‘m downloading the visionOS SDK, after watching a couple of WWDC23 sessions about spatial computing and how to use SwiftUI and ARKit to create AR experiences for what has a good chance of becoming the AR platform of the future.

I was right.

You can‘t design AR experiences in Figma. Floaty 2D windows are only the baseline of what’ll be expected. The bare minimum.

True modern experiences will switch fluently between 2D windows and immersive experiences.

Designers need to be ready for it.

I spent the week playing around with visionOS, trying out interactions, building small apps and getting a literal grip on how to interact with 3D models in AR space and I‘m convinced that I‘d be utterly lost hadn‘t I spent the last couple of years working on what will be (is?) the required skillset for AR interface designers.

Designers need to understand 3D modeling, meshes, materials, textures, shaders, faces, vertices and edges. I knew nothing about any of this three years ago and it was already required knowledge in this very first week of AR interface experimentation.

Designers need to be able to code. 3D drag gestures, interactive 3D models, a blend of immersive experiences and 2D windows in real life environments can‘t be properly reproduced in some AR-Figma of the future. AR design is the climax of self-efficacy in interface design.

Designers need to adapt to be able to provide experiences that are as personal as spatial computing is going to be. They can’t be several degrees removed from what users are going to interact with anymore.

Being a designer who codes makes you a better designer in 2023.

Being a designer who doesn‘t code might make you a bad designer in 2024 and beyond.

There’s this concept of self-efficacy in psychology that really resonates with me. I see a lot of life through this lens. Here’s Wikipedia’s definition:

In psychology, self-efficacy is an individual’s belief in their capacity to act in the ways necessary to reach specific goals. A strong sense of self-efficacy promotes human accomplishment and personal well-being. A person with high self-efficacy views challenges as things that are supposed to be mastered rather than threats to avoid.

I believe that you can choose to be self-efficacious and things you do can make you feel self-efficacious. Most people fail to recognize when these moments occur, and even fewer make a conscious effort to intentionally create such moments for themselves.

Changing the physical world does this to humans. That’s one of the reasons so many people daydream about gardening and why pottery feels a bit like therapy. You create something that wasn’t there before. You moved something and it stayed in place. You’ve literally made a teeny-tiny dent in the universe.

You won’t be able to describe to a person who never experienced anything like it, how gardening makes you feel. Starting with nothing, spending hours of work, accepting failures and imperfections to then see a result of something you made, tickles the core of what we are. Sure, you can explain all the steps of the process and tell them you felt “good” doing so but there’s no way to describe the intensity of that feeling.

Turning a rotary dial to call someone, pressing buttons to control a SNES video game character and swiping and tapping on glass to send an email did this to us with ever increasing amounts of directness. Every evolution of digital technology helped us feel more self-efficacy.

For better or worse.

I think AR interfaces are the inevitable next step in computing because they make us feel more self-efficacious. You won’t be able to properly describe how moving digital windows in the physical space of real life made you feel. It’s counter-intuitive to even think that the way you interact with the window your bursting inbox makes a difference, yet it does.

Spatial computing can’t be described. It must be felt to be understood.

Okay, hear me out. Web development is actually kind of fun. I mentioned that I worked through The Joy of React recently and while the course managed to transfer a lot of valuable knowledge, it didn’t do a great job at keeping me motivated.

I’m not one of those people waiting for motivation to magically hit me. I know that it’s something you create by actually sitting down and doing the work. Nevertheless, something about the course constantly trying to trick me into working on something it hasn’t taught me before, made me just watch the solution videos before actually trying to solve the problems. I knew that I could not possibly know the “right” solution, so I stopped trying. That resulted in me finishing the course without applying most of the things it covered.

100 Days of SwiftUI‘s approach worked far better for me. It covered a couple of concepts, then gave me a challenge and told me that I already know everything needed to solve it properly. I knew that it’s completely my fault if I don’t manage to come up with a solution and I also knew that I only had to re-watch the previous lessons to stumble upon the answer at some point. That’s motivating! Telling me that I’m theoretically able to solve the challenges gave me enough confidence to sit down and try until something worked.

So here’s how I got over my disgruntled and unmotivated “Web dev sucks” state:

I forced myself to build something.

At first my goal was to set up a project. Hard enough with all the tooling involved. That worked more or less smoothly. Then I started playing around with a button that puts something into an array, which led to an input element that allows to customize what to put in there and so on and so forth. I didn’t plan on building a shitty to-do list app but it happened because motivation came as soon as I started experimenting.

I wandered from “Oh, I wonder if I could…” to “What if I try to…” and grew increasingly more excited. Our brains are hilariously easy to manipulate. Create a few achievable moments of success and you can string yourself along until something exists that previously didn’t.

Nobody is in need of a to-do app called “Your Plate” but it exists now. I’m a bit proud of that.

So, here’s what I did:

  • Set up Visual Studio Code in a way that’s acceptable.
  • Learned how to deploy something through Vercel and the Terminal. This was a huge “Wow, this is so easy and cool” moment for me.
  • Played around with objects and destructuring.
  • Added a few libraries for random stuff like playing sounds (and added a setting to turn sound off!), throwing confetti and animating the list.
  • Figured out what TailwindCSS is and how to use it. Another “Oh wow” moment.
  • Added local storage capabilities.
  • None of this was very hard, I built far more complicated things in Swift and SwiftUI already. It’s something though and it managed to drag me out of my “Ugh, where to start?” rut.

Next up: Upgrading to Typescript. I want types. Type me up, baby.

I bought the limited early access to The Joy of React the other day and worked through the whole course since then. Switching to web development while still being at the very beginning of my journey of becoming a Swift developer might not be the smartest choice but I never claimed to follow a thought-through master plan in regards to my learning, so whatever.

Before we get started: These are my current thoughts on getting into web development as somebody who has only a basic understanding of HTML and CSS. These thoughts will be different in a year from now. Cool your jets and consider this as something like a user test for the question of “How accessible is becoming a web developer?”.


Web development is a pain in the ass. You need to understand what a terminal is, what it’s used for and how to use it to even get to the point of asking yourself “What the fuck is NPM?”. Then NPM needs to be installed which feels like hacking the Matrix, since it does something somewhere but you won’t see anything but lines of text in your little terminal window into the soul of your computer that you’re afraid to touch because what if you sudo your SSD or something.

If you managed to install NPM, you have to… boot up your project by hacking even more Avada Kedavra shit into your cOmMaNd LiNe. Something happens and suddenly there’s a terminal you can’t use for anything else anymore because it’s doing… something and is busy forever. You end up with a browser tab directly plugged into whatever terminal magic is now showing you your empty project.

Great. It took only two and a half years to understand all of this and to get it to work. Fun!

Even if you managed to do all of this, you’ll end up in Visual Studio Code which only seems to work properly if you install a dozen plugins and hope for the best. I bet there’s some kind of user experience to be found in VS Code but it sure doesn’t stack up against anything I’ve grown accustomed to while using Xcode.

My whinging doesn’t stop there, no worries!

I’m not happy with JavaScript and React either. JavaScript feels weirdly incomplete after getting used to Swift, even though (or because?) it’s old as fuck. Even simple things like capitalizing a string is a non-trivial endeavour with something like three different solutions. I found those in Stack Overflow threads from 1932, by the way.

React does have similarities to SwiftUI and I see why people can grow to like it but it lacks the fun of SwiftUI. It feels clunky and verbose. JSX, CSS, a sheer endless amount of semicolons and angle brackets… it’s a little ugly? Granted, I don’t know anything and haven’t used it for half as long as I’ve spent with SwiftUI but still… there’s a lack of grace there that’s a liiittle bit repugnant.


So, where am I at right now?

I couldn’t wait to start my first project after finishing 100 Days of SwiftUI. Xcode was fun, the iOS simulator worked great and everything felt thought-through and like a paradise of possibilities. Finishing The Joy of React on the other hand left me with a feeling of dread and a weird taste in my mouth. Everything related to web development seems to be fragile, fiddly and like a late-game Jenga situation.

I’m not giving up though. This seems to be modern web development and since I want to be able to create web apps I’m going to stick with it. It’ll get better.


Anyway, here’s my little “You did it” achievement the course gave me. I’ll slap that on my LinkedIn profile now and consider myself a junior frontend web developer.

The other day I stood in a meadow, waiting for a puppy to poop when I somehow got involved in a conversation with an 83-year-old woman. It started by me asking her if it’s okay if we come closer so the still not pooping puppy can say hi and learn that there’s no need to bark at people.

She answered: “Sure, but I won’t pet him!”.

We chatted for something like 30 minutes and I found out that she not only doesn’t want to pet this specific dog but dogs in general. She even enjoys looking after her daughter’s dog sometimes (who likes to sleep at the end of her bed when he’s visiting) and still won’t pet him.

I didn’t ask why. It didn’t really matter. She told me her rule and I understood that this is one of the foundational truths of her life. She doesn’t pet dogs.

There’s something intriguing about people who set boundaries that you can’t understand, but you can respect.

In the end, there was no poo. We found an interesting stick that had to be gnawed on for a long time, though.

Unfortunately, things are made by people. People have the tendency to live for quite some time and go through several iterations of being while existing. This, combined with the fact that nearly all 8 billion of us are now permanently connected through a series of tubes, results in everything having the potential of being tainted forever.

Everything requires a disclaimer now.

So, you enjoyed watching Seinfeld? Did you know that one of the actors had a weird racist breakdown live on stage? Oh, you’re looking forward to what seems to be the best Harry Potter game ever? Please keep in mind that the original author of the books is transphobic! You’re enjoying the wrong thing! Please be entertained by products made by, with and based on less flawed people!

These things are wrong and absolutely worth criticising. No doubt.

However, I wonder if the dynamic of always watching out for the next bad thing, being on edge because everything has the possibility of being tainted, never being able to enjoy something for what it is, because it has to be dissected on a socioecological level, does something to us.

There must be a cost to always having to watch your back in case you’re enjoying something a little too much that others feel should not be enjoyed anymore. I don’t think that’s helpful for anyones mental health.

Not criticising wrong behaviour is obviously not the solution. Attacking ourselves and everyone else all the time, because things are made by people and people are inherently flawed, doesn’t seem like the way to a content life either.

I don’t know.

It’s complicated.