November 24, 2022

My definition of success

One thing I wanted to be very clear about when I embarked on my journey to finally learn how to code was my definition of success. Not knowing how a good outcome would look like only results in disappointment and loss of motivation. Great ambitions are worthless if you don’t manage to keep the ball rolling.

My definition of success is of such small scale that the only way for me to fail is to stop working.

Here it is:

  1. The project must launch
  2. One person’s life must be improved
  3. One Euro must be made

Because I believe in my ability to bring my projects to a point where these three aspects are true, my motivation stays strong and I know that success (defined by myself, not by external sources) is around the corner. Stoins launched, improved the lives of a couple of friends and made a couple of Euros. I consider this a huge success. For now. I’ll update my definition of success when the context changes.

Aiming too high creates brittle motivation.

I added a “Follow” button to the sidebar. Clicking it brings you to a new page explaining how to follow websites without social media. Everything old is new again. RSS is back, baby!

November 22, 2022

The app status of Stoins has changed to Pending Developer Release

Would you look at that. Henlo got rejected a bunch of times and it seems I learned a few things in the process. Very unintuitive things like “Even though there’s a dedicated input field to link to the privacy policy you better put the same link in the description of the app or you might get rejected”.

Stoins will be released tomorrow!

November 22, 2022

Good Friction

This is a great thread on how Duolingo added a step to their onboarding experience that did nothing but put the user in the right mindset to learn. They let people pick a streak goal to challenge themselves. No matter if users picked 3 or 30 days, the app didn’t actually save the data nor did it do anything with the selection.

Apparently this still resulted in a “huge” retention win. Stuff like this is my favourite kind of A/B testing. It’s not just a different shade of green that performs slightly better but a whole layer of human psychology that got revealed and used to create a win/win situation for user and company.

By the way: I did not expect much from it, but Atomic Habits is a good read. It’s not mindblowing in any way but also not as shallow as I expected.

November 21, 2022

Stoins is waiting for review

I did it. Stoins is ready to be pushed out the door. I don’t expect it to get through review without a few resubmissions but that’s just part of the game. 🤞

November 20, 2022

I seek you

The other day I was at a party where I hardly knew anyone. Somebody asked somebody else if they used ICQ back in the day and I had the chance to reply by reciting my ICQ number without even having to think about it for second. It was an emotional moment of newfound friendship for all of us there.

It’s fascinating how ICQ has been a formative product for a non-trivially sized subset of people. Not only do we remember those very unintuitive numbers, we’re also able to invoke a perfect memory if not rendition of the new message sound. Hearing it makes me feel things.

ICQ is technically still around even though it has lost all of its former relevance. What remains is a good feeling about the couple of years it helped us stay connected to those important to us. That’s plenty.

It turns out that my new coding skills can be applied to WordPress theming as well. Wow. This blog now has a special style for short posts like this one. đź‘‹

November 18, 2022

How to choose the right Mastodon server without being a huge nerd

Here’s a bit of tough love, bear with me: Stop thinking of yourself as somebody who doesn’t understand Mastodon. You’re better than that. This negative self-talk doesn’t help with anything. It’s not so hard, you just need to keep an open mind. Let me tell you what you need to know without forcing you to read words like “federation”.

TL;DR: Mastodon is like Twitter, the only thing that’s slightly confusing is the fact that you need to choose a server first. Choose a server, follow your friends (it doesn’t matter on which server they are) and soon you’ll have a timeline full of roughly tweet length content you can scroll through. Easy.

Continue reading “How to choose the right Mastodon server without being a huge nerd”
November 18, 2022

Just go “aah!” Hardcore!

My best work happens when a certain kind of relaxed determinism converges with methodic productivity.

If you work long enough in software you’ll meet people who think that success is the result of brute forcing through everything. Work needs to be fast, sleep needs to be less, overtime doesn’t exist because why would you want to do anything but work.

Busy busy busy busy busy busy busy busy busy.

That’s not how life works. That might very well be how certain moments in life lead to a certain form of success, but t’s not a scalable solution to a successful and happy life.

Let’s take action. I’m a big believer in having just a maniacal sense of urgency. So if you can do it after this meeting, I would do it after this meeting. Just a maniacal sense of urgency. Like, if you want to get stuff done, maniacal sense of urgency. Just go “aah!” Hardcore!

Inside Elon Musk’s first meeting with Twitter employees

Some people succeed by being loud and hectic.They shroud themselves in an aura of ever increasing urgency and hustle because – and that’s only my interpretation – they lack the skills to do deep work. They don’t understand that this different way of working even exists. If you seem like you’re busy and confident you must be doing something right.

The unfortunate truth is that people who do the actual work have to pick up the shards of those who rumbled and bumbled through life, breaking things on their way. This brand of workaholism is not cool anymore. It’s just another symptom of toxic alpha male energy nobody needs.

I’ve been blinded by people like this in my early years working. Now I understand that toxic hustle is nothing but a mating dance between somebody and their own ego. It’s not impressive or cool. It’s just clownish behaviour. Everybody is allowed to be a clown. As long as they don’t hurt others by being one.


The most recent episode of ATP has a segment on workaholism culture that’s worth listening to. They go a little more into depth on how a culture like this is detrimental to your health and even to the quality of your work.

November 17, 2022

Like the monkey

Oh no, I missed the once-in-a-lifetime opportunity to make a fantastic “If you have the chance to call your site after Ross’s monkey, you take it” joke in this post.

November 17, 2022

Lost in Localizable.strings

Update: Somebody actually solved my issue. Internet is great. Scroll down to see how this is fixed.

When I wrote about the couple of problems I don’t know how to solve in Stoins, I didn’t anticipate to quickly run into the next one. Stoins is supposed to be available in English and German. With English as the default, I set out to add German translations and watched a couple of tutorials on how to do so.

It’s relatively straight-forward.

  1. Create a Localizable.strings file for every language you want
  2. Xcode finds all translatable strings automatically and you translate them one by one
  3. Done

Unfortunately that’s not exactly how it went. Most strings were found, sure, but those outside of Text() views weren’t and I don’t understand why or how to force Xcode to translate them.

An example

Take everything with a grain of salt. I don’t know what I’m doing. I’m that much of a beginner that we can just accept the fact that literally anything I do can be done in a better way. For now my main goal is for stuff to just work. I don’t want to win any prizes for great code. Yet.

This is an object in Stoins. It’s the blueprint for an achievement:

struct Achievement: Identifiable {
    let id = UUID()
    let name: String
    let description: String
    let image: String
    let badge: String
    
    var conditionAchieved: (() -> Bool)
}

I have an array of objects like this that I use to create the interface. The array looks a little like this:

@Published var achievementsStreaks = [
        Achievement(name: "Fortnight", description: "Have a 14 days streak", image: "badge_fortnight", badge: "badge_fortnight.gltf") {
            var result = false

            // Code that defines if 'result' is true or false

            }
            return result
        },
        
        // Second Achievement
        // Third achievement
        // etc
]

(I’m a bit proud of my use of closures here, ngl. They were very brain-breaking for me and now I’m able to use them without hurting myself in confusion.)

So far, so good. All of this works surprisingly well in terms of how the app is supposed to behave. The only remaining problem is that I can’t seem to figure out how to localize the name and description. Xcode doesn’t manage to automatically find the name and description attributes and when I add them manually to Localizable.strings nothing happens.

I thought I found the answer in this WWDC video about localization in SwiftUI but using LocalizedStringKey only works for views not structs, it seems.

For now I’ll leave it as it is. Only the about screen and achievements are affected which means it’s not an app-breaking issue for those who don’t speak English. Not great. Not terrible. A solid 3.6.

Still, I’d love to publish an update to this post where I explain how somebody helped me solve this and how it was a very easy fix. If that’s you, hit me up. There’s a very cozy comments section down below.

Update: As expected the answer to this couldn’t be more easy, I just wasn’t able to find it. Thanks Philipp for pointing me to this article. And thanks Bei Li! Every user facing string needs to be wrapped in String(localized:""). That’s it. Everything works now. lol.

November 16, 2022

Manufactured motivation and perfectionism

The hardest thing about learning to code is when my ingrained software-design-perfectionism clashes with what I’m able to do. Stoins is going great. I’d say it’s an above average app for somebody who just started coding. Yet I can’t wrap my head around the solutions to some of the problems I’m facing and I struggle with accepting flaws that are solely there because I’m not good enough yet.

Everything works, don’t get me wrong. It’s just not as good as I know it could be. I think a better understanding of concurrency could solve one of the problems. Perhaps a second problem would go away with more knowledge about threads. Oh and something, something state machines? I just don’t understand any of it enough to solve my app’s bugs.

Here’s the thing though: Motivation doesn’t come and go by some magical whim of fate. Motivation is something you create. I know that my motivation is heavily influenced by progress. I tried fixing these issues for so long without getting anywhere that I’m at a point where I need to accept that those are flaws I need to live with. It’s my second self-coded app ever, of course it has problems.

I’m sure my next project will teach me some of the things I need to learn to come back to Stoins and fix it. A cycle of learning through manufactured motivation and not giving in to perfectionism.

November 15, 2022

The woes of a personal brand

I detest influencer culture. I’d rather not be a personal brand but a person. As clear-cut as this might sound, it’s virtually impossible to detach one from the other as soon as you’re visible online. By using marcel.io as the domain for my personal blog, I feel like I somehow slid into influencer territory. At the same time it’s the best name for a personal blog written by a human being called Marcel. Oh well.

Since my urge to start blogging again came up, I ogled tiptop.software as the venue for what I want to write about. I’ve spent most of 2022 learning programming, designed, coded and released an app to the App Store and thought it would be great to write about this under the name Tiptop Software. I installed WordPress, build this theme, wrote the first post and even released it.

A cat wit a toy
Millimeter with her new toy. Look at me, posting cat content on my blog.

However I quickly discovered that writing about cats, games and the weather will undoubtedly be something I want to do (you can look forward to that) and it wouldn’t feel right to put more personal topics into a publication hosted by my “software company”. I also don’t want to limit the frequency of posts to make the blog feel valuable. This isn’t supposed to be one of those blogs where every article has to be a work of art. I want to be able to throw out a quick thought and even end a post in the middle of a senten

November 14, 2022

Empty, digital halls

For me, somebody who has blogged irregularly for more than 15 years, there’s a certain beauty in blogs that have been around and active for decades. Something about a person being able to put that much work into one single project is appealing to me. Grumpy Gamer, Eay and JWZ are just a couple of examples that come to mind.

I didn’t manage to be that consistent and switched domains, blogging software and focus more than once. Only one thing remained true: I love blogs and would very much like to have an active one. In a time where billionaires buy social networks and everyone loses their heads (and potentially their profiles, data, social graph and years worth of content), I want to own a small place to call my own.

So, let’s try this. A fresh start. No old baggage, a simple theme and the very best intentions to fill these empty, digital halls with content for years to come.