<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title>wiechtig</title>
    <link>https://wiechtig.com/</link>
    <description>A systemic thinker interested in the world of business, products and technology.</description>
    <language>en</language>
    <lastBuildDate>Sun, 14 Sep 2025 24:00:00 GMT</lastBuildDate>
    <atom:link href="https://wiechtig.com/feed/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Depth over Noise #3</title>
      <link>https://wiechtig.com/blog/depth-over-noise-3/</link>
      <pubDate>Sun, 14 Sep 2025 24:00:00 GMT</pubDate>
      <author>Florian Wiech</author>
      <guid>https://wiechtig.com/blog/depth-over-noise-3/</guid>
      <description>&lt;p&gt;This time, I have a mixed basket of topics. Let&#39;s get started.&lt;/p&gt;
&lt;h2 id=&quot;supply-chain-attacks-are-underrated&quot; tabindex=&quot;-1&quot;&gt;Supply chain attacks are underrated &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-3/#supply-chain-attacks-are-underrated&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Within software engineering, one of the most significant threats that can impact the entire industry is supply chain attacks.
The industry recently saw two of them, but got quite lucky in the process.
It&#39;s always interesting to inspect the vectors of these attacks.&lt;/p&gt;
&lt;p&gt;The first one was an injection attack via the delivery pipeline.
It&#39;s fascinating to see how this was possible by using products where you might not typically consider this type of threat.&lt;/p&gt;
&lt;p&gt;Social engineering caused the second.
Please ensure you&#39;re using a password manager and enable two-factor authentication (2FA) on all accounts you use.
Also, create custom, random passwords for each service.
Then, please be extra cautious about the emails you receive and take security-related action only when you&#39;re focused on the subject, rather than mindlessly checking boxes.&lt;/p&gt;
&lt;p&gt;Here are the latest ones, the industry talks about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://nx.dev/blog/s1ngularity-postmortem&quot; target=&quot;_blank&quot;&gt;Nx S1ngularity Postmortem&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.stepsecurity.io/blog/supply-chain-security-alert-popular-nx-build-system-package-compromised-with-data-stealing-malware&quot; target=&quot;_blank&quot;&gt;StepSecurity deep dive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thehackernews.com/2025/08/malicious-nx-packages-in-s1ngularity.html&quot; target=&quot;_blank&quot;&gt;The Hacker News shows summary and impact&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=45169657&quot; target=&quot;_blank&quot;&gt;npm chalk and debug packages compromised&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised&quot; target=&quot;_blank&quot;&gt;Aikido deep dive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://xeiaso.net/notes/2025/we-dodged-a-bullet/&quot; target=&quot;_blank&quot;&gt;We all dodged a bullet by Xe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kerkour.com/rust-supply-chain-attacks&quot; target=&quot;_blank&quot;&gt;The problem with package managers by kerkour&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;dont-build-your-castle-in-other-peoples-kingdoms&quot; tabindex=&quot;-1&quot;&gt;Don&#39;t build your castle in other people&#39;s kingdoms &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-3/#dont-build-your-castle-in-other-peoples-kingdoms&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Such an important business lesson: &lt;a href=&quot;https://howtomarketagame.com/2021/11/01/dont-build-your-castle-in-other-peoples-kingdoms/&quot; target=&quot;_blank&quot;&gt;Don&#39;t build your castle in other people&#39;s kingdoms&lt;/a&gt;.
I love the post for its clarity,  showing the issue with actions and rules to prevent them:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In the past ... social media sites have changed their terms or introduced suspicious paid plans ...&lt;br /&gt;
Every single year one social network or another pulls a stunt like this. Somehow people are still shocked when it happens.&lt;br /&gt;
Don’t be.&lt;br /&gt;
It isn’t a matter of if, it is a matter of when. They don’t care about you. You must market your game [website, etc.] as if the platform you are using will go away tomorrow and you will lose access to some or most of your followers.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And the rules he derives from it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Rule #1: Build your castle on land you own.&lt;br /&gt;
Rule #2: Shamelessly use the other kingdoms just like they are using you.&lt;br /&gt;
Rule #3: Always move people back to your kingdom, never to another kingdom.&lt;br /&gt;
Rule #4: Operate like your castle can get shutdown tomorrow.&lt;br /&gt;
Rule #5: Be suspicious of new kingdoms that give away easy visibility.&lt;br /&gt;
Rule #6: Give good reasons to go back to the Castle in your Kingdom. And be persistent!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The problem of building your castle in another kingdom is highlighted in a &lt;a href=&quot;https://theoatmeal.com/comics/reaching_people&quot; target=&quot;_blank&quot;&gt;great comic&lt;/a&gt;:
&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://wiechtig.com/img/EkIed8AYEJ-250.webp 250w, https://wiechtig.com/img/EkIed8AYEJ-316.webp 316w, https://wiechtig.com/img/EkIed8AYEJ-426.webp 426w, https://wiechtig.com/img/EkIed8AYEJ-460.webp 460w, https://wiechtig.com/img/EkIed8AYEJ-500.webp 500w, https://wiechtig.com/img/EkIed8AYEJ-580.webp 580w, https://wiechtig.com/img/EkIed8AYEJ-632.webp 632w, https://wiechtig.com/img/EkIed8AYEJ-768.webp 768w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;img alt=&quot;Reaching people on the internet&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://wiechtig.com/img/EkIed8AYEJ-250.jpeg&quot; width=&quot;768&quot; height=&quot;768&quot; srcset=&quot;https://wiechtig.com/img/EkIed8AYEJ-250.jpeg 250w, https://wiechtig.com/img/EkIed8AYEJ-316.jpeg 316w, https://wiechtig.com/img/EkIed8AYEJ-426.jpeg 426w, https://wiechtig.com/img/EkIed8AYEJ-460.jpeg 460w, https://wiechtig.com/img/EkIed8AYEJ-500.jpeg 500w, https://wiechtig.com/img/EkIed8AYEJ-580.jpeg 580w, https://wiechtig.com/img/EkIed8AYEJ-632.jpeg 632w, https://wiechtig.com/img/EkIed8AYEJ-768.jpeg 768w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;This is one of the reasons I have my own independent website instead of relying on publishing platforms (like Medium, LinkedIn, DEV Community, Substack, etc.).
Within this platform space – with the same issues – there is a new player with a new approach:&lt;/p&gt;
&lt;h3 id=&quot;substacks-publishing-platform-with-prestige-and-marketing-traps&quot; tabindex=&quot;-1&quot;&gt;Substack&#39;s publishing platform with prestige and marketing traps &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-3/#substacks-publishing-platform-with-prestige-and-marketing-traps&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Substack positioned itself as a publishing platform like many others (Medium, DEV Community, Ghost, Beehiiv, WordPress, etc.).
Yet, Substack tries to go down its own route through marketing.
This marketing approach opens new doors for them, but not without raising concerns.&lt;/p&gt;
&lt;p&gt;The trouble with Substack&#39;s marketing explains &lt;a href=&quot;https://daringfireball.net/&quot; target=&quot;_blank&quot;&gt;John Gruber&lt;/a&gt; in the article &lt;a href=&quot;https://daringfireball.net/2025/08/the_substack_branding_and_faux_prestige_trap&quot; target=&quot;_blank&quot;&gt;The Substack Branding and Faux Prestige Trap&lt;/a&gt;. It shows the branding tactic in action:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Substack is a damn good name. It looks good, it sounds good. It’s short and crisp and unique. But now they’ve gotten people to call publications on Substack not “blogs” or “newsletters” but “substacks”.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The article &lt;a href=&quot;https://www.anildash.com/2024/11/19/dont-call-it-a-substack/&quot; target=&quot;_blank&quot;&gt;Don’t Call It a Substack&lt;/a&gt; highlights, why this is a problem:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Imagine the author of a book telling people to “read my Amazon”. A great director trying to promote their film by saying “click on my Max”. That’s how much they’ve pickled your brain when you refer to your own work and your own voice within the context of their walled garden. There is no such thing as “my Substack”, there is only your writing, and a forever fight against the world of pure enshittification.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Then, back to John Gruber&#39;s article, he concludes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;... writes for Substack, formerly with The New York Times. Thanks so much.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;...[The author] does not “write for Substack”. No one would say that Jason Snell “writes for WordPress”, or that Jason Kottke or yours truly “writes for Movable Type”. No one says Molly White, Casey Newton, or Craig Calcaterra “writes for Ghost”, or that Oliver Darcy “writes for Beehiiv”. Only with Substack does anyone perceive creator branding as being subservient to the platform — something that ought to be seen merely as an interchangeable CMS — like that.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;random-reads&quot; tabindex=&quot;-1&quot;&gt;Random Reads &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-3/#random-reads&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.eugenewei.com/&quot; target=&quot;_blank&quot;&gt;Remains of the Day&lt;/a&gt; wrote two pieces I liked a lot. The writing style immediately captivated me.
I delved into each subject and learned a lot.
I can highly recommend these articles.
Perhaps I will revisit them in this newsletter someday, providing my highlights from them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.eugenewei.com/blog/2018/5/21/invisible-asymptotes&quot; target=&quot;_blank&quot;&gt;Invisible asymptotes&lt;/a&gt;: His journey working for big tech and how so-called S-Curves are a thing.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.eugenewei.com/blog/2017/9/14/selfies-as-a-second-language&quot; target=&quot;_blank&quot;&gt;Selfies as a second language&lt;/a&gt;: Reviewing interesting patterns in social media, like: &amp;quot;When I send a Snap [selfie] to any of the people in my address book, the oldies respond, inevitably, with some text message, maybe an emoji if they&#39;re somewhat hip. If I send a Snap to a young&#39;un, inevitably I&#39;ll receive a selfie in response.&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://ciechanow.ski/&quot; target=&quot;_blank&quot;&gt;Bartosz Ciechanowski&lt;/a&gt; creates deep dive articles about various topics with crazy good 3D-showcases you can explore on your own, highly recommended:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ciechanow.ski/cameras-and-lenses/&quot; target=&quot;_blank&quot;&gt;Cameras and Lenses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ciechanow.ski/gps/&quot; target=&quot;_blank&quot;&gt;GPS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;a href=&quot;https://unchartedterritories.tomaspueyo.com/t/geohistory&quot; target=&quot;_blank&quot;&gt;Uncharted Territory has a GeoHistory section&lt;/a&gt;, providing interesting reviews attached with data:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://unchartedterritories.tomaspueyo.com/p/never-bet-against-america&quot; target=&quot;_blank&quot;&gt;Never Bet Against America&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://unchartedterritories.tomaspueyo.com/p/rise-up-europe&quot; target=&quot;_blank&quot;&gt;Rise Up, Europe!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://unchartedterritories.tomaspueyo.com/p/the-birth-of-germany&quot; target=&quot;_blank&quot;&gt;The Birth of German(y)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Comic and meme sites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://xkcd.com/&quot; target=&quot;_blank&quot;&gt;xkcd&lt;/a&gt;: &lt;a href=&quot;https://xkcd.com/2347/&quot; target=&quot;_blank&quot;&gt;Dependency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wiechtig.com/blog/depth-over-noise-3/&quot; target=&quot;_blank&quot;&gt;Good Tech Things&lt;/a&gt;: &lt;a href=&quot;https://www.goodtechthings.com/oss-sos/&quot; target=&quot;_blank&quot;&gt;OSS SOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.comicagile.net/&quot; target=&quot;_blank&quot;&gt;Comic Agilé&lt;/a&gt;: &lt;a href=&quot;https://www.comicagile.net/comic/the-unagile-release-train/&quot; target=&quot;_blank&quot;&gt;The Unagile Release Train&lt;/a&gt;, &lt;a href=&quot;https://www.comicagile.net/comic/readme/&quot; target=&quot;_blank&quot;&gt;ReadMe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://theoatmeal.com/&quot; target=&quot;_blank&quot;&gt;The Oatmeal&lt;/a&gt;: &lt;a href=&quot;https://theoatmeal.com/comics/reaching_people&quot; target=&quot;_blank&quot;&gt;Reaching people on the internet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Depth over Noise #2 – Software Engineering Practices</title>
      <link>https://wiechtig.com/blog/depth-over-noise-2/</link>
      <pubDate>Sun, 31 Aug 2025 24:00:00 GMT</pubDate>
      <author>Florian Wiech</author>
      <guid>https://wiechtig.com/blog/depth-over-noise-2/</guid>
      <description>&lt;p&gt;I&#39;m writing this while sweating my pants off during a heatwave in Frankfurt am Main (FFM) in Germany.
It feels like there is no pleasant summer temperature anymore.
Either it&#39;s rainy, windy and cold, or we&#39;re in the middle of a heatwave.
Both hinder me from enjoying time outside.
Climate change is a thing.
Anyhow, let&#39;s get started.&lt;/p&gt;
&lt;p&gt;This time, we&#39;re examining several software engineering practices.
Since this is what I do for a living, I can fill books here.
However, I have a couple of references I want to share with you today.
A small collection of posts I picked up in the past and still remember, because they aligned with my learnings working in the field.&lt;/p&gt;
&lt;h2 id=&quot;greppability-is-an-underrated-code-metric&quot; tabindex=&quot;-1&quot;&gt;Greppability is an underrated code metric &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-2/#greppability-is-an-underrated-code-metric&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It might seem natural in development to abstract things.
But from an operational perspective, especially in complex systems (which many merge into), greppability is more critical than not repeating yourself (&lt;a href=&quot;https://en.wikipedia.org/wiki/Don%27t_repeat_yourself&quot; target=&quot;_blank&quot;&gt;DRY&lt;/a&gt;).
Let&#39;s elaborate on that a bit.&lt;/p&gt;
&lt;p&gt;From a development perspective, people favour flexibility by encapsulating components.
It promotes separation of concerns.
They create variables and use them later on.
It helps to simplify things, reuse components and avoid errors.
They construct things like names, keys, URLs, etc., which enable changing values only in one place.&lt;/p&gt;
&lt;p&gt;But, from an operational perspective, it all looks very different!
Dealing with much unfamiliar code, I find myself constantly searching inside the codebase.
I&#39;m looking for path URLs, error messages, function names, and other relevant details.
This is especially hard when these are constructed from various variables.&lt;/p&gt;
&lt;p&gt;This behaviour even led to production incidents at work:
Someone deletes some code because it appears to be unused, as determined by grepping the codebase.
To find out afterwards that there is a hidden usage somewhere, weirdly constructed from variables.
But what about typing? In a distributed systems world, you often don&#39;t have that. Grepping is your only option.&lt;/p&gt;
&lt;p&gt;This &lt;a href=&quot;https://morizbuesing.com/blog/greppability-code-metric/&quot; target=&quot;_blank&quot;&gt;article&lt;/a&gt; brings this concept to the point, and it discovered some essentials to look out for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Don&#39;t split up identifiers&lt;/li&gt;
&lt;li&gt;Use the same names for things across the stack&lt;/li&gt;
&lt;li&gt;Flat is better than nested&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;ideas-on-how-the-tech-industry-can-do-better&quot; tabindex=&quot;-1&quot;&gt;Ideas on how the tech industry can do better &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-2/#ideas-on-how-the-tech-industry-can-do-better&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I found &lt;a href=&quot;https://pauldjohnston.medium.com/the-tech-industry-hates-people-that-work-in-it-some-ideas-about-how-we-could-do-better-9c47ea48f059&quot; target=&quot;_blank&quot;&gt;a piece&lt;/a&gt; where someone shares his insights after working for decades in the tech field.
I want to share it because it holds many lessons I have learned myself.
Let&#39;s go through them.&lt;/p&gt;
&lt;h3 id=&quot;know-what-the-need-is&quot; tabindex=&quot;-1&quot;&gt;Know what the need is &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-2/#know-what-the-need-is&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I wrote about &lt;a href=&quot;https://www.wiechtig.com/blog/features-vs-benefits/&quot; target=&quot;_blank&quot;&gt;my journey learning how product development works&lt;/a&gt;.
Collaborating with engineers in my daily business, I see that not everyone shares this understanding or is interested in it.
Due to this phenomenon – developers building products they know nothing about – I find the learnings within &lt;a href=&quot;https://pauldjohnston.medium.com/the-tech-industry-hates-people-that-work-in-it-some-ideas-about-how-we-could-do-better-9c47ea48f059&quot; target=&quot;_blank&quot;&gt;this article&lt;/a&gt; quite familiar.
The article even starts with: &lt;em&gt;Almost everyone I know in tech does not think of tech the way that I do.&lt;/em&gt;
Nailed it.
Here are the highlights:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;There is a difference between thinking you understand your customer‘s needs and actually knowing that the customer has that need.&lt;/li&gt;
&lt;li&gt;If you cannot clearly identify a customer need, then you cannot define the solution that you need to create to meet that need, and you shouldn’t start anything until you do.&lt;/li&gt;
&lt;li&gt;Principle: Meet the need as simply as possible. Understand and meet the need and only the need.&lt;/li&gt;
&lt;li&gt;Principle: Use the shortcuts Luke! Your solution is about how to meet the Need you have identified.
&lt;ul&gt;
&lt;li&gt;Your solution is not about how clever you are as a programmer. Your solution should not be about ensuring that you keep your job by making it impossible for others to understand what you have built…&lt;/li&gt;
&lt;li&gt;Do not build things yourself that other people have built and are cost-effective to use.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;build-to-maintain&quot; tabindex=&quot;-1&quot;&gt;Build to maintain &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-2/#build-to-maintain&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Next, we&#39;re in the development versus maintenance area.
I have seen both worlds and done a fair share myself. I developed and shipped products from scratch, operated 24/7 products for millions of people, and untangled legacy code.
Hence, my previous section in this newsletter was about the importance of greppability in operations.
This is why the section about maintainability is essential:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Principle: Build to maintain because maintenance is far far more painful than initial build
&lt;ul&gt;
&lt;li&gt;What almost nobody is good at is understanding the level of maintenance required for the solution once built.&lt;/li&gt;
&lt;li&gt;Reducing maintenance time is a fundamental good in every single project, and if you can prove that increasing the amount of initial build time is very likely to achieve a reduction in maintenance then longer builds are a reasonable price to pay.&lt;/li&gt;
&lt;li&gt;If the new solution is easier to maintain, because it was built to be maintained more easily, then the conversation changes and the risk changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Principle: Understand how the solution can be retired and/or replaced
&lt;ul&gt;
&lt;li&gt;One of the reasons I think that people who do not understand technology struggle to understand the costs of technology is because, as an industry we are very bad at knowing when to replace a solution.&lt;/li&gt;
&lt;li&gt;Identifying when to replace a solution should be regularly considered and should have some accompanying metrics.&lt;/li&gt;
&lt;li&gt;A team with the best intentions cannot maintain a solution forever, whatever that solution is.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;you-work-with-humans-treat-them-that-way&quot; tabindex=&quot;-1&quot;&gt;You work with humans, treat them that way &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-2/#you-work-with-humans-treat-them-that-way&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;And last but not least, people are humans, not resources!
I believe it is vital that everyone respects that and invests in healthy relationships among coworkers:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Principle: Teams are people not resources
&lt;ul&gt;
&lt;li&gt;I had a principle as a startup CTO which was that my team only needed to do 6 good hours in a day, and it was up to them when they finished. It was informal and not a “hard and fast rule”, but it was important. If someone felt they’d done good work, and wanted to go home early, then they absolutely could. That startup produced some of the most effective and efficient people I’ve ever worked with in tech. It wasn’t perfect, because nothing ever is, but I like to think that people were happy there. I’d far rather have that, than a lot of people stressed about hitting a deadline. It was a better attitude than most companies I’ve worked in (I may be delusional here too!) and the team was not put under pressure by me. We still delivered what we needed and often well before it was needed.&lt;/li&gt;
&lt;li&gt;Look after people, and they will look after you and the company. It’s not a family, it’s a job, so treat people with respect.&lt;/li&gt;
&lt;li&gt;I am very willing to accept that I don’t know everything, but I am not going to accept that people can’t do things because they aren’t used to them. People can learn things, and adapt. There is nothing that says that the way we used to do it in the tech industry is always “right”.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;we-re-post-industrial-and-forget-efficiency&quot; tabindex=&quot;-1&quot;&gt;We&#39;re post-industrial and forget efficiency &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-2/#we-re-post-industrial-and-forget-efficiency&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The personal blog from &lt;a href=&quot;https://www.ufried.com/&quot; target=&quot;_blank&quot;&gt;Uwe Friedrichsen&lt;/a&gt; is a must-read.
I really appreciate his perspective and the way he conveys it.
Today, I brought two special ones I highly suggest you pick up: &lt;a href=&quot;https://www.ufried.com/blog/markets/&quot; target=&quot;_blank&quot;&gt;The evolution of markets&lt;/a&gt; and &lt;a href=&quot;https://www.ufried.com/blog/efficiency_vs_effectiveness/&quot; target=&quot;_blank&quot;&gt;Forget efficiency&lt;/a&gt;.
Let&#39;s explore them.&lt;/p&gt;
&lt;h3 id=&quot;the-evolution-of-markets&quot; tabindex=&quot;-1&quot;&gt;The evolution of markets &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-2/#the-evolution-of-markets&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In this &lt;a href=&quot;https://www.ufried.com/blog/markets/&quot; target=&quot;_blank&quot;&gt;foundational article&lt;/a&gt;, he explains how the market changed over the years and how it affected the work within it.
He goes through the pre-industrial, industrial and post-industrial eras and each&#39;s core properties:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://wiechtig.com/img/RfT5I-Ox8I-250.webp 250w, https://wiechtig.com/img/RfT5I-Ox8I-316.webp 316w, https://wiechtig.com/img/RfT5I-Ox8I-426.webp 426w, https://wiechtig.com/img/RfT5I-Ox8I-460.webp 460w, https://wiechtig.com/img/RfT5I-Ox8I-500.webp 500w, https://wiechtig.com/img/RfT5I-Ox8I-580.webp 580w, https://wiechtig.com/img/RfT5I-Ox8I-632.webp 632w, https://wiechtig.com/img/RfT5I-Ox8I-768.webp 768w, https://wiechtig.com/img/RfT5I-Ox8I-852.webp 852w, https://wiechtig.com/img/RfT5I-Ox8I-920.webp 920w, https://wiechtig.com/img/RfT5I-Ox8I-1160.webp 1160w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://wiechtig.com/img/RfT5I-Ox8I-250.jpeg&quot; width=&quot;1160&quot; height=&quot;539&quot; srcset=&quot;https://wiechtig.com/img/RfT5I-Ox8I-250.jpeg 250w, https://wiechtig.com/img/RfT5I-Ox8I-316.jpeg 316w, https://wiechtig.com/img/RfT5I-Ox8I-426.jpeg 426w, https://wiechtig.com/img/RfT5I-Ox8I-460.jpeg 460w, https://wiechtig.com/img/RfT5I-Ox8I-500.jpeg 500w, https://wiechtig.com/img/RfT5I-Ox8I-580.jpeg 580w, https://wiechtig.com/img/RfT5I-Ox8I-632.jpeg 632w, https://wiechtig.com/img/RfT5I-Ox8I-768.jpeg 768w, https://wiechtig.com/img/RfT5I-Ox8I-852.jpeg 852w, https://wiechtig.com/img/RfT5I-Ox8I-920.jpeg 920w, https://wiechtig.com/img/RfT5I-Ox8I-1160.jpeg 1160w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;/picture&gt;&lt;figcaption&gt;Market phases on the timeline by Uwe Friedrichsen&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As interesting as he describes the pre-industrial markets, the central one I want to examine is the transition from the industrial to the post-industrial era.
For deeper insights, go to his article; it&#39;s really worth a read.
Here are the main highlights so that my thoughts afterwards make sense:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In an &lt;strong&gt;industrial market, demand is a lot higher than supply&lt;/strong&gt;. As a result, sales are certain.
It is defined by the following properties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;High-volume markets&lt;/li&gt;
&lt;li&gt;Low customization of goods&lt;/li&gt;
&lt;li&gt;Supplier-driven&lt;/li&gt;
&lt;li&gt;Low dynamics&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;In a &lt;strong&gt;post-industrial market, supply is a lot higher than demand&lt;/strong&gt;. As a result, sales are uncertain.
It is defined by the following properties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;High-volume markets&lt;/li&gt;
&lt;li&gt;High customization of goods&lt;/li&gt;
&lt;li&gt;Consumer-driven&lt;/li&gt;
&lt;li&gt;High dynamics&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;This differentiation is very, very important.
With this in mind, remember my earlier learning: &amp;quot;know what the need is&amp;quot; with product development driven by consumer needs?
Given that we operate in a post-industrial market, this approach is crucial.
Yet, so many companies and individuals (including myself more often than I would like to admit) are trapped in the industrial environment with the saying &amp;quot;just build it and they will come&amp;quot;.
But that is not reality anymore.&lt;/p&gt;
&lt;p&gt;It is also interesting to see which companies understood this, transitioned accordingly, and which, even today, remain stuck in industrial thinking.
Having worked within various industries, I&#39;ve had the opportunity to observe multiple companies from the inside.&lt;/p&gt;
&lt;p&gt;From my perspective, this ultimately comes down to market pressure.
When they&#39;re the top seller in a regulated industry, already owning a lot of contracts, life is good.
The future might not look that bright, but as long as the revenue is good today, there is rarely a need for real change.
It is that tipping point, when revenue is affected, and the foot really hurts. That&#39;s when companies actually go to work.
Sadly, this is often too late and causes bigger troubles than necessary.
But that&#39;s just the nature of human beings.&lt;/p&gt;
&lt;h3 id=&quot;forget-efficiency&quot; tabindex=&quot;-1&quot;&gt;Forget efficiency &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-2/#forget-efficiency&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article &lt;a href=&quot;https://www.ufried.com/blog/efficiency_vs_effectiveness/&quot; target=&quot;_blank&quot;&gt;Forget Efficiency&lt;/a&gt; discusses how companies prioritise efficiency – optimising internal processes.
While efficiency is excellent in the industrial space, in the post-industrial world, it creates far more software than necessary, which ultimately becomes waste.
That is why it highlights a lack of effectiveness – searching for the right thing and doing only that.&lt;/p&gt;
&lt;p&gt;I already shared quite a few learnings myself in my &lt;a href=&quot;https://www.wiechtig.com/blog/effectiveness-or-efficiency/#the-efficiency-trap&quot; target=&quot;_blank&quot;&gt;the efficiency trap article&lt;/a&gt;.
That&#39;s why I&#39;ll keep this section rather brief and suggest reading this article for further insights.&lt;/p&gt;
&lt;h2 id=&quot;valuable-lessons-on-platforms&quot; tabindex=&quot;-1&quot;&gt;Valuable lessons on platforms &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-2/#valuable-lessons-on-platforms&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;From all the way back, when Google+ was a thing, a Google employee wrote a &lt;a href=&quot;https://gist.github.com/chitchcock/1281611&quot; target=&quot;_blank&quot;&gt;manifest&lt;/a&gt; claiming that platforms are a thing.
Google+ was a social media network which failed.
The Google employee wrote this letter for internals only.
Due to the weirdness of Google+, he unintentionally posted it publicly.
We can actually thank Google+ for being able to read it.
Thanks to this phenomenon, he wrote it bluntly, directly, and in a funny way to read.&lt;/p&gt;
&lt;p&gt;Please note that this was written many years ago; since then, a lot has changed. Therefore, read it more as an entertaining history lesson.
Looking at the content itself, it perfectly sums up the power of platforms.
The oft-quoted letter by Bezos from the early years, shifting the company to a platform-first approach:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;So one day Jeff Bezos issued a mandate. He&#39;s doing that all the time, of course, and people scramble like ants being pounded with a rubber mallet whenever it happens. But on one occasion -- back around 2002 I think, plus or minus a year -- he issued a mandate that was so out there, so huge and eye-bulgingly ponderous, that it made all of his other mandates look like unsolicited peer bonuses.
His Big Mandate went something along these lines:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;All teams will henceforth expose their data and functionality through service interfaces.&lt;/li&gt;
&lt;li&gt;Teams must communicate with each other through these interfaces.&lt;/li&gt;
&lt;li&gt;There will be no other form of interprocess communication allowed: no direct linking, no direct reads of another team&#39;s data store, no shared-memory model, no back-doors whatsoever. The only communication allowed is via service interface calls over the network.&lt;/li&gt;
&lt;li&gt;It doesn&#39;t matter what technology they use. HTTP, Corba, Pubsub, custom protocols -- doesn&#39;t matter. Bezos doesn&#39;t care.&lt;/li&gt;
&lt;li&gt;All service interfaces, without exception, must be designed from the ground up to be externalizable. That is to say, the team must plan and design to be able to expose the interface to developers in the outside world. No exceptions.&lt;/li&gt;
&lt;li&gt;Anyone who doesn&#39;t do this will be fired.&lt;/li&gt;
&lt;li&gt;Thank you; have a nice day!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ha, ha! You 150-odd ex-Amazon folks here will of course realize immediately that #7 was a little joke I threw in, because Bezos most definitely does not give a shit about your day.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Number 7 is a good one.
I don’t care whether it’s true or not.
I just had a good laugh about the last part.
At the end, he went about his learning about platforms:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The Golden Rule of Platforms, &amp;quot;Eat Your Own Dogfood&amp;quot;, can be rephrased as &amp;quot;Start with a Platform, and Then Use it for Everything.&amp;quot; You can&#39;t just bolt it on later. Certainly not easily at any rate -- ask anyone who worked on platformizing MS Office. Or anyone who worked on platformizing Amazon. If you delay it, it&#39;ll be ten times as much work as just doing it correctly up front. You can&#39;t cheat. You can&#39;t have secret back doors for internal apps to get special priority access, not for ANY reason. You need to solve the hard problems up front.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;the-simplicity-curve&quot; tabindex=&quot;-1&quot;&gt;The simplicity curve &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-2/#the-simplicity-curve&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A colleague shared &amp;quot;the simplicity curve&amp;quot; in a presentation.
I came, I saw, I loved it.
It&#39;s in German, and it seems that it took some refinement to get the proper wording.
I translated it into English for this newsletter.
Please apologise if the wording isn&#39;t as precise and fitting as the original.
Here it is:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://wiechtig.com/img/ECj2tRy_k6-250.webp 250w, https://wiechtig.com/img/ECj2tRy_k6-316.webp 316w, https://wiechtig.com/img/ECj2tRy_k6-426.webp 426w, https://wiechtig.com/img/ECj2tRy_k6-460.webp 460w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://wiechtig.com/img/ECj2tRy_k6-250.jpeg&quot; width=&quot;460&quot; height=&quot;391&quot; srcset=&quot;https://wiechtig.com/img/ECj2tRy_k6-250.jpeg 250w, https://wiechtig.com/img/ECj2tRy_k6-316.jpeg 316w, https://wiechtig.com/img/ECj2tRy_k6-426.jpeg 426w, https://wiechtig.com/img/ECj2tRy_k6-460.jpeg 460w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;/picture&gt;&lt;figcaption&gt;The simplicity curve version 3 by Gunter Dueck&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I suppose there&#39;s no need to explain.
Upon reading it, I immediately thought of several uses.
I observed my past experiences and checked where the solutions fitted on the curve.&lt;/p&gt;
&lt;p&gt;I especially love the &amp;quot;stupidly simple: so simplistic&amp;quot; and &amp;quot;ingeniously simple&amp;quot;.
It is truly mind-blowing when solutions serve many people and rely on simple foundations.
That&#39;s the real genius.
Everyone is blown away by asking how that could ever work, and yet it works and has worked for so long, proving it every day.
These cases are truly revolutions.&lt;/p&gt;
&lt;p&gt;You need an example?
Sure, how about computer science?
Everything operates on zero and one.
It all comes down to that.
It&#39;s crazy how you can use this small foundation and change the way everyone behaves.&lt;/p&gt;
&lt;p&gt;As far as I got it, this concept is from the book &amp;quot;swarm stupid – We&#39;re only this stupid together.&amp;quot; by Gunter Dueck.
I haven&#39;t read it, so I can&#39;t comment on it.
But, damn, just that title is a statement that gets my attention.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;That&#39;s it for this one. I guess this was a longer one.
As I mentioned earlier, there is plenty to discuss in this space, and this is just a tiny collection.
I hope you&#39;ve enjoyed the learning as much as I did.
See you soon. 👋&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Depth over Noise #1</title>
      <link>https://wiechtig.com/blog/depth-over-noise-1/</link>
      <pubDate>Sun, 17 Aug 2025 24:00:00 GMT</pubDate>
      <author>Florian Wiech</author>
      <guid>https://wiechtig.com/blog/depth-over-noise-1/</guid>
      <description>&lt;p&gt;I&#39;m going to try something new: a newsletter featuring a curated collection of articles, quotes and more that I find interesting, insightful and worth sharing.&lt;/p&gt;
&lt;p&gt;I enjoy reading and discovering things.
There are quotes in other articles delivering a message better than I could. I want to share that.
Instead of dumping them to social media – and adding more noise – I would rather embed them into context.
This gives me room to explore the depth of the message, providing more thoughts, views, data, analytics or whatever is suitable for it.&lt;/p&gt;
&lt;p&gt;For now, I plan to publish at irregular intervals, when I have something to share.
Let&#39;s get started.&lt;/p&gt;
&lt;h2 id=&quot;the-real-skill-is-to-know-when-to-dive-deep-and-when-to-skip-the-details&quot; tabindex=&quot;-1&quot;&gt;The real skill is to know when to dive deep and when to skip the details &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-1/#the-real-skill-is-to-know-when-to-dive-deep-and-when-to-skip-the-details&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Within the context of agentic coding, &lt;a href=&quot;https://rgoldfinger.com/blog/2025-07-26-claude-code-is-a-slot-machine/&quot; target=&quot;_blank&quot;&gt;this article&lt;/a&gt; states that these tools are slot machines.
You put in the task you want to achieve, and then you wait for the output and see whether it does what you wanted or not.
When it works, great, you head to the next task.
If it doesn&#39;t, you may put in more money and try again, hoping for a better outcome.
If you&#39;re not making progress, you&#39;ll take the time to analyse, understand and do it yourself.&lt;/p&gt;
&lt;p&gt;Besides the message of the post, I love this learning, I couldn&#39;t express myself better:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Early on in my career, someone much wiser than me described two modes of operating: the Conjurer and the Scribe. The Conjurer is a wizard, creating realities out of thin air, working in broad strokes and never going deep. The Scribe reads every line of the text, and every line it refers to, understanding everything to its deepest and fullest extent before acting. Some of us tend more towards one way of operating or the other. Both are critical.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But the real skill, the real thing that makes you effective, is knowing when to use one mode or the other, and being able to switch between them as needed. When does understanding matter? When should we skip it and move onto the next thing?&lt;/strong&gt; In a field with endless and important detail at every level, we have to both “let it go and move on” and “slow down” constantly.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;back-to-the-future-from-text-back-to-the-spoken-word&quot; tabindex=&quot;-1&quot;&gt;Back to the future: From text back to the spoken word &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-1/#back-to-the-future-from-text-back-to-the-spoken-word&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A &lt;a href=&quot;https://internetobservatorium.substack.com/p/aus-dem-internet-observatorium-87&quot; target=&quot;_blank&quot;&gt;section within a German newsletter about the situation of journalism&lt;/a&gt; got my attention.
It starts with a classic, well-written quote regarding the internet and masses of content these days:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What does it mean to live in a world of virtually infinite and ever-growing content? We see the result every day: a relentless race for attention, whether in social media, journalism, or on the web. A huge long tail of content whose lack of visibility is tantamount to non-existence.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Going further, when considering newspapers and social media, my thoughts were always focused on the different media types, including text, images, and video.
But that it represents a different orientation is something I haven&#39;t thought about before:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;While orality was oriented toward relationships, literacy is oriented toward objects&lt;/strong&gt;. Accordingly, as Walter Ong points out, the distinction between orality and literacy does not represent an evolutionary progression from “primitive” to “civilised.” Instead, it brought with it both gains and losses. &lt;strong&gt;Oral cultures embodied liveliness, creativity in presentation, a sense of community, and dynamism&lt;/strong&gt;. Conversely, &lt;strong&gt;literacy means critical thinking, individualisation and autonomy, complex knowledge structures, and the globalisation of cultural forms of expression&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now, heading to journalism itself.
The author expects a declining relevance of text and complexity and growing importance of brevity, moving images, and emotionalisation and concludes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Privately funded journalism finds itself in a dilemma due to economic constraints: if the audience develops into part of an oral culture, podcasts or videos may not do it justice. Instead, it will probably only be possible to do so if one fully commits to becoming an identity medium—in other words, a medium that limits its reporting to confirming particular worldviews, validating tribal affiliations, cultivating enemy stereotypes, and fueling conflicts. In the US, such a media landscape is already largely a reality; in Germany, we are beginning to see the first outlines.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Digging through the links of this newsletter, I ended up discovering &lt;a href=&quot;https://twitter.com/lessin/status/1551931628305502208&quot; target=&quot;_blank&quot;&gt;how entertainment is evolving&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Pre-Internet &#39;People Magazine&#39; Era – before social media, magazines with mass publication.&lt;/li&gt;
&lt;li&gt;Content from &#39;your friends&#39; kills People Magazine – private online bubbles between real friends.&lt;/li&gt;
&lt;li&gt;Professional &#39;Friends&#39; (also known as influencers) kill Real Friends – Professional friends spend all their time being pretty and amusing. They out-compete your actual friends on the entertainment they provide.&lt;/li&gt;
&lt;li&gt;Algorithmic Everyone kills Influencers. – Algorithmically sourced content to your personal needs from &#39;everyone&#39;; anyone can be viral today and irrelevant tomorrow.&lt;/li&gt;
&lt;li&gt;Next is pure-Al content, which beats &#39;Algorithmic Everyone&#39; – bet about fully personalised generated content created by AI.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;reports-of-the-german-inner-circle-of-power&quot; tabindex=&quot;-1&quot;&gt;Reports of the German inner circle of power &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-1/#reports-of-the-german-inner-circle-of-power&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;During my summer vacation, I picked up all three audiobooks from Robin Alexander. He is a German journalist capturing political events and has deep roots in the inner circles of power.
It is interesting to hear how individuals acted within the political debate of past events.
I found it especially exciting, having lived through these times myself and noticed this from the outside.&lt;/p&gt;
&lt;p&gt;For me, phrases like &lt;em&gt;report of the inner circle of power&lt;/em&gt; carry a kind of cinematic weight.
They don’t just tell you what the book is about—they make you &lt;em&gt;feel&lt;/em&gt; it.
It’s a promise.
The place where decisions are made, where power breathes and pulses behind closed doors, has just been opened up to take a look at.
That phrasing elevates the whole thing.
And these books hold their promise.&lt;/p&gt;
&lt;p&gt;Anyhow, the books have great listening experiences.
They were so exciting, I couldn&#39;t put them down:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Die Getriebenen (en: The Driven)&lt;/strong&gt;, published March 2017, (🇩🇪|€) &lt;a href=&quot;https://www.hugendubel.de/de/hoerbuch_download/robin_alexander-die_getriebenen-47571272-produkt-details.html&quot; target=&quot;_blank&quot;&gt;Hugendubel&lt;/a&gt;, &lt;a href=&quot;https://www.thalia.de/shop/home/artikeldetails/A1043290140&quot; target=&quot;_blank&quot;&gt;Thalia&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The opening of the border to refugees in autumn 2015 divided the country – some praise Angela Merkel&#39;s moral stance, others condemn the surrender of sovereignty. However, what appears to be deliberate action is, in reality, a policy of muddling through, tactical manoeuvring, and vacillation, fueled by lofty ideals and opportunism. Robin Alexander shows that the political actors are driven, torn between self-imposed constraints and the rapid succession of events.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Machtverfall (en: Decline in Power)&lt;/strong&gt;, published June 2021, (🇩🇪|€) &lt;a href=&quot;https://www.hugendubel.de/de/hoerbuch_download/robin_alexander-machtverfall-40756538-produkt-details.html&quot; target=&quot;_blank&quot;&gt;Hugendubel&lt;/a&gt;, &lt;a href=&quot;https://www.thalia.de/shop/home/artikeldetails/A1060829487&quot; target=&quot;_blank&quot;&gt;Thalia&lt;/a&gt;, &lt;a href=&quot;https://plus.rtl.de/hoerbuecher/machtverfall-robin-alexander-prh-9783844543636&quot; target=&quot;_blank&quot;&gt;RTL+&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;At the end of her term in office, Angela Merkel faces what is probably her greatest challenge yet. But the chancellor, who has often risen to the occasion in emergencies, is reaching the limits of her authority in this crisis. According to Robin Alexander, the pandemic is just another spectacular chapter in an even greater drama: the end of an entire era. The book tells the story behind the scenes: of the tough, long battle within the inner circles of power in the republic and of the showdown over Merkel&#39;s succession, which almost tore her party apart.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Letzte Chance (en: Last Chance)&lt;/strong&gt;, published June 2025, (🇩🇪|€) &lt;a href=&quot;https://www.hugendubel.de/de/hoerbuch_download/robin_alexander-letzte_chance_der_neue_kanzler_und_der_kampf_um_die_demokratie-50832387-produkt-details.html&quot; target=&quot;_blank&quot;&gt;Hugendubel&lt;/a&gt;, &lt;a href=&quot;https://www.thalia.de/shop/home/artikeldetails/A1075584455&quot; target=&quot;_blank&quot;&gt;Thalia&lt;/a&gt;, &lt;a href=&quot;https://plus.rtl.de/hoerbuecher/letzte-chance-der-neue-kanzler-und-der-kampf-um-die-demokratie-robin-alexander-dav-9783742434753&quot; target=&quot;_blank&quot;&gt;RTL+&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As the new chancellor, Friedrich Merz faces enormous challenges. Enemies of democracy, both internal and external, are preparing to storm the liberal order. The electoral success of populist parties threatens to blow apart the political centre. With Trump&#39;s re-election and Russia&#39;s advance, Germany&#39;s role in the world will change radically. Robin Alexander takes a look behind the scenes at one of the most decisive phases in German politics, in which a fragmented party landscape and a polarised public make stable majorities almost impossible.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;about-this-newsletter&quot; tabindex=&quot;-1&quot;&gt;About this newsletter &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/depth-over-noise-1/#about-this-newsletter&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I believe that written content – or any type of content – has an expiration date.
Just as groceries have an expiry date listed on the packaging, every piece of content has one too.
However, on content, there might only be the creation date shown.
The content churn is highly dynamic and unclear.
No one can look into the future.&lt;/p&gt;
&lt;p&gt;When I put in the effort to write an article, I try to stick with content that has been around for a while.
Readers should find in my blog archive articles that will remain relevant, whether you read them today or in a couple of years.
This is why I choose content that I believe will stay up-to-date for as long as possible.
It should convey a clear message that I can sum up in a sentence or two.&lt;/p&gt;
&lt;p&gt;But these guidelines limit the content I can write about.
I have a hard time writing about current events, news, or topics because the expiration date tends to be short.&lt;/p&gt;
&lt;p&gt;What I like about newsletters, on the other hand, is that they are a snapshot of a point in time.
They give me the room to explore all the things I missed for my articles.
If some content prevails, great; it remains. If not, proceed to the next issue.&lt;/p&gt;
&lt;p&gt;That&#39;s the reason why I try this experiment with “newsletters”.
For now, it is just another post on my blog, with a familiar name across the series.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Git GUIs are far superior to the CLI</title>
      <link>https://wiechtig.com/blog/git-gui-superior-to-cli/</link>
      <pubDate>Sun, 10 Aug 2025 24:00:00 GMT</pubDate>
      <author>Florian Wiech</author>
      <guid>https://wiechtig.com/blog/git-gui-superior-to-cli/</guid>
      <description>&lt;p&gt;I see many developers swearing by the Git CLI.
They can’t understand how anyone could ever think about using something different.&lt;/p&gt;
&lt;p&gt;I know the baseline Git commands myself, but I would&#39;ve trouble rebasing out of a branch merge conflict only using the CLI.
For most kinds of git usage, I turn to a UI.
It visualises everything I need &lt;em&gt;all the time&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;There are a couple of things where I think the UI has an edge:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I see the entire history and git log. It is a graph that I can inspect and filter. The git log is my default view.&lt;/li&gt;
&lt;li&gt;I don’t have to type yet another command – not even the three char shortcuts everybody uses. All my local and remote branches are listed in the sidebar—no need for any command.&lt;/li&gt;
&lt;li&gt;For interactive rebases, I see the entire history and move everything around until I’m happy. No need to do it in a strict order.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://wiechtig.com/img/DUGkI4zHHN-250.webp 250w, https://wiechtig.com/img/DUGkI4zHHN-316.webp 316w, https://wiechtig.com/img/DUGkI4zHHN-426.webp 426w, https://wiechtig.com/img/DUGkI4zHHN-460.webp 460w, https://wiechtig.com/img/DUGkI4zHHN-500.webp 500w, https://wiechtig.com/img/DUGkI4zHHN-580.webp 580w, https://wiechtig.com/img/DUGkI4zHHN-632.webp 632w, https://wiechtig.com/img/DUGkI4zHHN-768.webp 768w, https://wiechtig.com/img/DUGkI4zHHN-852.webp 852w, https://wiechtig.com/img/DUGkI4zHHN-920.webp 920w, https://wiechtig.com/img/DUGkI4zHHN-1160.webp 1160w, https://wiechtig.com/img/DUGkI4zHHN-1536.webp 1536w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://wiechtig.com/img/DUGkI4zHHN-250.jpeg&quot; width=&quot;1536&quot; height=&quot;974&quot; srcset=&quot;https://wiechtig.com/img/DUGkI4zHHN-250.jpeg 250w, https://wiechtig.com/img/DUGkI4zHHN-316.jpeg 316w, https://wiechtig.com/img/DUGkI4zHHN-426.jpeg 426w, https://wiechtig.com/img/DUGkI4zHHN-460.jpeg 460w, https://wiechtig.com/img/DUGkI4zHHN-500.jpeg 500w, https://wiechtig.com/img/DUGkI4zHHN-580.jpeg 580w, https://wiechtig.com/img/DUGkI4zHHN-632.jpeg 632w, https://wiechtig.com/img/DUGkI4zHHN-768.jpeg 768w, https://wiechtig.com/img/DUGkI4zHHN-852.jpeg 852w, https://wiechtig.com/img/DUGkI4zHHN-920.jpeg 920w, https://wiechtig.com/img/DUGkI4zHHN-1160.jpeg 1160w, https://wiechtig.com/img/DUGkI4zHHN-1536.jpeg 1536w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;/picture&gt;&lt;figcaption&gt;Git-Fork showing the graph, feature branches and recent code changes&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;How does this result in day-to-day operations?
Somehow, I’m often faster at answering questions about the history and what has been done.
Just because I don’t have to execute a few commands and interpret the result to gain an understanding what happened.
I switch to the app. Everything is already listed.&lt;/p&gt;
&lt;p&gt;Sometimes even the best engineers make mistakes (like accidentally creating these horrible “Merge branch …” commits).
Often, I’m the one pointing it out, because I see it right there.&lt;/p&gt;
&lt;p&gt;Overall, I find it very interesting how religious developers are about using git from the command line.
Yet, through all the moving parts, especially the graph based history, it is a perfect match for advanced UIs.&lt;/p&gt;
&lt;p&gt;To take anything from this post, it is this:
Don’t be too religious.
Find your workflow that suits your needs.
Sometimes it is best to take the best aspects from two worlds.
There is no shame in using a UI, quite far from it.&lt;/p&gt;
&lt;p&gt;There is one &lt;em&gt;git alias&lt;/em&gt; I appreciate, though: &lt;code&gt;pfusch&lt;/code&gt;.
&lt;a href=&quot;https://www.dict.cc/?s=Pfusch&quot; target=&quot;_blank&quot;&gt;&lt;em&gt;Pfusch&lt;/em&gt;&lt;/a&gt; is a German noun and means to botch something.
Many of us do this all the time by force pushing to the branch we&#39;re working on.
The alias is the perfect combination of an actual word that is so close to the command.
Anyway, here is the alias:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alias pfush=&#39;git push --force&#39;
&lt;/code&gt;&lt;/pre&gt;
</description>
    </item>
    <item>
      <title>ClickOps: It&#39;s the worst</title>
      <link>https://wiechtig.com/blog/clickops-is-the-worst/</link>
      <pubDate>Thu, 20 Feb 2025 24:00:00 GMT</pubDate>
      <author>Florian Wiech</author>
      <guid>https://wiechtig.com/blog/clickops-is-the-worst/</guid>
      <description>&lt;p&gt;Me starting a project:
Oh, cool, look at the gorgeous UI.
I click everything together, until I’m done.
Two years later, I want to change some features to keep the solution useful.
Returning to the project, I realise the UI has been redesigned.
I’m entirely out of luck to understand the default settings and my configuration.
I have no idea what I’ve done before.&lt;/p&gt;
&lt;p&gt;To update things, I have to relearn the UI and reverse engineer what I&#39;ve done.
This gets even more complicated when the solution involves authorisation.
It is the perfect spot to change something that now leaks sensitive information or allows privilege escalation.
A horrible place to be.&lt;/p&gt;
&lt;p&gt;Configuring a system by clicking through a UI is called ClickOps between engineers.
And we hate it.
Through all my years of engineering, I learned:
&lt;strong&gt;Never ever do &lt;a href=&quot;https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExZGlsenEydGtiaDYwaTRpbm5mazZoMGtmNjFubXh3cnVqdGp6MnRsdCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/7VHV66bRjGRSo/giphy.gif&quot; target=&quot;_blank&quot;&gt;ClickOps&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The better alternative is called &lt;em&gt;Infrastructure as Code (IaC)&lt;/em&gt; and &lt;em&gt;Configuration as Code (CaC)&lt;/em&gt;.
Use configs, check them into version control and automate as much as possible.
It helps to&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;understand infrastructure without having access to the production systems,&lt;/li&gt;
&lt;li&gt;replicate entire application environments with a click of a button,&lt;/li&gt;
&lt;li&gt;rely on stable APIs instead of brand-related UIs that change frequently,&lt;/li&gt;
&lt;li&gt;scale infrastructure without repetitive monkey work.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;it-sneaks-in-faster-than-you-think&quot; tabindex=&quot;-1&quot;&gt;It sneaks in faster than you think. &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/clickops-is-the-worst/#it-sneaks-in-faster-than-you-think&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In various applications and software development environments, ClickOps quickly sneaks in without often realising it.
In other words, it seems to be everywhere.&lt;/p&gt;
&lt;h3 id=&quot;cloud&quot; tabindex=&quot;-1&quot;&gt;Cloud &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/clickops-is-the-worst/#cloud&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The most obvious ones are about infrastructure, especially the cloud.
The core of the cloud is an API to deploy infrastructure.
Yet, people use UIs to configure cloud environments.
Why?&lt;/p&gt;
&lt;p&gt;When you start with the cloud for the first time, the UI is the easiest and most straightforward way to get started.
That&#39;s what the UI is for.
You can explore, and you learn.
So, no bad feelings here.
But, building this way a production app is a bad idea.
Please use Terraform, Pulumi, CloudFormation, etc. for infrastructure deployments or Ansible, etc. for low-level instance configuration.&lt;/p&gt;
&lt;h3 id=&quot;desktops&quot; tabindex=&quot;-1&quot;&gt;Desktops &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/clickops-is-the-worst/#desktops&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In desktop development we use Visual Studio for Windows or XCode for macOS.
These IDEs have buttons everywhere.
Sure, these buttons change a config you can put into version control.
Yet, the config by itself is internal jibberish.
I can&#39;t read it without knowing about it&#39;s internals.&lt;/p&gt;
&lt;p&gt;You find tons of articles&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://wiechtig.com/blog/clickops-is-the-worst/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; explaining how to configure something, showing plenty of screenshots where to click next.
These are great blog posts, but it runs cold down the back of my neck looking at all the screenshots.
I have to search in a picture where to click next.
It just feels wrong (so wrong).
Luckily there is &lt;a href=&quot;https://github.com/yonaskolb/XcodeGen&quot; target=&quot;_blank&quot;&gt;community&lt;/a&gt; &lt;a href=&quot;https://github.com/realm/SwiftLint&quot; target=&quot;_blank&quot;&gt;driven&lt;/a&gt; &lt;a href=&quot;https://github.com/fastlane/fastlane&quot; target=&quot;_blank&quot;&gt;work&lt;/a&gt; and &lt;a href=&quot;https://bazel.build/&quot; target=&quot;_blank&quot;&gt;advanced build systems&lt;/a&gt; which help to improve engineering practices.&lt;/p&gt;
&lt;p&gt;Don&#39;t get me wrong, with a Linux setup, you get really weird commands.
You have no idea what a flag does just by looking at it.
For example, when configuring the SSH client Dropbear, use &lt;code&gt;-s&lt;/code&gt; to disable passwords. What? Why &lt;em&gt;s&lt;/em&gt;?! That makes no sense.&lt;/p&gt;
&lt;p&gt;But this is a big one: When you work through the CLI, you end up with a shell script.
It contains all necessary commands and comments for additional explanation.
At best it highlights the version of the tools used.
This setup can be executed, understood, recreated and even adapted in the future.
It saves tons of time down the road.&lt;/p&gt;
&lt;h3 id=&quot;and-so-many-more&quot; tabindex=&quot;-1&quot;&gt;And so many more &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/clickops-is-the-worst/#and-so-many-more&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;There are so many more areas, which would blow up my article.
Embedded development helps with some quick and easy setup of IDEs for beginners.
They are great.
Yet again, it&#39;ll hurt in the long run when you want to scale and go to production.
And then there are so many legacy apps across all the stacks.
They basically require ClickOps...&lt;/p&gt;
&lt;h2 id=&quot;shoutout-to-all-providers-offering-an-api-and-shame-on-you-if-you-dont&quot; tabindex=&quot;-1&quot;&gt;Shoutout to all providers offering an API, and shame on you if you don&#39;t &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/clickops-is-the-worst/#shoutout-to-all-providers-offering-an-api-and-shame-on-you-if-you-dont&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Shoutout to all the providers and software vendors who embed APIs and IaC tooling for their customers. You rock.&lt;/p&gt;
&lt;p&gt;For all others, by not shipping an API for your customers to use, you&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;slow down your customers. They can&#39;t innovate with you in a fast and scaled environment.&lt;/li&gt;
&lt;li&gt;force your customers to ignore good engineering practices. It causes a complexity debt on their side.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Luckily, Developer Experience (DX) is an emerged job position.
Startups heavily invest into it because they recognised the limitations listed above.
Many of them who have to scale are on track here.
But a lot of software is legacy, where it looks very different.&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot; /&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;I have a list of some article examples which show images how to set something up. But I didn&#39;t link any of them, because it isn&#39;t their fault that they show screenshots. The authors did a great job. It&#39;s the providers building the ecosystem to blame. &lt;a href=&quot;https://wiechtig.com/blog/clickops-is-the-worst/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</description>
    </item>
    <item>
      <title>Open Source is a strategy, not a lifestyle</title>
      <link>https://wiechtig.com/blog/open-source-strategy/</link>
      <pubDate>Sun, 09 Feb 2025 24:00:00 GMT</pubDate>
      <author>Florian Wiech</author>
      <guid>https://wiechtig.com/blog/open-source-strategy/</guid>
      <description>&lt;p&gt;I see so many engineers dedicating their lives towards open source.
They use their spare time to contribute to projects and push the boundaries of technology. For everyone doing this, I can say heartfelt &lt;em&gt;thank you&lt;/em&gt;!&lt;/p&gt;
&lt;p&gt;Due to the many people and organisations contributing to open-source, we can observe several behaviours in this ecosystem.
Some of them are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Maintainers are burned out because of the project&#39;s change requests and demands.&lt;/li&gt;
&lt;li&gt;Maintainers don&#39;t get paid for their open-source work. They struggle to make a living from their efforts.&lt;/li&gt;
&lt;li&gt;Companies change their license from being open to permissive.&lt;/li&gt;
&lt;li&gt;Companies taking parts of their ecosystem open source as a sales channel for their paid offering.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let me bring you on a short journey through some lowlights of the open-source ecosystem:&lt;/p&gt;
&lt;h2 id=&quot;only-a-tiny-fraction-of-people-can-live-from-open-source&quot; tabindex=&quot;-1&quot;&gt;Only a tiny fraction of people can live from open-source &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/open-source-strategy/#only-a-tiny-fraction-of-people-can-live-from-open-source&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;People making a living from open-source only represent a tiny fraction of the entire open-source ecosystem&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://wiechtig.com/blog/open-source-strategy/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;.
Others have a hard time making enough to survive the day, while their software is used by most major companies&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://wiechtig.com/blog/open-source-strategy/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;.
Since there are plenty of developers working on open-source in their free time, &lt;a href=&quot;https://xkcd.com/2347/&quot; target=&quot;_blank&quot;&gt;many&lt;/a&gt; &lt;a href=&quot;https://www.goodtechthings.com/oss-sos/&quot; target=&quot;_blank&quot;&gt;memes&lt;/a&gt; &lt;a href=&quot;https://www.goodtechthings.com/maintainers-vs-companies/&quot; target=&quot;_blank&quot;&gt;highlight&lt;/a&gt; their situation.&lt;/p&gt;
&lt;h2 id=&quot;maintainers-struggle-to-get-reimbursements-for-their-efforts&quot; tabindex=&quot;-1&quot;&gt;Maintainers struggle to get reimbursements for their efforts &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/open-source-strategy/#maintainers-struggle-to-get-reimbursements-for-their-efforts&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You might remember the &lt;a href=&quot;https://tukaani.org/xz-backdoor/&quot; target=&quot;_blank&quot;&gt;xz backdoor&lt;/a&gt; &lt;a href=&quot;https://www.openwall.com/lists/oss-security/2024/03/29/4&quot; target=&quot;_blank&quot;&gt;issue&lt;/a&gt; in 2024.
The &lt;a href=&quot;https://research.swtch.com/xz-timeline&quot; target=&quot;_blank&quot;&gt;timeline shows&lt;/a&gt; the xz utility is a widely used package maintained by a single person without reimbursement.
It nearly caused a vast supply chain attack.&lt;/p&gt;
&lt;p&gt;Another example is the &lt;a href=&quot;https://github.com/zloirock/core-js/blob/master/docs/2023-02-14-so-whats-next.md&quot; target=&quot;_blank&quot;&gt;core-js situation&lt;/a&gt;.
It is a polyfill library for JavaScript applications&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://wiechtig.com/blog/open-source-strategy/#fn3&quot; id=&quot;fnref3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;.
However, the maintainer has problems getting enough reimbursement for his efforts.
This caused a &lt;a href=&quot;https://github.com/zloirock/core-js/blob/master/docs/2023-02-14-so-whats-next.md&quot; target=&quot;_blank&quot;&gt;lengthy article&lt;/a&gt; about his situation (with a ton of details I won&#39;t go into here).&lt;/p&gt;
&lt;h2 id=&quot;companies-claim-to-be-open-but-restrict-the-ecosystem&quot; tabindex=&quot;-1&quot;&gt;Companies claim to be open but restrict the ecosystem &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/open-source-strategy/#companies-claim-to-be-open-but-restrict-the-ecosystem&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We saw the &lt;a href=&quot;https://code.visualstudio.com/&quot; target=&quot;_blank&quot;&gt;VSCode&lt;/a&gt; Editor climb to the top, being the most used and loved one&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://wiechtig.com/blog/open-source-strategy/#fn4&quot; id=&quot;fnref4&quot;&gt;[4]&lt;/a&gt;&lt;/sup&gt;.
It makes a big statement about being open-source.
The &lt;a href=&quot;https://github.com/microsoft/monaco-editor&quot; target=&quot;_blank&quot;&gt;Monaco Editor&lt;/a&gt; and the core &lt;a href=&quot;https://vscodium.com/&quot; target=&quot;_blank&quot;&gt;VSCodium&lt;/a&gt; are publicly available.
While focusing on product adoption via open-source communities, Microsoft built extensions and the marketplace with a proprietary license.
Today, VSCode is a product with deep integrations for Microsoft commercial products&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://wiechtig.com/blog/open-source-strategy/#fn5&quot; id=&quot;fnref5&quot;&gt;[5]&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;h2 id=&quot;companies-changing-their-licenses&quot; tabindex=&quot;-1&quot;&gt;Companies changing their licenses &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/open-source-strategy/#companies-changing-their-licenses&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Some companies &lt;a href=&quot;https://techcrunch.com/2023/03/02/how-to-turn-an-open-source-project-into-a-profitable-business/&quot; target=&quot;_blank&quot;&gt;start as open-source&lt;/a&gt; and monetise it after they gain traction.
Sadly, this caused various changes in licensing in the past:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Elastic changing ElasticSearch to a &lt;a href=&quot;https://venturebeat.com/business/elastic-ceo-reflects-on-amazon-spat-license-switch-and-the-principles-of-open-source/&quot; target=&quot;_blank&quot;&gt;proprietary “source available” license&lt;/a&gt; because of product confusion and &lt;a href=&quot;https://www.elastic.co/blog/elasticsearch-is-open-source-again&quot; target=&quot;_blank&quot;&gt;opened it up&lt;/a&gt; a couple years later.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license&quot; target=&quot;_blank&quot;&gt;Terraform adopted a proprietary license&lt;/a&gt; due to its creator company getting ready to be &lt;a href=&quot;https://newsroom.ibm.com/2024-04-24-IBM-to-Acquire-HashiCorp-Inc-Creating-a-Comprehensive-End-to-End-Hybrid-Cloud-Platform&quot; target=&quot;_blank&quot;&gt;bought by IBM&lt;/a&gt;. They restricted its usage, and companies building products based on it could no longer use Terraform. It forced the open-source clone &lt;a href=&quot;https://opentofu.org/manifesto/&quot; target=&quot;_blank&quot;&gt;OpenTofu&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Redis &lt;a href=&quot;https://redis.io/blog/redis-adopts-dual-source-available-licensing/&quot; target=&quot;_blank&quot;&gt;switching the license&lt;/a&gt; forced multiple open-source clones, such as &lt;a href=&quot;https://valkey.io/&quot; target=&quot;_blank&quot;&gt;Valkey&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;In the WordPress ecosystem, two companies (Automattic against WP Engine) are &lt;a href=&quot;https://blog.pragmaticengineer.com/wordpress-struggles/&quot; target=&quot;_blank&quot;&gt;fighting in the open&lt;/a&gt; to be the market leader.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;engineers-doing-open-source-as-a-hobby&quot; tabindex=&quot;-1&quot;&gt;Engineers doing open-source as a hobby &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/open-source-strategy/#engineers-doing-open-source-as-a-hobby&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On the developer side, it feels more religious: “My code is always open-source. I won&#39;t do these things. I believe in open-source.”
On one hand, I like and can relate to that statement.
On the other hand, we must recognise what a luxury it is to be able to say that.
Through well-paid employment, we have a couple of hours each week to contribute.
We can engage in these donation exercises.
Not everyone is blessed with that.
Most people have to make money to survive the day.
For that reason, it&#39;s completely acceptable to ask for a payment in general.&lt;/p&gt;
&lt;p&gt;Building something in your spare time, with the motivation to solve a need, is a great thing.
If your solution gains traction and adoption, maintainers will continue to do what they have always loved: extend and maintain the project.
But this has its limits.
At a certain point, it&#39;s just too much for one person.&lt;/p&gt;
&lt;p&gt;When a project gains traction, maintainers might not realise that the operating mode has changed.
A single-person project turned into a venture that requires more effort.
Other tasks, such as supporting others and establishing maintenance resources to handle the increased efforts, emerge.
This is the point at which a maintainer should reassess the situation.
For example: examine the project from a management or even business perspective.
Or clearly express your situation without &lt;a href=&quot;https://mikemcquaid.com/open-source-maintainers-owe-you-nothing/&quot; target=&quot;_blank&quot;&gt;mimicking company communications&lt;/a&gt; spreading false beliefs.&lt;/p&gt;
&lt;p&gt;A positive example I appreciate for their clarity is &lt;a href=&quot;https://netnewswire.com/&quot; target=&quot;_blank&quot;&gt;NetNewsWire&lt;/a&gt;.
A publicly available RSS reader for the Apple ecosystem.
There are tons of RSS readers, many even a paid offering.
In this market, &lt;a href=&quot;https://netnewswire.blog/2021/12/28/on-not-being.html&quot; target=&quot;_blank&quot;&gt;NetNewsWire clearly states they are not the free alternative&lt;/a&gt;.
They want to make a great, free RSS reader but are picky and careful about adding features.
They&#39;re not mimicking the features of other commercial apps.
They’re glad those other apps exist because, among other things, those features have already been done, and they don’t have to do them.&lt;/p&gt;
&lt;h3 id=&quot;earning-from-open-source-is-hard&quot; tabindex=&quot;-1&quot;&gt;Earning from open-source is hard &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/open-source-strategy/#earning-from-open-source-is-hard&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Companies often turn to open-source to get away from license cost&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://wiechtig.com/blog/open-source-strategy/#fn6&quot; id=&quot;fnref6&quot;&gt;[6]&lt;/a&gt;&lt;/sup&gt;.
Their goal is to save money.
Their willingness to pay for open-source is already unlikely.
This raises the question, how do you make money from software?
How do you distribute software?&lt;/p&gt;
&lt;p&gt;Marijn Haverbeke already faced these questions with his libraries.
He has an &lt;a href=&quot;https://marijnhaverbeke.nl/blog/sustainable-maintenance.html&quot; target=&quot;_blank&quot;&gt;excellent blog post&lt;/a&gt; highlighting options from closed source up to open source.
Ultimately, he chose to go for open-source.
He added a social responsibility.
It means, when you use the software in any commercial, he expects that you set up a donation plan.
It helps others to adopt the software and contribute to it quickly.
He takes the risk of others taking social responsibility seriously.&lt;/p&gt;
&lt;p&gt;As these sponsorships go, they have extremely low conversion rates.
&lt;a href=&quot;https://www.youtube.com/watch?v=tGarfK3ejHQ&quot; target=&quot;_blank&quot;&gt;Evan You explains in an interview&lt;/a&gt;: Vue.js has 1.7 million users worldwide, and he (as the creator) has around 400 sponsors.
These are often small companies.
The boss is a developer who can afford to make a considerable monthly contribution.&lt;/p&gt;
&lt;p&gt;Sponsorships are also a special kind of reimbursement.
They primarily rely on a relationship based on trust.
In general, there are no strings attached.
You support a person because you think that this person does good work.
However, this person alone decides what to do with the time or donation he or she receives.&lt;/p&gt;
&lt;p&gt;This shows that it is hard to earn significant money with open-source approaches.
So, how and why do companies move within this space?&lt;/p&gt;
&lt;h2 id=&quot;companies-do-it-because-its-good-for-business&quot; tabindex=&quot;-1&quot;&gt;Companies do it because &amp;quot;it&#39;s good for business.&amp;quot; &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/open-source-strategy/#companies-do-it-because-its-good-for-business&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.wardleymaps.com/gameplay&quot; target=&quot;_blank&quot;&gt;Wardley Map highlights&lt;/a&gt;, that developing in the open is a strategic gameplay.
There are several moves you can do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Openly build the product&#39;s core to convince customers there is no &amp;quot;lock-in.&amp;quot;&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://wiechtig.com/blog/open-source-strategy/#fn7&quot; id=&quot;fnref7&quot;&gt;[7]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;Drive adoption towards a commodity and aim to be the market standard. Done right, all competitors have to integrate your API.&lt;/li&gt;
&lt;li&gt;Use it as a financial weapon to undercut proprietary on-premise software.&lt;/li&gt;
&lt;li&gt;Offer a free tier (like self-hosting) to &amp;quot;lock customers in&amp;quot;. When they need a sophisticated solution, paying for the service is the easiest and cheapest option.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Regardless of which strategy you use, the bottom line is that &amp;quot;&lt;a href=&quot;https://www.youtube.com/watch?v=pLvZRnK2WRE&quot; target=&quot;_blank&quot;&gt;it&#39;s good for business&lt;/a&gt;&amp;quot;.
For example, let&#39;s say you operate a massive tech platform.
You provide open-source software tooling.
Others use it and benefit from it.
Even when they never use your product, it improves the overall market.
It makes the internet a better place for business.
This attracts new market participants that now may use your products.&lt;/p&gt;
&lt;p&gt;Companies draft statements like &amp;quot;we love open-source&amp;quot; not because they love open-source but because they believe that loving open-source is good for business.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/open-source-strategy/#conclusion&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;From all these things we explored in the ecosystem,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;make sure you have the finance model or cross-financing figured out,&lt;/li&gt;
&lt;li&gt;realise for yourself why you want to move into the open-source space,&lt;/li&gt;
&lt;li&gt;clarify expectations,&lt;/li&gt;
&lt;li&gt;learn to say no.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As much as I love open-source and as much as it helped me in my career,
I have to accept that it isn’t all that shiny and glorious as it often seems to be.
So, be considerable when moving within the space.&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot; /&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://blog.tidelift.com/60-of-maintainers-are-still-not-paid-for-their-work&quot; target=&quot;_blank&quot;&gt;A study shown that many maintainers are not paid for their work&lt;/a&gt; &lt;a href=&quot;https://wiechtig.com/blog/open-source-strategy/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;For example, the &lt;a href=&quot;https://github.com/zloirock/core-js/blob/master/docs/2023-02-14-so-whats-next.md&quot; target=&quot;_blank&quot;&gt;core-js maintainer&lt;/a&gt; and the xz maintainer. &lt;a href=&quot;https://wiechtig.com/blog/open-source-strategy/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Companies build apps with the latest JavaScript features for modern browsers. They integrate core-js to support older browsers. &lt;a href=&quot;https://wiechtig.com/blog/open-source-strategy/#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn4&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;I appreciate and use VSCode, yet think that the JetBrains IDEs work better with huge codebases. &lt;a href=&quot;https://wiechtig.com/blog/open-source-strategy/#fnref4&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn5&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://ghuntley.com/fracture&quot; target=&quot;_blank&quot;&gt;Visual Studio Code is designed to fracture&lt;/a&gt; &lt;a href=&quot;https://wiechtig.com/blog/open-source-strategy/#fnref5&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn6&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;&lt;a href=&quot;https://www.openlogic.com/sites/default/files/pdfs/report-ol-state-of-oss-2024.pdf&quot; target=&quot;_blank&quot;&gt;State of Open Source Report 2024&lt;/a&gt; Page 9 &lt;a href=&quot;https://wiechtig.com/blog/open-source-strategy/#fnref6&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn7&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Claims of &amp;quot;not being locked-in&amp;quot; are made, which is far from reality, but people believe them. &lt;a href=&quot;https://wiechtig.com/blog/open-source-strategy/#fnref7&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</description>
    </item>
    <item>
      <title>Personal notes on procrastination</title>
      <link>https://wiechtig.com/blog/i-am-a-procrastinator/</link>
      <pubDate>Mon, 23 Dec 2024 24:00:00 GMT</pubDate>
      <author>Florian Wiech</author>
      <guid>https://wiechtig.com/blog/i-am-a-procrastinator/</guid>
      <description>&lt;p&gt;I&#39;m a procrastinator.
I&#39;ve said it.
I only perform with deadlines, in firefighting scenarios or scenarios where not doing something has major consequences.&lt;/p&gt;
&lt;p&gt;Example scenarios would be:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;people are annoyed because I&#39;m late,&lt;/li&gt;
&lt;li&gt;I get a bad reputation for not delivering,&lt;/li&gt;
&lt;li&gt;the fear of blaming myself in front of an audience.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In reality, it looks like this (happens all the time):
I want to learn statistics fundamentals to view and understand data sets.
In my head, this totally makes sense.
Doing this has so many upsides:
I hope to gain more insights by improving my analytic skills.
Eventually, I&#39;ll make better decisions at work through data-driven approaches.
Additionally, I could bring this skill to my blog and sprinkle in some numbers here and there.
But even though everything is ready, I have the time and material to read.
I still struggle to focus and get it done.
Instead, my head drifts towards a completely different topic.
Nothing that I would classify with the same importance.
But something inside me has this urge to understand this other field better.&lt;/p&gt;
&lt;p&gt;To be honest, this sucks.
I have a lot of things that make so much sense from a rational decision-maker&#39;s perspective, yet they don&#39;t get done at all.
I have this instant gratification monkey in my head who always finds other things that are so exciting right this moment.
Because for this monkey, it&#39;s all about instant fun.&lt;/p&gt;
&lt;p&gt;When you research how to overcome procrastination, you&#39;ll, one way or another, bump into the Eisenhauer Box.&lt;/p&gt;
&lt;h2 id=&quot;interlude-the-eisenhauer-box&quot; tabindex=&quot;-1&quot;&gt;Interlude: The Eisenhauer Box &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/i-am-a-procrastinator/#interlude-the-eisenhauer-box&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;What is important is seldom urgent, and what is urgent is seldom important.&lt;br /&gt;
–&lt;a href=&quot;https://en.wikipedia.org/wiki/Dwight_D._Eisenhower&quot; target=&quot;_blank&quot;&gt;Dwight Eisenhower&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Dwight Eisenhower lived a productive life (as president and five-star general of the United States), which led many people to study his methods around productivity.
What&#39;s often shared is a simple decision-making tool.&lt;/p&gt;
&lt;p&gt;It consists of four boxes where you place your tasks. It gives you an idea of how you should handle them:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Urgent and important (tasks you will do immediately).&lt;/li&gt;
&lt;li&gt;Important but not urgent (tasks you will schedule to do later).&lt;/li&gt;
&lt;li&gt;Urgent but not important (tasks you will delegate to someone else).&lt;/li&gt;
&lt;li&gt;Neither urgent nor important (tasks that you will eliminate).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://wiechtig.com/img/QdXrIHvsjz-250.webp 250w, https://wiechtig.com/img/QdXrIHvsjz-316.webp 316w, https://wiechtig.com/img/QdXrIHvsjz-426.webp 426w, https://wiechtig.com/img/QdXrIHvsjz-460.webp 460w, https://wiechtig.com/img/QdXrIHvsjz-500.webp 500w, https://wiechtig.com/img/QdXrIHvsjz-580.webp 580w, https://wiechtig.com/img/QdXrIHvsjz-632.webp 632w, https://wiechtig.com/img/QdXrIHvsjz-768.webp 768w, https://wiechtig.com/img/QdXrIHvsjz-852.webp 852w, https://wiechtig.com/img/QdXrIHvsjz-920.webp 920w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://wiechtig.com/img/QdXrIHvsjz-250.jpeg&quot; width=&quot;920&quot; height=&quot;742&quot; srcset=&quot;https://wiechtig.com/img/QdXrIHvsjz-250.jpeg 250w, https://wiechtig.com/img/QdXrIHvsjz-316.jpeg 316w, https://wiechtig.com/img/QdXrIHvsjz-426.jpeg 426w, https://wiechtig.com/img/QdXrIHvsjz-460.jpeg 460w, https://wiechtig.com/img/QdXrIHvsjz-500.jpeg 500w, https://wiechtig.com/img/QdXrIHvsjz-580.jpeg 580w, https://wiechtig.com/img/QdXrIHvsjz-632.jpeg 632w, https://wiechtig.com/img/QdXrIHvsjz-768.jpeg 768w, https://wiechtig.com/img/QdXrIHvsjz-852.jpeg 852w, https://wiechtig.com/img/QdXrIHvsjz-920.jpeg 920w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;/picture&gt;&lt;figcaption&gt;The Eisenhauer Box&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You can find additional articles for deeper insights &lt;a href=&quot;https://jamesclear.com/eisenhower-box&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://www.artofmanliness.com/character/knowledge-of-men/eisenhower-decision-matrix/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;three-out-of-four-work-for-me&quot; tabindex=&quot;-1&quot;&gt;Three out of four work for me &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/i-am-a-procrastinator/#three-out-of-four-work-for-me&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Eisenhauer box is straightforward and makes a lot of sense.
I&#39;m all up for the important and urgent tasks (top left).
It includes something like a deadline, which makes it urgent.
It is not a problem for me to get it done.
So far, so good.&lt;/p&gt;
&lt;p&gt;The not important, not urgent section is simple as well.
Just scratch it off my schedule. Not a problem.
We&#39;ll later come back at it because scratching it off my to-do list might not be enough.
Sometimes, I have to forget about its existence, that my instant gratification monkey doesn&#39;t get back at it.
But again, more on that later.&lt;/p&gt;
&lt;p&gt;Regarding the not-important but urgent ones:
I&#39;m not wealthy, so there is no one I could delegate it to.
Therefore, I have to do it myself.
And that is okay.
However, I&#39;m able to reduce it as much as possible.
Overall, this box is not a problem for me as well.&lt;/p&gt;
&lt;h2 id=&quot;important-but-not-urgent-is-the-problem&quot; tabindex=&quot;-1&quot;&gt;Important but not urgent is the problem &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/i-am-a-procrastinator/#important-but-not-urgent-is-the-problem&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;What gives me a hard time is the important but not urgent box.
It is where my long-term goals and even some of my dreams or life goals reside.
That means this section is the core which holds real value to me.
But I haven&#39;t made the progress I would like to see there.&lt;/p&gt;
&lt;p&gt;So, how the hell do I get to work on those?
As the box above suggests, schedule time for it.
Having no family or kids, I&#39;ll sure find time for it.
But when I have a free day ready for important but not urgent tasks, my instant gratification monkey lights up and goes to work.&lt;/p&gt;
&lt;p&gt;I asked myself, how can I &amp;quot;change&amp;quot; myself to be able to work on this box?
I&#39;m trying to schedule time, prioritise tasks, lay down a storyline, and make the tasks smaller, but I can&#39;t get to work.
Over time, I learned to approach it another way.&lt;/p&gt;
&lt;h2 id=&quot;work-with-what-you-have&quot; tabindex=&quot;-1&quot;&gt;Work with what you have &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/i-am-a-procrastinator/#work-with-what-you-have&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Work with what you have instead of trying to make a different concept work.&lt;br /&gt;
–Me.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;How about moving tasks from one quadrant to another?
Instead of trying to change yourself, accept who you are.
Let&#39;s use what I already have and make the best of it.
This work style might not be pretty, but it gets the job done.&lt;/p&gt;
&lt;p&gt;For example, how can I get a life goal from important but not urgent to &lt;em&gt;really freaking urgent&lt;/em&gt;?
How can I use the things I already know about myself to get to work on an important task by making it urgent?
Can I attach an outside deadline or create a constellation that gets me into firefighting?
Attaching an important task with urgency will move it into another quadrant, and I will immediately work on it.&lt;/p&gt;
&lt;p&gt;For example, sign up for certifications with a time-based license.
I have three months to get certified.
It makes so much sense to work on it now and get along step by step.
I might start with it until I&#39;m bored.
Now, my instant gratification monkey has better things to do.
Well, I ended up two months later, still at the start of the course.
Then, in the last couple of weeks before the deadline, something suddenly strikes me.
I look deep into my eyes and ask myself if I still want it.
Since completing this course is often on my list, I still want to finish it.
But now there is some money on the table.
I would waste money if I didn&#39;t do it now.
Or at least try it now.
Otherwise, it would&#39;ve just been money thrown out of the window.
I don&#39;t like that.
And there is this sudden urge to still get something from the money I invested.
But now I have to hurry up.
Otherwise, the money is gone.
I move my timeline schedule to get it done.
And finally, I&#39;m in an important and urgent region.
I can go to work.&lt;/p&gt;
&lt;p&gt;So every time I book a subscription to learn something (and get certified) that lasts a year, I know that Florian of next year, will have a hard time.
Until then, I&#39;ll dream about how nice it would be to have this certification, including all the guilt for not getting it.&lt;/p&gt;
&lt;p&gt;As mentioned before, use the system you have.
It isn&#39;t pretty, but it works.
If you want to complete your bucket list, a little messiness along the way shouldn&#39;t matter.
If you think otherwise, I suggest you burn your bucket list and live the happy life you already have.
This list just makes you miserable.&lt;/p&gt;
&lt;p&gt;Not everything is shiny and clear, though.
You might have to try a couple of things.
I once told everyone I wanted to get something done.
I hoped to create outside pressure to gain urgency.
Sadly, it didn&#39;t work.
So, I kept searching for urgency.
Sometime later, I learned that &lt;a href=&quot;https://sive.rs/zipit2&quot; target=&quot;_blank&quot;&gt;psychology tests showed that announcing your goals makes you less motivated to accomplish them&lt;/a&gt;.
Damn.
Why didn&#39;t I find this article sooner?&lt;/p&gt;
&lt;p&gt;The takeaway is that each task might involve a different aspect, creating this inner friction and an urge to work on it.
It is important to explore and find it.&lt;/p&gt;
&lt;h2 id=&quot;tame-the-monkey-to-be-helpful&quot; tabindex=&quot;-1&quot;&gt;Tame the monkey to be helpful &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/i-am-a-procrastinator/#tame-the-monkey-to-be-helpful&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;My instant gratification monkey exists and will always be.
I asked myself if it would be possible to nudge him in a useful direction.
I may have found a way.
However, it was way harder than I thought.&lt;/p&gt;
&lt;p&gt;We&#39;re now coming back to the &lt;em&gt;not important and not urgent&lt;/em&gt; section I teased earlier.
I noticed that my inner monkey really likes to take things from this section.
Placing something in the not important and not urgent section and keeping it in my head will be part of my dark playground.
And the monkey loves it there.
So what can we do about it?&lt;/p&gt;
&lt;p&gt;Instead of placing something that might hurt me in the long run, I try to forget its existence as quickly as possible.
That way my instant gratification monkey won&#39;t touch it.&lt;/p&gt;
&lt;p&gt;Here&#39;s an example:
I have several fields I would like to learn more about.
Some of them are more important than others.
Therefore, I place them in different quadrants.
I&#39;ve gotten out of bad habits like wasting time on content consumption.
In particular, I have eliminated tools based on addictive scrolling techniques from my life.&lt;/p&gt;
&lt;p&gt;What happens is very interesting:
The rational decision maker inside me says I should learn a topic.
My monkey would rather do something else.
The monkey finds something in the &lt;em&gt;not important, not urgent&lt;/em&gt; section.
But the things the monkey finds still bring me forward.
The result: I have learned something else. Not too bad, I would say.&lt;/p&gt;
&lt;p&gt;In reality, it looks like this:&lt;br /&gt;
Rational decision maker: We should learn more in the field of data science.&lt;br /&gt;
Monkey: But I&#39;ve always wanted to understand electrical circuits.&lt;br /&gt;
End result: I learned another technical concept.
Not bad, I would say.&lt;/p&gt;
&lt;p&gt;Again, it isn&#39;t pretty, but it turned out to be okay-ish.
Or it could be worse.&lt;/p&gt;
&lt;p&gt;Only placing relevant things that push me forward anywhere in my prioritisation box brings me forward.
My monkey will start to play and switch up the prioritisation.
But in any way, it brings me forward.&lt;/p&gt;
&lt;h2 id=&quot;by-the-way&quot; tabindex=&quot;-1&quot;&gt;By the way &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/i-am-a-procrastinator/#by-the-way&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This blog post is a result of my instant gratification monkey.
Instead of focusing on a really important but not urgent topic, my monkey rather did something else (writing this post).
But after the day, having another blog post ready is not a bad result, I guess.&lt;/p&gt;
&lt;h2 id=&quot;additional-resources&quot; tabindex=&quot;-1&quot;&gt;Additional Resources &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/i-am-a-procrastinator/#additional-resources&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Tim Urban explored procrastination from his perspective a decade ago.
In his &lt;a href=&quot;https://www.youtube.com/watch?v=arj7oStGLkU&quot; target=&quot;_blank&quot;&gt;TED talk&lt;/a&gt;, he introduced a wording (rational decision maker, instant gratification, etc.) that I&#39;ve used in this post as well.
On top of that, he has a very entertaining &lt;a href=&quot;https://waitbutwhy.com/2016/03/doing-a-ted-talk-the-full-story.html&quot; target=&quot;_blank&quot;&gt;article&lt;/a&gt; about his full story creating the TED talk.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Effectiveness or Efficiency. Where is your focus?</title>
      <link>https://wiechtig.com/blog/effectiveness-or-efficiency/</link>
      <pubDate>Thu, 12 Dec 2024 24:00:00 GMT</pubDate>
      <author>Florian Wiech</author>
      <guid>https://wiechtig.com/blog/effectiveness-or-efficiency/</guid>
      <description>&lt;p&gt;Imagine a day full of meetings.
&lt;em&gt;&amp;quot;I have to be more effective today.&lt;/em&gt;
&lt;em&gt;Which meetings can I skip to get some stuff done?&amp;quot;&lt;/em&gt; you might ask yourself.
The next day, two people work on the same thing.
You might ask:
&lt;em&gt;&amp;quot;How about we split up the tasks to be more efficient?&amp;quot;&lt;/em&gt;
These or similar terms are phrases we use in our daily work lives.
It&#39;s all about being effective and efficient.&lt;/p&gt;
&lt;p&gt;Looking across subject areas, I noticed that various concepts include these terms through their subject-matter lens.
All these eventually boil down to one thing: It is really important which side (effectiveness or efficiency) you focus on.&lt;/p&gt;
&lt;p&gt;This post discusses the concepts and why this focus is important.
But let&#39;s start with the basics.
What do I mean by my baseline of efficiency and effectiveness?&lt;/p&gt;
&lt;p&gt;Starting with efficiency (because most people are familiar with this one):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Efficiency means accomplishing a task with minimal waste, effort, or cost. It focuses on optimising the use of resources to achieve the desired outcomes, ensuring that the inputs are utilised in the most productive manner possible.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Next up effectiveness:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Effectiveness refers to the degree to which objectives are achieved and the extent to which goals are accomplished. It measures whether the desired outcomes are attained, regardless of the resources utilised.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In essence, with effectiveness, you focus on achieving your outcome.
While with efficiency, you reduce waste.&lt;/p&gt;
&lt;h2 id=&quot;same-principle-different-wording&quot; tabindex=&quot;-1&quot;&gt;Same principle, different wording &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/effectiveness-or-efficiency/#same-principle-different-wording&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In engineering, people often use the terms efficiency and effectiveness.
That may be the reason that I take them as a baseline.
They are most familiar to my work context.
As I explored various subject areas, I noticed they all have a similar foundation.&lt;/p&gt;
&lt;p&gt;Looking at product management, I&#39;ve seen the phrase:
&amp;quot;When you build the right thing right, you&#39;ll be successful.&amp;quot;&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://wiechtig.com/blog/effectiveness-or-efficiency/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;.
I noticed this odd constellation of &amp;quot;the right thing right&amp;quot; and started taking it apart.
The &amp;quot;right thing&amp;quot; is about finding something worth building.
It refers to effectiveness.
The &amp;quot;thing right&amp;quot; is about efficiency.
Reduce waste by building it in the best way possible.
As we can see, it&#39;s a different wording but a similar principle.&lt;/p&gt;
&lt;p&gt;Digging deeper, I found out that product development is about discovery and delivery.
Product discovery exists to find out what will be of value.
Product delivery is about finding ways to generate value.&lt;br /&gt;
From a high-level perspective:
During the discovery phase, I focus on achieving an outcome.
Delivery helps me to build for this outcome.&lt;br /&gt;
This shows that it includes the baseline principle as well.&lt;/p&gt;
&lt;p&gt;Business administration uses financial statements as a communication tool.
The income statement starts with the revenues, followed by the direct operating costs.
The classic business question: Should I focus on gaining more revenue or cutting costs for a better bottom line?
Focusing on more revenue could mean extending current offers.
It&#39;s about creating more value for customers to gain better outcomes.
Or you can control costs by looking at operating efficiency.
Reduce costs by eliminating waste in the process.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://wiechtig.com/blog/effectiveness-or-efficiency/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;
Do you see how it includes the baseline once again?&lt;/p&gt;
&lt;p&gt;Ok, great, but why do I care?&lt;/p&gt;
&lt;h2 id=&quot;find-the-right-thing-before-you-build-it-right&quot; tabindex=&quot;-1&quot;&gt;Find the right thing before you build it right. &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/effectiveness-or-efficiency/#find-the-right-thing-before-you-build-it-right&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As Simon Wardley would say: &amp;quot;Focus on the wrong thing, and you&#39;ll lose.&amp;quot;
So, ensure you find the right thing before building it right.
In other words from Peter Drucker:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There is nothing quite so useless as doing with great efficiency something that should not be done at all.&lt;br /&gt;
– Peter Drucker&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Exploring a real-world example:
A media company invests an 8-figure amount into building a music app.
They decided to&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;lease the library from a provider,&lt;/li&gt;
&lt;li&gt;focus on a big music collection,&lt;/li&gt;
&lt;li&gt;provide baseline audio playback,&lt;/li&gt;
&lt;li&gt;ship it in their own branded app.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The organisation invests a lot of resources and goes to work.
It builds and delivers the app in a couple of years.
Engineers create and optimise the app for better efficiency (easier operation).
They built a big app to discover that users listen to music differently.
Discoverability of music and a great listening experience via smart speakers are actually the central features users are looking for.
Congratulations. They efficiently wasted money and time. Hopefully, they had at least a good time doing it.&lt;/p&gt;
&lt;h2 id=&quot;the-efficiency-trap&quot; tabindex=&quot;-1&quot;&gt;The efficiency trap &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/effectiveness-or-efficiency/#the-efficiency-trap&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In day-to-day operations, I hear &amp;quot;We must be efficient&amp;quot; way more often than &amp;quot;Let&#39;s get more effective&amp;quot;.
From a high-level perspective, I find that hard to accomplish.
We&#39;re already very efficient.
Especially in IT, we automate as much as possible.
On the other hand, I saw more &lt;a href=&quot;https://go.pendo.io/rs/185-LQW-370/images/2019%20Feature%20Adoption%20Report%20Digital.pdf&quot; target=&quot;_blank&quot;&gt;solutions that aren&#39;t used&lt;/a&gt; or don&#39;t bring in the expected returns.
It feels like the &amp;quot;nine out of ten startups fail&amp;quot; rule applies to everything created from scratch.&lt;/p&gt;
&lt;p&gt;Uwe Friedrichsen outlines in his post &lt;a href=&quot;https://www.ufried.com/blog/efficiency_vs_effectiveness/&quot; target=&quot;_blank&quot;&gt;&amp;quot;Forget efficiency&amp;quot;&lt;/a&gt; that most businesses, past and present, have been driven by efficiency.
But in the post-industrial market with more supply than demand, we clearly need to focus on effectiveness.
This means a product only succeeds when it solves the customer&#39;s needs better than the competition.
I certainly agree with his outlines and statements.
It&#39;s worth reading.&lt;/p&gt;
&lt;p&gt;Gregor Hohpe has another interesting take on efficiency in the book &lt;a href=&quot;https://architectelevator.com/book/&quot; target=&quot;_blank&quot;&gt;&amp;quot;The Software Architect Elevator&amp;quot;&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Changing from efficiency-based thinking to speed-based thinking can be difficult for organisations: after all, it’s less efficient! In most people’s minds being less efficient translates into wasting money. On top of that, people being idle is more visible than the damage done by missed market opportunities.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Not being efficient doesn’t mean wasting money!
I would even say you can focus on customer needs in the market without being inefficient.&lt;/p&gt;
&lt;h3 id=&quot;improve-time-to-insight-instead-of-efficient-solutions&quot; tabindex=&quot;-1&quot;&gt;Improve time to insight instead of efficient solutions &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/effectiveness-or-efficiency/#improve-time-to-insight-instead-of-efficient-solutions&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Many companies can gain more by improving their time to insight.
It&#39;s a focus on the customer perspective.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Time to insight measurement&lt;/strong&gt;&lt;br /&gt;
The time it takes from an idea until we&#39;ve validated the key assumptions for deciding whether to pursue an investment.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Breaking it down for non-product-people:
You only know if your idea works when you get real-world customer feedback, such as customers buying the product.
So try to improve your workflow of discovering if an idea is worth it (be more effective).
You could try prototyping offerings without having a product to sell.
If you see preorders getting in (or not), you have better data to decide if or how it makes sense to proceed.&lt;/p&gt;
&lt;p&gt;To sum up, first, identify the feature that provides value for customers (is effective).
Then (and only then) pursue delivery operations.
It provides a higher probability of a positive upside.&lt;/p&gt;
&lt;h2 id=&quot;the-path-forward&quot; tabindex=&quot;-1&quot;&gt;The path forward &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/effectiveness-or-efficiency/#the-path-forward&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Turning the conversation more broadly:
I learned it is essential in every step I take to understand where my efforts have an impact.
Will I increase effectiveness, or will I be more efficient?
Before I try, I ask myself: Where should my focus be?
Which &amp;quot;side&amp;quot; will make my life better?
Remember, it&#39;s not always being more efficient.
Quite the opposite, as I argued above.
In our current state of the world, we&#39;re already very efficient.&lt;/p&gt;
&lt;p&gt;By the way, sticking in automation with something mostly improves efficiency.
It&#39;s the thing that you just automated that holds the effectiveness.
This brings me back to the difference between &lt;a href=&quot;https://www.wiechtig.com/blog/features-vs-benefits&quot; target=&quot;_blank&quot;&gt;features and benefits&lt;/a&gt;.
Do we build features, or do we focus on achieving benefits for others?&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/effectiveness-or-efficiency/#conclusion&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Efficiency accomplishes tasks with minimal waste.&lt;br /&gt;
Effectiveness verifies that actions accomplish the desired outcomes.&lt;/p&gt;
&lt;p&gt;You find this concept and related terms in various subject matter-related topics.
They all go down a similar road, asking you to follow one side or the other.
So, it helps to ask which side to focus on.
Take that into consideration.&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot; /&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;There&#39;s a great book about this concept called &amp;quot;The Right It&amp;quot;. I highly recommend you give it a try. It&#39;s very entertaining and insightful. &lt;a href=&quot;https://wiechtig.com/blog/effectiveness-or-efficiency/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Companies have been cutting costs to improve efficiency and bottom line. However, in our current &lt;a href=&quot;https://en.wikipedia.org/wiki/VUCA&quot; target=&quot;_blank&quot;&gt;VUCA world&lt;/a&gt;, resilience is very important. For example, diversify your suppliers to stay effective in the long run. Since this thinking does not directly affect the equation, many companies find executing challenging. &lt;a href=&quot;https://wiechtig.com/blog/effectiveness-or-efficiency/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</description>
    </item>
    <item>
      <title>Rust is the Lamborghini for Engineers</title>
      <link>https://wiechtig.com/blog/you-dont-need-rust/</link>
      <pubDate>Mon, 11 Nov 2024 24:00:00 GMT</pubDate>
      <author>Florian Wiech</author>
      <guid>https://wiechtig.com/blog/you-dont-need-rust/</guid>
      <description>&lt;p&gt;Many great engineers I know have already tried &lt;a href=&quot;https://www.rust-lang.org/&quot; target=&quot;_blank&quot;&gt;Rust&lt;/a&gt; or have it in their &amp;quot;want to try&amp;quot; backlog.&lt;/p&gt;
&lt;p&gt;I see presentations in Green-IT that say: We must consider the system&#39;s energy consumption.
They &lt;a href=&quot;https://aws.amazon.com/blogs/opensource/sustainability-with-rust/&quot; target=&quot;_blank&quot;&gt;share&lt;/a&gt; &lt;a href=&quot;https://www.researchgate.net/figure/Normalized-global-results-for-Energy-Time-and-Memory_tbl2_320436353&quot; target=&quot;_blank&quot;&gt;charts&lt;/a&gt; showing how much computation power a language needs.
And Rust is way up there with C requiring the least amount of energy.
After these talks, everyone asks each other if we will develop everything in Rust now (and finally, we might have a reason to do so, but more on that later).&lt;/p&gt;
&lt;p&gt;The commercial JavaScript ecosystem likes to squeeze out every millisecond it can get of its build and test scripts&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://wiechtig.com/blog/you-dont-need-rust/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;.
You can find &lt;a href=&quot;https://news.ycombinator.com/item?id=35043720&quot; target=&quot;_blank&quot;&gt;tons&lt;/a&gt; &lt;a href=&quot;https://floriel.medium.com/rust-is-the-future-of-front-end-development-a1c6a0088e52&quot; target=&quot;_blank&quot;&gt;of&lt;/a&gt; &lt;a href=&quot;https://leerob.io/n/rust&quot; target=&quot;_blank&quot;&gt;articles&lt;/a&gt; declaring Rust to be the future of the JavaScript ecosystem and infrastructure.&lt;/p&gt;
&lt;p&gt;But, in the context of enterprise applications, I state:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Rust is the Lamborghini for engineers.&lt;br /&gt;
Everybody wants it, but nobody needs it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It brings everything to the table that allures engineers.
However, for most businesses in the non-tech sectors (like insurance, publishing, etc.), only parts (if any) provide a real case for Rust.&lt;/p&gt;
&lt;p&gt;Therefore, it is like a Lamborghini.
Every extrovert man would love to own and drive a dragon wagon one day.
But there is no logical reason for it.
Everybody wants it, but nobody needs it (deliberately exaggerated).&lt;/p&gt;
&lt;p&gt;I came up with this statement due to a couple of reasons.
The most important ones are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rust has a special hype due to the ownership concept it introduced.&lt;/li&gt;
&lt;li&gt;Rust&#39;s design goal is to be an alternative to C instead of general purpose language for everyone.&lt;/li&gt;
&lt;li&gt;Rust&#39;s concept conflicts with commercial software surroundings.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There might be more, but these are the prominent ones for me.
Let&#39;s go through them one by one.
After that, I&#39;ll present some use cases in which Rust is suitable.&lt;/p&gt;
&lt;h2 id=&quot;the-ownership-concept-makes-rust-special&quot; tabindex=&quot;-1&quot;&gt;The ownership concept makes Rust special &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/you-dont-need-rust/#the-ownership-concept-makes-rust-special&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In the context of programming languages, we often separate between low-level and high-level languages:&lt;/p&gt;
&lt;p&gt;In low-level languages, developers must explicitly allocate and free the memory.
Bad memory management often results in memory issues or bugs in production.&lt;/p&gt;
&lt;p&gt;On the other hand, high-level languages are easier to use.
They provide garbage collection, which regularly looks for no longer-used memory as the program runs.
So, these languages pay the ease of use with performance penalties at runtime.&lt;/p&gt;
&lt;p&gt;But either way, our written software might still cause bugs in production.
Even high-level languages are not secure from memory issues.
Especially when we bring in multi-threading, you can quickly get in trouble with whatever you choose.&lt;/p&gt;
&lt;p&gt;All this causes situations we know too well:
Hunting down weird production bugs.
At first, we have no idea what the hell is going on.
Only to come across the problem hours, days, or &lt;a href=&quot;https://www.warp.dev/blog/why-i-spent-a-week-on-a-10-line-code-change&quot; target=&quot;_blank&quot;&gt;even weeks&lt;/a&gt; later by chance.
Finally, we can reproduce the bug.
We fix it by changing a single line of code.&lt;/p&gt;
&lt;p&gt;Rust goes down a different road.
What makes Rust so alluring is a powerful language backed by advanced theory.
It provides all the features a high-level language supports but no garbage collection.&lt;/p&gt;
&lt;p&gt;In Rust, &lt;a href=&quot;https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html&quot; target=&quot;_blank&quot;&gt;memory is managed through a system of ownership with a set of rules that the compiler checks&lt;/a&gt;.
This provides great runtime performance since no garbage collection is necessary.
It also causes fewer production issues due to catching potential bugs at compile time.
The only tradeoff is a development concept that you have to get used to.
Due to its complexity, it takes more time to develop.
It shifts time spent from hunting production bugs towards building proper software.&lt;/p&gt;
&lt;p&gt;These aspects make a strong argument for everyone who wants to build performant and safe software and loves challenges in computing systems.
Then, combine this setup with state-of-the-art language expressions and tooling.
It is the perfect match for engineers.&lt;/p&gt;
&lt;p&gt;Besides the memory differences, low-level languages often lack standardised tooling.
Newer high-level languages already applied learnings from software projects of the past.
A language needs to be more than its syntax, semantics, and compiler.
Engineers need modules, code linter, formatter, package manager and more.
Rust provides all of it right out of the box.
That drastically reduces the barrier.
It&#39;s straightforward to structure and scale codebases.
In the end, it enables engineers to collaborate.&lt;/p&gt;
&lt;h2 id=&quot;rust-is-an-alternative-to-c&quot; tabindex=&quot;-1&quot;&gt;Rust is an alternative to C &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/you-dont-need-rust/#rust-is-an-alternative-to-c&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The creator of Rust had the idea to &lt;a href=&quot;https://graydon2.dreamwidth.org/307291.html&quot; target=&quot;_blank&quot;&gt;create a high-level language&lt;/a&gt; competing with others like Java and Go.
Rust started with that approach by having a runtime with green thread capabilities.
You might already be familiar with them from other high-level languages.&lt;/p&gt;
&lt;p&gt;However, the community decided to go a different route.
They wanted to place the language with its concepts to be a C alternative.
They &lt;a href=&quot;https://github.com/aturon/rfcs/blob/remove-runtime/active/0000-remove-runtime.md&quot; target=&quot;_blank&quot;&gt;removed the existing runtime&lt;/a&gt; without a replacement.
This led to various community-driven implementations, with &lt;a href=&quot;https://tokio.rs/&quot; target=&quot;_blank&quot;&gt;tokio&lt;/a&gt; being the most popular.
They redesigned the &lt;a href=&quot;https://without.boats/blog/why-async-rust/&quot; target=&quot;_blank&quot;&gt;async/await to be an alternative to the state machines developers use in C environments&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now, the language is an alternative to C.
They&#39;ve designed an &lt;a href=&quot;https://blog.rust-lang.org/2015/04/24/Rust-Once-Run-Everywhere.html&quot; target=&quot;_blank&quot;&gt;FFI interface where you can use C and Rust interchangeably&lt;/a&gt;.
Plus, there is no runtime overhead.
Rust might be a capable alternative everywhere you work with C or have to fall back to C.&lt;/p&gt;
&lt;h2 id=&quot;commercial-software&quot; tabindex=&quot;-1&quot;&gt;Commercial software &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/you-dont-need-rust/#commercial-software&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Companies ranging from startups to enterprises are in business as a for-profit organisation.
They have to work with limited time, resources, and people to create an offering that others buy.
To still work with all these limitations, they have to make tradeoffs.&lt;/p&gt;
&lt;p&gt;Especially commercial environments in finance, insurance, or publishing I&#39;ve seen mostly rely on high-level solutions like the JVM.
Engineers build services, bundle them in a container and deploy them to cloud-native environments.
There is no need for C or alternatives at this layer.&lt;/p&gt;
&lt;p&gt;Don&#39;t get me wrong.
Placing Rust to be the one language, count me in.
Who doesn&#39;t want to drive a dragon car daily for work?
Every engineering heart will beat faster.&lt;/p&gt;
&lt;h3 id=&quot;the-reality-depends-on-business-cases&quot; tabindex=&quot;-1&quot;&gt;The reality depends on business cases &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/you-dont-need-rust/#the-reality-depends-on-business-cases&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In many enterprise business landscapes, more stakeholders are at the table.
They bring in their subject-matter-related interests and requirements towards a solution.
All requirements together will show how important engineering efficiency, system performance, and stability are.&lt;/p&gt;
&lt;p&gt;When designing software products:
You might have to cut things short and accept some tradeoffs in many dimensions.
You trade in software performance, which is acceptable due to decreasing computing costs.
You gain simplicity and reduced implementation time.
This is often a big plus due to the high cost of development hours (the high salary you earn) compared to the hardware operating cost.
It reduces the overall finance-business equation, shipping earlier and with less cost.&lt;/p&gt;
&lt;p&gt;This is why high-level programming languages are often the choice for the non-tech enterprise landscape.
You can get faster to a reasonable good enough for now, safe enough to try solution.
I don&#39;t see enough strengths for a different market direction at the moment.&lt;/p&gt;
&lt;h3 id=&quot;when-is-rust-a-sweet-spot-for-a-business-case&quot; tabindex=&quot;-1&quot;&gt;When is Rust a sweet spot for a business case? &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/you-dont-need-rust/#when-is-rust-a-sweet-spot-for-a-business-case&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;It needs the aspects of &lt;em&gt;mission-critical&lt;/em&gt;, &lt;em&gt;high-performance&lt;/em&gt; or a case where your only option is to fall back to C.
We can see several cases where this fully makes sense.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://1password.com/&quot; target=&quot;_blank&quot;&gt;1Password&lt;/a&gt; provides a password manager.
Many parts of their &lt;a href=&quot;https://dteare.medium.com/behind-the-scenes-of-1password-for-linux-d59b19143a23&quot; target=&quot;_blank&quot;&gt;system&lt;/a&gt; &lt;a href=&quot;https://blog.1password.com/1password-8-the-story-so-far/&quot; target=&quot;_blank&quot;&gt;landscape&lt;/a&gt; are built on Rust.
It makes sense because their customers store their most sensitive credentials there.
A leak of customer information might be an existential threat towards their product.&lt;br /&gt;
Additionally, they offer an app for many end devices.
Providing shared libraries for various clients, their only option is to fall back to C.
This is where the option of using Rust shines.&lt;/p&gt;
&lt;p&gt;Cloud providers–the plumbing of technology–leverage Rust to provide large-scale, performant services.
They bring many customers across various use cases onto the same physical infrastructure.
It&#39;s an operation at scale.
Compute usage and energy efficiency matter.
All performance improvements transfer into money saved.
If they save more in the long term than it costs to implement performance improvements, it passes the finance equation.&lt;/p&gt;
&lt;p&gt;An on-scale example is &lt;a href=&quot;https://www.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;CloudFlare&lt;/a&gt;.
According to their blog, they &lt;a href=&quot;https://blog.cloudflare.com/pingora-saving-compute-1-percent-at-a-time/&quot; target=&quot;_blank&quot;&gt;handle over 60 million requests per second on average&lt;/a&gt;.
To run efficiently at this scale, they can&#39;t afford performance overhead using high-level languages.
But they also don&#39;t want to risk memory issues using low-level languages with custom memory management.
Therefore, they&#39;ve decided to go with Rust.
They even &lt;a href=&quot;https://blog.cloudflare.com/pingora-open-source/&quot; target=&quot;_blank&quot;&gt;built and open-sourced their framework&lt;/a&gt;.
As they say, measuring and optimising in microseconds may seem a little silly, but it quickly adds up at that scale.&lt;/p&gt;
&lt;p&gt;Last but not least everywhere, where we have all those C and C++ codebases (&lt;a href=&quot;https://wiki.mozilla.org/Oxidation&quot; target=&quot;_blank&quot;&gt;Browsers&lt;/a&gt;, &lt;a href=&quot;https://github.com/firecracker-microvm/firecracker&quot; target=&quot;_blank&quot;&gt;Micro-VMs&lt;/a&gt;, &lt;a href=&quot;https://security.googleblog.com/2022/12/memory-safe-languages-in-android-13.html&quot; target=&quot;_blank&quot;&gt;operating systems&lt;/a&gt;, &lt;a href=&quot;https://security.googleblog.com/2024/09/deploying-rust-in-existing-firmware.html&quot; target=&quot;_blank&quot;&gt;firmwares&lt;/a&gt;, &lt;a href=&quot;https://security.googleblog.com/2023/10/bare-metal-rust-in-android.html&quot; target=&quot;_blank&quot;&gt;bare-metal&lt;/a&gt;, etc.), Rust might be an alternative.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/you-dont-need-rust/#conclusion&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Rust is rather a niche.
Or I make my statement more precise:
I think Rust targets a different market than generic software development solutions built in companies across all sectors.&lt;/p&gt;
&lt;p&gt;This brings me back to my statement from the start:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Rust is the Lamborghini for engineers.&lt;br /&gt;
Everybody wants it, but nobody needs it (deliberately exaggerated).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I hope you gained a few insights or new perspectives.
Let me know if you see things differently.
If you still want to go with Rust, I gave you some ideas of where to look.
If you have any ideas on how to get Rust to mainstream, please tell me: &lt;a href=&quot;mailto:hi@wiechtig.com&quot; target=&quot;_blank&quot;&gt;hi@wiechtig.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Let’s see what the future holds and if the will/interest of engineers changes that.
I&#39;ll now head back to my &lt;a href=&quot;https://github.com/rust-lang/rustlings&quot; target=&quot;_blank&quot;&gt;rustlings&lt;/a&gt; exercises.
In the end, it seems that my engineering heart prevails.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update 23. January 2025:
Clarified that it is about non-tech sectors;
Did mentions about memory safety more precise;&lt;/em&gt;&lt;/p&gt;
&lt;hr class=&quot;footnotes-sep&quot; /&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol class=&quot;footnotes-list&quot;&gt;
&lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Although the JS ecosystem is already the fastest dev tooling I know compared to platform native development, JVM environments, embedded systems or deploying something to the cloud. At least it&#39;s nice that they keep pushing the boundaries. &lt;a href=&quot;https://wiechtig.com/blog/you-dont-need-rust/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</description>
    </item>
    <item>
      <title>Digital identities in the wild</title>
      <link>https://wiechtig.com/blog/digital-identities-in-the-wild/</link>
      <pubDate>Mon, 16 Sep 2024 24:00:00 GMT</pubDate>
      <author>Florian Wiech</author>
      <guid>https://wiechtig.com/blog/digital-identities-in-the-wild/</guid>
      <description>&lt;p&gt;Over the years, I&#39;ve worked across industries that use digital identities.
It showed me how flexible those standards are and how tailored the implementation must be.
Looking under the hood, there are quite some interesting differences between standard and implementation.
It took a major incident at work for me to notice this slight but important variance.&lt;/p&gt;
&lt;p&gt;To explore the difference I&#39;m talking about, we will examine the standard, explore some use cases, and then dive into the implementation hurdles.
Ultimately, I&#39;ll talk you through the outage I was part of at work.&lt;/p&gt;
&lt;h2 id=&quot;fundamentals&quot; tabindex=&quot;-1&quot;&gt;Fundamentals &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/digital-identities-in-the-wild/#fundamentals&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Before I jump into some use cases, let&#39;s shine a light on the login process itself.
From my bubble, the most common approaches towards authentication are
based on &lt;a href=&quot;https://oauth.net/2/&quot; target=&quot;_blank&quot;&gt;OAuth&lt;/a&gt; and &lt;a href=&quot;https://openid.net/developers/how-connect-works/&quot; target=&quot;_blank&quot;&gt;OpenID Connect&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://wiechtig.com/img/yHUR4fTf5N-250.webp 250w, https://wiechtig.com/img/yHUR4fTf5N-316.webp 316w, https://wiechtig.com/img/yHUR4fTf5N-426.webp 426w, https://wiechtig.com/img/yHUR4fTf5N-460.webp 460w, https://wiechtig.com/img/yHUR4fTf5N-500.webp 500w, https://wiechtig.com/img/yHUR4fTf5N-580.webp 580w, https://wiechtig.com/img/yHUR4fTf5N-632.webp 632w, https://wiechtig.com/img/yHUR4fTf5N-768.webp 768w, https://wiechtig.com/img/yHUR4fTf5N-852.webp 852w, https://wiechtig.com/img/yHUR4fTf5N-920.webp 920w, https://wiechtig.com/img/yHUR4fTf5N-1160.webp 1160w, https://wiechtig.com/img/yHUR4fTf5N-1536.webp 1536w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://wiechtig.com/img/yHUR4fTf5N-250.jpeg&quot; width=&quot;1536&quot; height=&quot;906&quot; srcset=&quot;https://wiechtig.com/img/yHUR4fTf5N-250.jpeg 250w, https://wiechtig.com/img/yHUR4fTf5N-316.jpeg 316w, https://wiechtig.com/img/yHUR4fTf5N-426.jpeg 426w, https://wiechtig.com/img/yHUR4fTf5N-460.jpeg 460w, https://wiechtig.com/img/yHUR4fTf5N-500.jpeg 500w, https://wiechtig.com/img/yHUR4fTf5N-580.jpeg 580w, https://wiechtig.com/img/yHUR4fTf5N-632.jpeg 632w, https://wiechtig.com/img/yHUR4fTf5N-768.jpeg 768w, https://wiechtig.com/img/yHUR4fTf5N-852.jpeg 852w, https://wiechtig.com/img/yHUR4fTf5N-920.jpeg 920w, https://wiechtig.com/img/yHUR4fTf5N-1160.jpeg 1160w, https://wiechtig.com/img/yHUR4fTf5N-1536.jpeg 1536w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;The general idea is to unify and bundle all account-related actions and information in its entity, the identity provider.
This scenario has two sides: the identity provider and the client app integration.
The identity provider does all the heavy lifting of validating the user’s identity.
All other feature-specific applications only need a thin layer.
Frontends initiate a login flow and receive a token to work with.
Backends need the certificate for token verification.&lt;/p&gt;
&lt;h3 id=&quot;identity-provider-manages-sessions&quot; tabindex=&quot;-1&quot;&gt;Identity provider manages sessions &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/digital-identities-in-the-wild/#identity-provider-manages-sessions&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;By registering or logging in, the identity provider verifies the user.
It initialises a session and issues token sets.
This will be used for all further requests and user-specific actions.
It is a technical device/browser/app-specific solution and allows users to provide their credentials only once.&lt;/p&gt;
&lt;p&gt;The identity provider is responsible for storing and managing all sessions.
This includes creating new ones, issuing new token sets based on active sessions, terminating sessions, and deleting expired sessions.&lt;/p&gt;
&lt;p&gt;From a bird&#39;s eye view, an identity provider owns and verifies the identity.
The goal is for all other client apps to work with the provided tokens.
It makes the integration simpler and enables single sign-on options.&lt;/p&gt;
&lt;h3 id=&quot;client-integrations-validate-sessions&quot; tabindex=&quot;-1&quot;&gt;Client integrations validate sessions &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/digital-identities-in-the-wild/#client-integrations-validate-sessions&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The other side is the client app implementation.
There are two patterns:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Token-only pattern:&lt;/strong&gt;
The identity provider issues signed temporary tokens that work for themselves.
The backend processes a request when it includes a valid token (e.g. it verifies the token signature and expiration date).
It skips the token check by the identity provider for every request.
However, this backend still accepts valid tokens even when the identity provider terminates a session.
Users can use the app if a once-signed token set hasn&#39;t expired.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Single-source pattern:&lt;/strong&gt;
Validate the token via the identity provider for every request.
It&#39;ll catch all requests that might have a valid token but are from a terminated session.
However, it&#39;s a single point of failure for the identity provider.
This means all traffic to connected backends will be proxied to the identity provider.&lt;/p&gt;
&lt;p&gt;Most often, reality lies somewhere between those patterns.
I don’t want a single point of failure, but sometimes, I want to enforce a truly active session.
Therefore, I separate actions by criticality.
The critical ones, often involving altering or deleting your user account, require an active session.
You can implement an even stricter action flow, such as requesting the user&#39;s password before these operations occur.
It might be ok to rely on the given signed-token validation on the client for other requests.
This way, both worlds work together.&lt;/p&gt;
&lt;p&gt;With these concepts in mind, let&#39;s look at some use cases.&lt;/p&gt;
&lt;h2 id=&quot;in-finance-lock-accounts-immediately&quot; tabindex=&quot;-1&quot;&gt;In Finance: Lock accounts immediately &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/digital-identities-in-the-wild/#in-finance-lock-accounts-immediately&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The first use case is in the financial industry.
Think about a bank account.
With the ability to use online banking, customers can sign in to a portal and transfer money.&lt;/p&gt;
&lt;p&gt;The bank has to deal with abuse.
Sometimes, bad things happen, and the bank has to lock an account.
There&#39;s the requirement to disable an account within a second.
It would be bad if a user was locked at the identity provider but still owned a valid token.
This person could clear the account balance before the termination takes place for them.&lt;/p&gt;
&lt;p&gt;Having to log in to the account more often is not seen as a problem.
For some users, it might even feel &amp;quot;more secure&amp;quot;.&lt;/p&gt;
&lt;h2 id=&quot;in-entertainment-users-want-to-stay-logged-in&quot; tabindex=&quot;-1&quot;&gt;In Entertainment: Users want to stay logged in &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/digital-identities-in-the-wild/#in-entertainment-users-want-to-stay-logged-in&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In an entertainment app, users want to consume content.
Everything that slows them down accessing the content is considered an annoying distraction.
This imposes a risk on the entertainment company.
Therefore, both parties are interested in logging in users once and staying logged in as long as possible.&lt;/p&gt;
&lt;p&gt;The identity provider is often at the forefront and receives much traffic first.
Many users join simultaneously, especially with live events in a certain region, causing a lot of traffic in a short window.
A requirement the applications landscape must be able to handle.&lt;/p&gt;
&lt;p&gt;When a user unsubscribes, it is accepted that there might still be a valid token, and the user can still watch content for some time (mostly minutes or hours).
Of course, only as long as legal contracts allow it.&lt;/p&gt;
&lt;h2 id=&quot;the-standard-handles-various-use-cases&quot; tabindex=&quot;-1&quot;&gt;The standard handles various use cases &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/digital-identities-in-the-wild/#the-standard-handles-various-use-cases&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The cool part about the standard is that it handles both use cases.
Either way, I can use the standard and form a configuration.&lt;/p&gt;
&lt;p&gt;For the financial-based use case:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The backend consults the identity provider for session validity. Session termination takes effect immediately.&lt;/li&gt;
&lt;li&gt;Use short-session lifespans. There is less risk for session takeover, and it is straightforward for the identity provider to manage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The entertainment app:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use long-session lifespans. Users log in once, and the session covers the rest from now on.&lt;/li&gt;
&lt;li&gt;Rely on token validation on the client to reduce overall traffic at the identity provider.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;the-implementation-is-where-it-falls-apart&quot; tabindex=&quot;-1&quot;&gt;The implementation is where it falls apart &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/digital-identities-in-the-wild/#the-implementation-is-where-it-falls-apart&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Let&#39;s look at the identity provider implementation a bit closer.
Besides the user flows like login, the server has to manage all the sessions it issues.
There is no one-size-fits-all model for a technical session management solution.
So, decisions will have tradeoffs.&lt;/p&gt;
&lt;p&gt;The entertainment app:
Users might have many active devices but only use a small proportion.
All these sessions will last for a long time, though.
It&#39;s important to have a data store that scales to many sessions.
Having eventual consistency works fine.
The optimisation is placed around fast session retrieval.
The handling of lots of traffic forces making tradeoffs regarding flexibility.&lt;/p&gt;
&lt;p&gt;Looking at the financial solution with short session live spans.
Sessions exist when users actively use the portal.
It might have a manageable session count.
In case of a user termination, it must get and delete all user sessions immediately.
This situation works better with a solution that offers more flexibility in retrieving necessary sessions.
Limits towards scaling are fine.&lt;/p&gt;
&lt;h3 id=&quot;so-whats-with-the-incident-then&quot; tabindex=&quot;-1&quot;&gt;So what&#39;s with the incident, then? &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/digital-identities-in-the-wild/#so-whats-with-the-incident-then&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I was working in a team that runs a big entertainment app.
We used an open-source solution that handles various use cases, including financial-grade APIs.
Therefore, the identity provider offers the feature to terminate all user sessions immediately.
It uses a cache underneath (plus persistent storage), allowing quick and flexible session retrieval.
There are certain scaling limits attached to it.
For us, daily operations went fine.
The server issues sessions, and the cache is scaled accordingly.&lt;/p&gt;
&lt;p&gt;It went well up to the point where an unrelated issue forced the identity provider to restart.
On startup, it loaded all persisted sessions in the cache but ran out of memory.
This is where it all fell apart.&lt;/p&gt;
&lt;p&gt;We discovered that terminating a user&#39;s sessions only works by having all sessions in the cache (remember the financial-grade requirement).
Requiring sessions just in time from the persisted storage works fine for everything else.&lt;/p&gt;
&lt;p&gt;Our incident resolution was to start with an empty persisted storage.
After the successful startup, we did a storage failover.
That way, it can retrieve all persisted sessions on each request later.
Just the feature to terminate all sessions from a user wouldn&#39;t work (which we don&#39;t use anyway).&lt;/p&gt;
&lt;p&gt;Let&#39;s say our mean time to recovery (MTTR) could&#39;ve been better.
Sometimes, we have to learn it the hard way.
Indeed, we now have patches and multiple resiliency and fallback measures in place.&lt;/p&gt;
&lt;p&gt;I can now scratch being on the title page of major newspapers from my bucket list, even though it wasn&#39;t listed there in the first place.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/digital-identities-in-the-wild/#conclusion&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Technical standards are great.
They offer general concepts, architectures or abstractions for various use cases.
We implement them across many sectors with even contradicting requirements.
Thanks to the configuration options, it works everywhere.
It&#39;s fascinating how a standard–an abstract concept–can be applied to many use cases.&lt;/p&gt;
&lt;p&gt;Digital identities include user registration, login password reset, etc.
It seems to be a solved problem, a commodity.
Every app has it, and the standard is there.
Though looking into the design &amp;amp; implementation, it might not be straightforward.
Like banking, which relies on short session spans and the ability to terminate any session on any device.
Or a streaming provider interested in logging in users once and keeping them logged in as long as possible.
Comparing the two use cases, we see that they have contradicting requirements.
But the standard handles both.&lt;/p&gt;
&lt;p&gt;However, be cautious about open-source implementations.
Technical decisions force tradeoffs.
Ensure that ready-to-go solutions don&#39;t oppose limitations due to supporting other use cases.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Appliance UI nightmares</title>
      <link>https://wiechtig.com/blog/appliance-ui-nightmares/</link>
      <pubDate>Tue, 30 Jul 2024 24:00:00 GMT</pubDate>
      <author>Florian Wiech</author>
      <guid>https://wiechtig.com/blog/appliance-ui-nightmares/</guid>
      <description>&lt;p&gt;In the modern world, I use appliances daily.
They help me with all sorts of ordinary tasks.
My interaction with them gets them working.
Most commonly, I use an interface for it.
And that&#39;s where the trouble starts.
Over time, I&#39;ve seen appliances that were hard to configure.
By sharing them, I aim to increase awareness of appliances&#39; UIs.&lt;/p&gt;
&lt;h2 id=&quot;ui-nightmares&quot; tabindex=&quot;-1&quot;&gt;UI nightmares &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/appliance-ui-nightmares/#ui-nightmares&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;navigation-misconception&quot; tabindex=&quot;-1&quot;&gt;Navigation misconception &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/appliance-ui-nightmares/#navigation-misconception&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The first is about a navigation misconception with the microwave at the office.
It has a digital display and a scroll wheel to adjust the input.
I only have one controller and multiple input options.
So, I need some indication by the machine of which input I&#39;ll change.
The solution at this point couldn’t be more confusing:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://wiechtig.com/img/9m4hn_5T6l-250.webp 250w, https://wiechtig.com/img/9m4hn_5T6l-316.webp 316w, https://wiechtig.com/img/9m4hn_5T6l-426.webp 426w, https://wiechtig.com/img/9m4hn_5T6l-460.webp 460w, https://wiechtig.com/img/9m4hn_5T6l-500.webp 500w, https://wiechtig.com/img/9m4hn_5T6l-580.webp 580w, https://wiechtig.com/img/9m4hn_5T6l-632.webp 632w, https://wiechtig.com/img/9m4hn_5T6l-768.webp 768w, https://wiechtig.com/img/9m4hn_5T6l-852.webp 852w, https://wiechtig.com/img/9m4hn_5T6l-920.webp 920w, https://wiechtig.com/img/9m4hn_5T6l-1160.webp 1160w, https://wiechtig.com/img/9m4hn_5T6l-1536.webp 1536w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;img alt=&quot;A black surface, black display background and white text. The selection display is split into two halves. The left side shows the power input. It has a black background with a red top border. On the right side, I adjust the timer. It shows this side with a blue background.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://wiechtig.com/img/9m4hn_5T6l-250.jpeg&quot; width=&quot;1536&quot; height=&quot;720&quot; srcset=&quot;https://wiechtig.com/img/9m4hn_5T6l-250.jpeg 250w, https://wiechtig.com/img/9m4hn_5T6l-316.jpeg 316w, https://wiechtig.com/img/9m4hn_5T6l-426.jpeg 426w, https://wiechtig.com/img/9m4hn_5T6l-460.jpeg 460w, https://wiechtig.com/img/9m4hn_5T6l-500.jpeg 500w, https://wiechtig.com/img/9m4hn_5T6l-580.jpeg 580w, https://wiechtig.com/img/9m4hn_5T6l-632.jpeg 632w, https://wiechtig.com/img/9m4hn_5T6l-768.jpeg 768w, https://wiechtig.com/img/9m4hn_5T6l-852.jpeg 852w, https://wiechtig.com/img/9m4hn_5T6l-920.jpeg 920w, https://wiechtig.com/img/9m4hn_5T6l-1160.jpeg 1160w, https://wiechtig.com/img/9m4hn_5T6l-1536.jpeg 1536w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;/picture&gt;&lt;figcaption&gt;Microwave selection screen&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;After inspecting this setup:
Which side (left or right in the picture) is selected?
In other words, will it change the left or right side using the scroll wheel?
Would you agree our gut tells us it is the right side with the blue background that illuminates us?
Turns out this is wrong.
It&#39;s the left side.
A black background on a black surface with a red border at the top means selected. 🤯&lt;/p&gt;
&lt;p&gt;This microwave is installed in the office.
Everyone using it is confused over and over again.&lt;/p&gt;
&lt;h3 id=&quot;touchscreens-everywhere&quot; tabindex=&quot;-1&quot;&gt;Touchscreens everywhere &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/appliance-ui-nightmares/#touchscreens-everywhere&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You might have recognised this trend.
Nowadays, a device with many buttons has a touchscreen in the latest release.
It&#39;s being marketed as the next big thing.
The most famous example I can think of is the Touch Bar on the MacBook 🫠.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://wiechtig.com/img/SLdI8A1R1E-250.webp 250w, https://wiechtig.com/img/SLdI8A1R1E-316.webp 316w, https://wiechtig.com/img/SLdI8A1R1E-426.webp 426w, https://wiechtig.com/img/SLdI8A1R1E-460.webp 460w, https://wiechtig.com/img/SLdI8A1R1E-500.webp 500w, https://wiechtig.com/img/SLdI8A1R1E-580.webp 580w, https://wiechtig.com/img/SLdI8A1R1E-632.webp 632w, https://wiechtig.com/img/SLdI8A1R1E-768.webp 768w, https://wiechtig.com/img/SLdI8A1R1E-852.webp 852w, https://wiechtig.com/img/SLdI8A1R1E-920.webp 920w, https://wiechtig.com/img/SLdI8A1R1E-1160.webp 1160w, https://wiechtig.com/img/SLdI8A1R1E-1536.webp 1536w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://wiechtig.com/img/SLdI8A1R1E-250.jpeg&quot; width=&quot;1536&quot; height=&quot;772&quot; srcset=&quot;https://wiechtig.com/img/SLdI8A1R1E-250.jpeg 250w, https://wiechtig.com/img/SLdI8A1R1E-316.jpeg 316w, https://wiechtig.com/img/SLdI8A1R1E-426.jpeg 426w, https://wiechtig.com/img/SLdI8A1R1E-460.jpeg 460w, https://wiechtig.com/img/SLdI8A1R1E-500.jpeg 500w, https://wiechtig.com/img/SLdI8A1R1E-580.jpeg 580w, https://wiechtig.com/img/SLdI8A1R1E-632.jpeg 632w, https://wiechtig.com/img/SLdI8A1R1E-768.jpeg 768w, https://wiechtig.com/img/SLdI8A1R1E-852.jpeg 852w, https://wiechtig.com/img/SLdI8A1R1E-920.jpeg 920w, https://wiechtig.com/img/SLdI8A1R1E-1160.jpeg 1160w, https://wiechtig.com/img/SLdI8A1R1E-1536.jpeg 1536w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;/picture&gt;&lt;figcaption&gt;MacBook Pro with Touch Bar&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Don&#39;t get me wrong: A touchscreen can offer the user convenience if done correctly.
However, it is up to the user to determine if this solution is best suited for interacting with a device.&lt;/p&gt;
&lt;h4 id=&quot;touch-buttons&quot; tabindex=&quot;-1&quot;&gt;Touch buttons &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/appliance-ui-nightmares/#touch-buttons&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Then there are other products which work perfectly with buttons.
It is a blast.
Suddenly, the next generation has touch buttons instead of physical ones.
Why? I don&#39;t know. Maybe it&#39;s to have something new to show or to be cheaper to produce.&lt;/p&gt;
&lt;p&gt;One example I remember is the cooktop at home.
The old one has knobs.
I can set the number to heat the hotplate perfectly. There is no problem.
It just works.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://wiechtig.com/img/4uYYA9SReq-250.webp 250w, https://wiechtig.com/img/4uYYA9SReq-316.webp 316w, https://wiechtig.com/img/4uYYA9SReq-426.webp 426w, https://wiechtig.com/img/4uYYA9SReq-460.webp 460w, https://wiechtig.com/img/4uYYA9SReq-500.webp 500w, https://wiechtig.com/img/4uYYA9SReq-580.webp 580w, https://wiechtig.com/img/4uYYA9SReq-632.webp 632w, https://wiechtig.com/img/4uYYA9SReq-768.webp 768w, https://wiechtig.com/img/4uYYA9SReq-852.webp 852w, https://wiechtig.com/img/4uYYA9SReq-920.webp 920w, https://wiechtig.com/img/4uYYA9SReq-1160.webp 1160w, https://wiechtig.com/img/4uYYA9SReq-1536.webp 1536w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;img alt=&quot;Knobs of a stove&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://wiechtig.com/img/4uYYA9SReq-250.jpeg&quot; width=&quot;1536&quot; height=&quot;1152&quot; srcset=&quot;https://wiechtig.com/img/4uYYA9SReq-250.jpeg 250w, https://wiechtig.com/img/4uYYA9SReq-316.jpeg 316w, https://wiechtig.com/img/4uYYA9SReq-426.jpeg 426w, https://wiechtig.com/img/4uYYA9SReq-460.jpeg 460w, https://wiechtig.com/img/4uYYA9SReq-500.jpeg 500w, https://wiechtig.com/img/4uYYA9SReq-580.jpeg 580w, https://wiechtig.com/img/4uYYA9SReq-632.jpeg 632w, https://wiechtig.com/img/4uYYA9SReq-768.jpeg 768w, https://wiechtig.com/img/4uYYA9SReq-852.jpeg 852w, https://wiechtig.com/img/4uYYA9SReq-920.jpeg 920w, https://wiechtig.com/img/4uYYA9SReq-1160.jpeg 1160w, https://wiechtig.com/img/4uYYA9SReq-1536.jpeg 1536w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;/picture&gt;&lt;figcaption&gt;Knobs of a stove&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The new one has touch buttons, and the issues have started.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://wiechtig.com/img/A8LBKgZFxG-250.webp 250w, https://wiechtig.com/img/A8LBKgZFxG-316.webp 316w, https://wiechtig.com/img/A8LBKgZFxG-426.webp 426w, https://wiechtig.com/img/A8LBKgZFxG-460.webp 460w, https://wiechtig.com/img/A8LBKgZFxG-500.webp 500w, https://wiechtig.com/img/A8LBKgZFxG-580.webp 580w, https://wiechtig.com/img/A8LBKgZFxG-632.webp 632w, https://wiechtig.com/img/A8LBKgZFxG-768.webp 768w, https://wiechtig.com/img/A8LBKgZFxG-852.webp 852w, https://wiechtig.com/img/A8LBKgZFxG-920.webp 920w, https://wiechtig.com/img/A8LBKgZFxG-1160.webp 1160w, https://wiechtig.com/img/A8LBKgZFxG-1536.webp 1536w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;img alt=&quot;Touch buttons on the main plate of a cooker&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://wiechtig.com/img/A8LBKgZFxG-250.jpeg&quot; width=&quot;1536&quot; height=&quot;630&quot; srcset=&quot;https://wiechtig.com/img/A8LBKgZFxG-250.jpeg 250w, https://wiechtig.com/img/A8LBKgZFxG-316.jpeg 316w, https://wiechtig.com/img/A8LBKgZFxG-426.jpeg 426w, https://wiechtig.com/img/A8LBKgZFxG-460.jpeg 460w, https://wiechtig.com/img/A8LBKgZFxG-500.jpeg 500w, https://wiechtig.com/img/A8LBKgZFxG-580.jpeg 580w, https://wiechtig.com/img/A8LBKgZFxG-632.jpeg 632w, https://wiechtig.com/img/A8LBKgZFxG-768.jpeg 768w, https://wiechtig.com/img/A8LBKgZFxG-852.jpeg 852w, https://wiechtig.com/img/A8LBKgZFxG-920.jpeg 920w, https://wiechtig.com/img/A8LBKgZFxG-1160.jpeg 1160w, https://wiechtig.com/img/A8LBKgZFxG-1536.jpeg 1536w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;/picture&gt;&lt;figcaption&gt;Cooktop with touch buttons&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Setting the level is very hard and takes practice.
The touchscreen isn&#39;t straightforward.&lt;/p&gt;
&lt;p&gt;Sometimes, a hot cooking pot near the input causes the stove to make error sounds.
Is placing a pot on the cooktop problematic now?
Wait, what?&lt;/p&gt;
&lt;h4 id=&quot;the-beauty-of-physical-buttons&quot; tabindex=&quot;-1&quot;&gt;The beauty of physical buttons &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/appliance-ui-nightmares/#the-beauty-of-physical-buttons&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;In short, I can use it without looking at it.&lt;/p&gt;
&lt;p&gt;A colleague of mine once told a great story I certainly relate to:
When driving, I have better things to do than look at the screen to select the song.
Well, driving, of course. I focus on the road and my surroundings.&lt;/p&gt;
&lt;p&gt;With physical buttons, I still have a display to see what I select.
But after doing the same routine often enough, I remember the combination that got me to playing music.
I use the buttons and don’t look at the screen anymore.
I know three clicks from the scroll wheel and two clicks on a button, and my playlist runs.
That&#39;s so comfortable.
I don&#39;t have that with a touchscreen.&lt;/p&gt;
&lt;p&gt;Product Managers sometimes answer to feedback:
“Oh, but you can use the voice assistant.”
Maybe it&#39;s just me, but it feels weird to talk to a machine.
It&#39;s just not my thing.&lt;/p&gt;
&lt;h3 id=&quot;when-associations-dont-work&quot; tabindex=&quot;-1&quot;&gt;When associations don&#39;t work &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/appliance-ui-nightmares/#when-associations-dont-work&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Next up is a coffee machine.
Here, I have the touchscreen of a coffee machine in the office.
It shows some brewing options and some circles at the bottom of the screen.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://wiechtig.com/img/JNgOeUmjwy-250.webp 250w, https://wiechtig.com/img/JNgOeUmjwy-316.webp 316w, https://wiechtig.com/img/JNgOeUmjwy-426.webp 426w, https://wiechtig.com/img/JNgOeUmjwy-460.webp 460w, https://wiechtig.com/img/JNgOeUmjwy-500.webp 500w, https://wiechtig.com/img/JNgOeUmjwy-580.webp 580w, https://wiechtig.com/img/JNgOeUmjwy-632.webp 632w, https://wiechtig.com/img/JNgOeUmjwy-768.webp 768w, https://wiechtig.com/img/JNgOeUmjwy-852.webp 852w, https://wiechtig.com/img/JNgOeUmjwy-920.webp 920w, https://wiechtig.com/img/JNgOeUmjwy-1160.webp 1160w, https://wiechtig.com/img/JNgOeUmjwy-1536.webp 1536w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;img alt=&quot;coffee machine selection&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://wiechtig.com/img/JNgOeUmjwy-250.jpeg&quot; width=&quot;1536&quot; height=&quot;1040&quot; srcset=&quot;https://wiechtig.com/img/JNgOeUmjwy-250.jpeg 250w, https://wiechtig.com/img/JNgOeUmjwy-316.jpeg 316w, https://wiechtig.com/img/JNgOeUmjwy-426.jpeg 426w, https://wiechtig.com/img/JNgOeUmjwy-460.jpeg 460w, https://wiechtig.com/img/JNgOeUmjwy-500.jpeg 500w, https://wiechtig.com/img/JNgOeUmjwy-580.jpeg 580w, https://wiechtig.com/img/JNgOeUmjwy-632.jpeg 632w, https://wiechtig.com/img/JNgOeUmjwy-768.jpeg 768w, https://wiechtig.com/img/JNgOeUmjwy-852.jpeg 852w, https://wiechtig.com/img/JNgOeUmjwy-920.jpeg 920w, https://wiechtig.com/img/JNgOeUmjwy-1160.jpeg 1160w, https://wiechtig.com/img/JNgOeUmjwy-1536.jpeg 1536w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;/picture&gt;&lt;figcaption&gt;Coffee machine screen&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The circles at the bottom of the screen look like a pagination.
There might be more options on other pages.
And I&#39;m correct with that assumption.&lt;/p&gt;
&lt;p&gt;The specific layout of the pagination reminds me of the pagination I’m used to on an &lt;a href=&quot;https://support.apple.com/library/content/dam/edam/applecare/images/en_US/ios/iphoto/ios15-iphone13-pro-home-camera-callout.png&quot; target=&quot;_blank&quot;&gt;iPhone screen&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://wiechtig.com/img/ZDHmQtFd6A-250.webp 250w, https://wiechtig.com/img/ZDHmQtFd6A-316.webp 316w, https://wiechtig.com/img/ZDHmQtFd6A-426.webp 426w, https://wiechtig.com/img/ZDHmQtFd6A-460.webp 460w, https://wiechtig.com/img/ZDHmQtFd6A-500.webp 500w, https://wiechtig.com/img/ZDHmQtFd6A-580.webp 580w, https://wiechtig.com/img/ZDHmQtFd6A-632.webp 632w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;img alt=&quot;iPhone pagination example&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://wiechtig.com/img/ZDHmQtFd6A-250.jpeg&quot; width=&quot;632&quot; height=&quot;327&quot; srcset=&quot;https://wiechtig.com/img/ZDHmQtFd6A-250.jpeg 250w, https://wiechtig.com/img/ZDHmQtFd6A-316.jpeg 316w, https://wiechtig.com/img/ZDHmQtFd6A-426.jpeg 426w, https://wiechtig.com/img/ZDHmQtFd6A-460.jpeg 460w, https://wiechtig.com/img/ZDHmQtFd6A-500.jpeg 500w, https://wiechtig.com/img/ZDHmQtFd6A-580.jpeg 580w, https://wiechtig.com/img/ZDHmQtFd6A-632.jpeg 632w&quot; sizes=&quot;(max-width: 768px) 100vw, 768px&quot; /&gt;&lt;/picture&gt;&lt;figcaption&gt;iPhone screen pagination&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;So why don’t I use the same swipe gesture I already know to change the page?
But it turns out that swipe to the next page doesn&#39;t work.
Even worse, when I try the gesture, it recognises a click.
So it takes the start of my swipe as the selection and starts brewing.&lt;/p&gt;
&lt;p&gt;That means the first time I use the device, I&#39;ll be surprised with a random beverage.
After that bad experience, I try to click the circle to move to the page.
And here I go.&lt;/p&gt;
&lt;p&gt;It&#39;s astonishing.
Everyone using any of these devices does it wrong the first time.
Didn&#39;t they notice while developing the machine?
Who said yes to shipping the product with this UI?!&lt;/p&gt;
&lt;h2 id=&quot;its-part-of-your-product-journey&quot; tabindex=&quot;-1&quot;&gt;It&#39;s part of your product journey &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/appliance-ui-nightmares/#its-part-of-your-product-journey&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These examples show that mistakes can still happen late in product development.
But first things first.&lt;/p&gt;
&lt;p&gt;In product development, I focus on four dimensions: desirability, feasibility, viability, and usability.
Most often, I start in this order.&lt;/p&gt;
&lt;p&gt;Customers won&#39;t buy the product when there is no desire for my solution (desirability).
I have to be able to ship the product to have a product to sell (feasibility).
I have another problem when customers don&#39;t want to pay enough for my production cost (viability).
Finally, even if I fulfil the first three points, I might still produce a difficult-to-use product.
This will annoy users, and they still won&#39;t be satisfied.
And this is where the issues with these appliances are.&lt;/p&gt;
&lt;h2 id=&quot;a-note-to-the-creators&quot; tabindex=&quot;-1&quot;&gt;A note to the creators &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/appliance-ui-nightmares/#a-note-to-the-creators&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These examples highlight that it is essential to do proper UI testing, even for physical appliances.
It can be as simple as showcasing your product with free usage at the next marketing event.
You provide your potential customers with the machine and let them explore independently.
You stay behind and carefully watch what they&#39;re doing.
The learnings you gain from these experiments are invaluable.&lt;/p&gt;
&lt;p&gt;If you need help with that, you can approach UX/I experts.
They focus on user experience and user interface and know what to do.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/appliance-ui-nightmares/#conclusion&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I use appliances daily.
They might be personal devices at home or shared with colleagues in the office.&lt;/p&gt;
&lt;p&gt;Human and machine interaction can cause issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I mix up an element with the cursor and head in the wrong direction.&lt;/li&gt;
&lt;li&gt;Touchscreen replaced buttons where I loved using buttons.&lt;/li&gt;
&lt;li&gt;I associate an interface with something I already know, but this time, it works differently.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is crucial to test humans&#39; interaction with the machine&#39;s controls.
This is especially important for appliances.
Once built, I intend to keep and use them for a long time.&lt;/p&gt;
&lt;p&gt;Even from a product development viewpoint, usability is essential.
It might not be the first thing, but it becomes key later.
Reality shows that there is much to gain by obtaining user feedback during development.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Feature vs. Benefit. Tell the difference.</title>
      <link>https://wiechtig.com/blog/features-vs-benefits/</link>
      <pubDate>Mon, 29 Apr 2024 24:00:00 GMT</pubDate>
      <author>Florian Wiech</author>
      <guid>https://wiechtig.com/blog/features-vs-benefits/</guid>
      <description>&lt;p&gt;&lt;em&gt;This experience blew my mind.&lt;/em&gt;
&lt;em&gt;It brings a completely new light towards building software.&lt;/em&gt;
&lt;em&gt;However, it sets software in a new context that few developers might appreciate.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I remember the first time I created a business model canvas at university.
All the boxes seemed intuitive.
I thought about it and filled it.
It was nice to have everything put on paper.
But nothing more.
I shrugged and went back to building software.&lt;/p&gt;
&lt;p&gt;Some years later, I worked on a different piece of software.
I struggled with the feature scope and whether users would use it.
Finally, I approached my product coach colleagues and asked them for their advice.
After all, they have &lt;em&gt;product&lt;/em&gt; in their title, and I&#39;m trying to build one.
Let&#39;s see what they got.&lt;/p&gt;
&lt;p&gt;They asked me why don&#39;t you go for a business model canvas.
Aww, cute. I already did that and have it in my head.
But surely I can put it onto paper, and we can talk about it, no problem.
Boy, I was so wrong.&lt;/p&gt;
&lt;p&gt;I created the desired document, and we (&lt;a href=&quot;https://www.linkedin.com/in/b%C3%B6hmer/&quot; target=&quot;_blank&quot;&gt;Mathias&lt;/a&gt; and I) discussed it.
Most boxes were okay-ish.
They align to some levels with similar business models and ideas.
Then we came to the centre, the most important piece: &lt;em&gt;value proposition&lt;/em&gt;.
I explained what great features it has.
Many visualisations and insights are based on the data.
But somehow, he wasn&#39;t satisfied with my answer.
He kept asking what he could do with it.
And I&#39;m like, obviously, you see more.
Don&#39;t you see how nice they are and how they look?
Mathias: Yeah, that&#39;s nice, but what can I do with it?&lt;/p&gt;
&lt;p&gt;It felt like I was standing in front of a wall.
He said you have to go five more meters.
And I&#39;m like, no way, don&#39;t you see the wall?!
Him again: five more meters, please.&lt;/p&gt;
&lt;p&gt;Finally, he approached his point from a different angle:
As a user, what do I want to achieve? How does it change my current workflow? How is it better than before? What is the current problem that makes it difficult for me? How does your proposed solution solve it? And why do you think your proposed solution is the best fit?&lt;/p&gt;
&lt;p&gt;Uhm. Good questions.
I never thought about it this way.
Indeed, I thought about these points, but my gut told me it would work.
Or logically thinking it through just made sense.
So, I proceeded to see if I was right.&lt;/p&gt;
&lt;p&gt;But here is the bummer: Answering the questions above is key to product adoption.
Without a clear and validated concept, you just have a coding exercise.
But no digital product.&lt;/p&gt;
&lt;p&gt;It&#39;s like my parent&#39;s generation doing crossword puzzles.
It entertains, and you might learn something.
But the execution won&#39;t bring you any further in a business context.&lt;/p&gt;
&lt;p&gt;Returning to my insightful conversation with Mathias, he asked me further:
How did you validate the data you wrote there?&lt;br /&gt;
Me: Wait, what? Validation? Surely, I know what I’m doing.&lt;br /&gt;
Mathias: But how do you know that users will use it?&lt;br /&gt;
Me: Oh, great question, thank you for asking. Something I’ve always asked myself and struggled with.&lt;/p&gt;
&lt;p&gt;I only knew if the product worked when I invested a lot of time building and shipping the software.
Mathias helped me understand:
There are many approaches to validate ideas before you invest time in software.
Again, it was very eye-opening.
But I’ll keep this for next time.
Let me know if you’re interested: &lt;a href=&quot;mailto:hi@wiechtig.com&quot; target=&quot;_blank&quot;&gt;hi@wiechtig.com&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;feature-or-benefit&quot; tabindex=&quot;-1&quot;&gt;Feature or benefit? &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/features-vs-benefits/#feature-or-benefit&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;My problem resided in a subtle but significant difference.
As engineers, we think in features.
We figure out solutions and consider how to build something.
But do we know their benefits?&lt;/p&gt;
&lt;p&gt;Here is an example differentiating between a feature and a benefit of a rain jacket:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Feature: Waterproof material with a hydrostatic head rating&lt;/li&gt;
&lt;li&gt;Benefit: Walk through the rain for three hours. Stay dry and comfortable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Another famous example is the iPod:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Feature: 5 GB storage capacity, unique scroll wheel controller (&lt;a href=&quot;https://everymac.com/systems/apple/ipod/specs/ipod.html&quot; target=&quot;_blank&quot;&gt;Source&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Benefit: 1,000 songs in your pocket.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From these examples, we learn:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt; are the characteristics or functionalities of a product.
They describe what the product can do or what it is made of.&lt;/p&gt;
&lt;p&gt;On the other hand, &lt;strong&gt;benefits&lt;/strong&gt; refer to the value that users derive from those features.
They answer the question, &amp;quot;What&#39;s in it for me?&amp;quot;&lt;/p&gt;
&lt;p&gt;In essence, features are what the product has, while benefits are what the user gains from those features.&lt;/p&gt;
&lt;p&gt;Ok, got it. But why bother about benefits?&lt;br /&gt;
Coming back to our rain jacket example:
You can achieve the same benefit with other things than a jacket.
Like a rain poncho or umbrella.
You could use a different waterproof material.
All of those are features.
Some features might work better than others.&lt;br /&gt;
But in the end, users care about the benefits they receive.
Your product competes against others with the same benefits, no matter the features.&lt;/p&gt;
&lt;h2 id=&quot;value-proposition-in-a-nutshell&quot; tabindex=&quot;-1&quot;&gt;Value proposition in a nutshell &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/features-vs-benefits/#value-proposition-in-a-nutshell&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The difference between features and benefits is crucial for the value proposition:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A value proposition articulates which customer needs a product fulfils better than the available alternatives.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In other words, it highlights the key benefits for users.&lt;/p&gt;
&lt;p&gt;A famous example is Amazon.
They aim to be the best in these trades:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;low prices,&lt;/li&gt;
&lt;li&gt;large product selection,&lt;/li&gt;
&lt;li&gt;fast delivery,&lt;/li&gt;
&lt;li&gt;convenience.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are the things customers look for when purchasing goods.
Compared to alternatives like brick-and-mortar stores, customers can&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;enjoy the convenience of shopping from the comfort of their homes,&lt;/li&gt;
&lt;li&gt;access a vast array of products,&lt;/li&gt;
&lt;li&gt;find better deals than traditional retail options,&lt;/li&gt;
&lt;li&gt;get products delivered to their doorstep within short timeframes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;benefit-misconceptions-everywhere&quot; tabindex=&quot;-1&quot;&gt;Benefit misconceptions everywhere &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/features-vs-benefits/#benefit-misconceptions-everywhere&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Why do I tell you that?
Due to my work, I&#39;m often faced with new projects.
It turns out they have business model canvases, too.
Great, let me see them.
Looking at it, what do I see?
Features in the value proposition, damn.&lt;/p&gt;
&lt;p&gt;On top of that, it often results from a brainstorming session (like I did).
So, no validation happened yet.
Using this idea as an investment baseline for software is risky.&lt;/p&gt;
&lt;p&gt;I learned from my experiences (as the one above):
Think of your ideas as a hypothesis.
Validate this hypothesis with easy-to-set-up experiments.
Keep them as simple, fast and cheap as possible.
The data you gain shows if the hypothesis is correct.
This approach provides earlier customer feedback and reduces investment risk.&lt;/p&gt;
&lt;h2 id=&quot;uncover-benefits-of-running-software&quot; tabindex=&quot;-1&quot;&gt;Uncover benefits of running software &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/features-vs-benefits/#uncover-benefits-of-running-software&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When jumping into a new project, I often face already-running systems.
As a newcomer, I want to know why some components exist.
It helps me to&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;understand and focus on customer and business value. A prerequisite for being effective.&lt;/li&gt;
&lt;li&gt;understand the benefits. It offers an infinite space for solutions. A prerequisite for creativity and innovation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When I ask engineers what their system is used for, they talk for ages about what it does.
But these are the features.
How can I get them to talk about the value users receive?
And this without explaining the concept or making them read my article first?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/posts/john-rs-fletcher_solutionarchitecture-features-thinkoutsidethebox-activity-7171882446265782273-dcpc&quot; target=&quot;_blank&quot;&gt;John&lt;/a&gt; suggests to ask engineers:
Why don&#39;t we shut the component down?
Or at least consider what would happen if we did:
Who would this harm?
What would be the problem for the business?
What problems would we need to solve another way?&lt;/p&gt;
&lt;p&gt;Talking about these questions shifts the conversation from features to benefits.
It helps to understand what value a component adds.&lt;/p&gt;
&lt;h2 id=&quot;your-engineering-career-depends-on-it&quot; tabindex=&quot;-1&quot;&gt;Your engineering career depends on it &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/features-vs-benefits/#your-engineering-career-depends-on-it&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I assume you earn your money with software engineering.
You are interested in progressing your career and tackling more interesting technical issues.&lt;/p&gt;
&lt;p&gt;Keep in mind:
You could build the best piece of software.
When nobody uses it, it holds no value for the company and drives no revenue.
You might be surprised when someone with sloppy software gets promoted over you.
This person increases the company&#39;s value by delivering customers the desired benefits.
If you don&#39;t understand your product&#39;s value proposition, your promotion to the next level depends on the people around you or luck.&lt;/p&gt;
&lt;p&gt;Imagine your skillset is a megaphone.
The people who hear the message from it might react, not care, or, worse, be mad at you.
If you don&#39;t care about the message, your career could head in a direction you don&#39;t intend.
You focus on reinforcing the message, which may make things worse.
On the other hand, you can check that the message resonates with people.
You own your career.
All it takes is some basic knowledge and an interest in product management.
If you do your job well, you will progress and take on more exciting challenges.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/features-vs-benefits/#conclusion&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There is a difference between features and benefits.
Features are the functionalities of a product.
Benefits refer to the value users receive.&lt;/p&gt;
&lt;p&gt;For humans, software is a feature, not a benefit.
Therefore, it is a means to an end.
It might help you to get the value you want.
But remember, users always ask what they gain, no matter the features.&lt;/p&gt;
&lt;p&gt;When you need clarification about the benefits, ask product managers.
Figuring out what to build that brings users value is product discovery.
It&#39;s their area of expertise.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;To understand more about product management, look at the &lt;a href=&quot;https://www.productmap.cc/&quot; target=&quot;_blank&quot;&gt;Product Map&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Weird naming vibes. Are there any good ones?</title>
      <link>https://wiechtig.com/blog/weird-naming-vibes/</link>
      <pubDate>Mon, 25 Mar 2024 24:00:00 GMT</pubDate>
      <author>Florian Wiech</author>
      <guid>https://wiechtig.com/blog/weird-naming-vibes/</guid>
      <description>&lt;p&gt;A parallel team at work names all their services after types of sausage.
One called &amp;quot;bratwurst&amp;quot;, the following &amp;quot;curry sausage&amp;quot;, and so on.
In an incident, people from different teams sit together, and one shouts: &amp;quot;The bratwurst is down&amp;quot;.
Sadly, nobody–apart from the team members–can deduce the affected area from the given context.&lt;/p&gt;
&lt;p&gt;I get similar vibes when I try to book a room in the office.
I want to book the big meeting room.
What was the name again?
Let&#39;s take a little office walk.&lt;/p&gt;
&lt;p&gt;Our meeting room naming pattern has a noble gesture:
The base for each room name is a woman&#39;s name.
These women achieved significant milestones in software development.
It is a tribute to them and their contributions to the field.&lt;/p&gt;
&lt;p&gt;Don&#39;t get me wrong, embedding these gestures into everyday life is admirable.
But after years of working in the office (yes, I&#39;m still working on-site), I can&#39;t remember a single room&#39;s name.&lt;/p&gt;
&lt;h2 id=&quot;i-cant-deduce-the-name-from-my-inner-image&quot; tabindex=&quot;-1&quot;&gt;I can&#39;t deduce the name from my inner image &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/weird-naming-vibes/#i-cant-deduce-the-name-from-my-inner-image&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;My problem in a nutshell:
I know the office layout and see an image of the room in my head.
But I need to determine which room to select in the booking tool.
The listed names are not associated with the office layout or rooms themselves.&lt;/p&gt;
&lt;p&gt;Mentioning this issue led to an interesting discussion.
It had some great insights I&#39;ll share in this post.&lt;/p&gt;
&lt;h2 id=&quot;how-can-we-do-better&quot; tabindex=&quot;-1&quot;&gt;How can we do better? &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/weird-naming-vibes/#how-can-we-do-better&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;use-context-based-names&quot; tabindex=&quot;-1&quot;&gt;Use context-based names &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/weird-naming-vibes/#use-context-based-names&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Good names combine your knowledge and the function:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;your knowledge + functionality = name&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Converting it to our room naming issue:&lt;br /&gt;
&lt;em&gt;building layout + picture of the meeting room = room&#39;s name&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We can apply the same structure to technical services:
Assume an entertainment app with a personalised music integration from a third party.
A service translates a local access token into a third-party access token.
Both information lead to the service name: &lt;em&gt;&amp;lt;third-party&amp;gt;-token-service&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This should even work another way:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;your knowledge + name = functionality&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Again applied:&lt;br /&gt;
&lt;em&gt;building layout + room&#39;s name = idea for the kind of room&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And to our entertainment app with personalised music integration case:
The name &amp;lt;third-party&amp;gt;-token-service suggests that the service provides third-party tokens.
With personalisation in mind, we need some user identification.
Therefore, it might receive a local access token.&lt;/p&gt;
&lt;p&gt;This example shows that you can jump through the entire system landscape with only a baseline of knowledge.
It vastly improves productivity.&lt;/p&gt;
&lt;p&gt;To nail it, you have to figure out what the baseline knowledge for your system is.
Reality shows it is complex, and you might need to adapt it regularly.
I often come across names I need help deciphering.
Sometimes, I realise that there&#39;s some knowledge missing on my side.&lt;/p&gt;
&lt;p&gt;Coming back to our room naming case:
What if the name pattern has nothing to do with the current layout or kind of room?
You can extend the context.
Make the room&#39;s name the central design focus.
You could hang a big painting in the room so noticeable that people will remember it.
Unfortunately, our rooms have already been designed and built.
So, we need another option.
And there is one.&lt;/p&gt;
&lt;h3 id=&quot;establish-a-common-name-pattern&quot; tabindex=&quot;-1&quot;&gt;Establish a common name pattern. &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/weird-naming-vibes/#establish-a-common-name-pattern&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You can still fall back to a familiar name pattern when context-based names don&#39;t work.&lt;br /&gt;
Every day, you come by some obvious ones.
These are basic things like left and right.&lt;br /&gt;
Others are the location or floor level.
Most buildings have a number for each floor instead of a name.
It starts with the ground floor zero, followed by floors one, two, etc.&lt;/p&gt;
&lt;p&gt;These patterns are so embedded into our everyday lives that you can safely rely on them.
Like enterprises that (ab)use traffic lights for a quick project health check.&lt;/p&gt;
&lt;h2 id=&quot;in-our-case-location-based-numbers-helped&quot; tabindex=&quot;-1&quot;&gt;In our case: Location-based numbers helped &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/weird-naming-vibes/#in-our-case-location-based-numbers-helped&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Coming back to my initial room booking issue:
How did we resolve our problem?&lt;br /&gt;
We extended the name pattern using the location on the same floor.
Each room receives a number based on the distance of the entrance.
When you enter the office, you start at zero and can walk to room seven.&lt;br /&gt;
Every time I want to book a room, I walk through the office in my head and count the rooms.
Now we have a sorted meeting room list, and I can quickly spot the room I&#39;m interested in.&lt;/p&gt;
&lt;p&gt;In the end, we have two name patterns for different use cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;People from other locations book a room. They choose it based on its description and remember the name to find it later. They can learn about the room&#39;s name and history at the location.&lt;/li&gt;
&lt;li&gt;Everyone at the office who wants to get the job done quickly can use the location-based numbers. It only interrupts their current task as little as necessary.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/weird-naming-vibes/#conclusion&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As an engineer, you know, &lt;a href=&quot;https://martinfowler.com/bliki/TwoHardThings.html&quot; target=&quot;_blank&quot;&gt;naming things is hard&lt;/a&gt;.
There are no perfect names.
But some patterns work.
You could deduce names based on the context and function or a familiar pattern.&lt;/p&gt;
&lt;p&gt;Naming is and remains a fine line.
You nail the name and boost productivity.
Otherwise, it leads to more complexity.&lt;/p&gt;
&lt;p&gt;Embedding noble gestures–like honouring past achievements–deeper into everyday life is admirable.
To achieve the remembering part, create deeper associations between the past and present.
For example, when naming meeting rooms, you can use related visuals inside the room.
These visuals help to associate the room with the past and its name.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>How Decision Records Fuel Sustainable Growth</title>
      <link>https://wiechtig.com/blog/decision-records/</link>
      <pubDate>Thu, 22 Feb 2024 24:00:00 GMT</pubDate>
      <author>Florian Wiech</author>
      <guid>https://wiechtig.com/blog/decision-records/</guid>
      <description>&lt;p&gt;&lt;em&gt;Architectural Decision Records (ADRs) are about persisting decisions for others in the future.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Every day on the job, you make decisions.
Those decisions have a context and specific drivers.
Often, you consider several options for solving a problem.
Each one has its pros and cons.
In the end, you decide, which has consequences.
Good and bad ones (hopefully, the good ones prevail 😉).&lt;/p&gt;
&lt;p&gt;Your choices serve you well as time passes, but the world changes.
At some point, either you or a colleague might revisit the decision.
The outcome of the decision no longer fits, or there is room for improvement.
Without historical knowledge, it will be challenging to determine the new requirements.
New ones might contradict some prior ones.
But we don&#39;t know because we no longer have those previous requirements.
Reality shows that they can only be partially restored at best.
This makes a new decision difficult.&lt;br /&gt;
Returning to the first decision-making and inspecting these initial requirements would be great.
Decision records help you do that.&lt;/p&gt;
&lt;p&gt;Typical examples for decision records:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stack decisions: Choosing a library that helps us with the feature.&lt;/li&gt;
&lt;li&gt;Architecture decisions: We have various architectural ideas and must pick one.&lt;/li&gt;
&lt;li&gt;Solution constructs: Why structure our code a certain way?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;make-writing-down-easy-and-routine&quot; tabindex=&quot;-1&quot;&gt;Make writing down easy and routine &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/decision-records/#make-writing-down-easy-and-routine&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;short-templates-provide-a-skeleton&quot; tabindex=&quot;-1&quot;&gt;Short templates provide a skeleton &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/decision-records/#short-templates-provide-a-skeleton&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A decision log can be as simple as a summary of&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;decision drivers,&lt;/li&gt;
&lt;li&gt;considered options,&lt;/li&gt;
&lt;li&gt;positive and negative consequences,&lt;/li&gt;
&lt;li&gt;and the final decision.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following metadata provides further insights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;status (proposed, accepted, deprecated, ...),&lt;/li&gt;
&lt;li&gt;deciders (involved people),&lt;/li&gt;
&lt;li&gt;story link you are working on&lt;/li&gt;
&lt;li&gt;the date&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To avoid starting at a blank page, several skeletons help you to get the job done quickly.
You can find them here:
&lt;a href=&quot;https://github.com/joelparkerhenderson/architecture-decision-record/tree/847ed2a378164a9fbb3106e26891ac4873de855b/templates&quot; target=&quot;_blank&quot;&gt;ADR templates&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;daily-routines-enforce-the-written-log&quot; tabindex=&quot;-1&quot;&gt;Daily routines enforce the written log &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/decision-records/#daily-routines-enforce-the-written-log&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Remember to write decisions down.
Make it part of your routine.
This is hard but crucial for success.
In the beginning, you might miss some occasions where it could be helpful.
But don&#39;t give up hope.
You can still write it down when the first person approaches you for an explanation.&lt;/p&gt;
&lt;h2 id=&quot;written-records-enable-better-collaboration&quot; tabindex=&quot;-1&quot;&gt;Written Records enable better collaboration &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/decision-records/#written-records-enable-better-collaboration&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here&#39;s how you can turn conversations for the better with it:
Let&#39;s consider some conversations you may have in your day-to-day activities between:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Engineer and Architect&lt;/li&gt;
&lt;li&gt;Two engineers, where one is a new hire&lt;/li&gt;
&lt;li&gt;Cross-team communication&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;when-rethinking-solutions&quot; tabindex=&quot;-1&quot;&gt;When rethinking solutions &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/decision-records/#when-rethinking-solutions&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Exhausting Conversation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bob: &amp;quot;Well, we have the problem that our view count service receives a lot of traffic from our feed service. Shouldn&#39;t we introduce circuit breakers?&amp;quot; &lt;em&gt;The most appropriate short form I could come up with to describe the problem.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Pete: &amp;quot;Huh? These are part of our policy. Why aren&#39;t they built in there?! Please do it ASAP.&amp;quot; &lt;em&gt;damn, what the hell are these guys doing?!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Bob: &amp;quot;OK, I will bring it to the team.&amp;quot; &lt;em&gt;why are you so mean? This setup has its history.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Helpful Conversation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bob: &amp;quot;Well, our view count has recently received a lot of traffic from our feed service. Let&#39;s rethink our decision (&lt;em&gt;link&lt;/em&gt;) about skipping circuit breakers and introduce them now.&amp;quot; &lt;em&gt;thank god we have decision records, and I don&#39;t sound like an idiot who has no idea about our internal policies.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Pete: &amp;quot;Oh, I see, there&#39;s quite a history. Revisiting this decision with the emerged load patterns is a good idea.&amp;quot;&lt;/p&gt;
&lt;p&gt;Bob: &amp;quot;Great, I&#39;ll write a proposal and send it for review.&amp;quot; &lt;em&gt;Nice, that was helpful.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;when-understanding-solutions&quot; tabindex=&quot;-1&quot;&gt;When understanding solutions &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/decision-records/#when-understanding-solutions&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Exhausting Conversation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bob: &amp;quot;Since my start last week, I recognised a service call connection between service x and y. What&#39;s it all about? Why is it the way it is?&amp;quot; &lt;em&gt;Wow, that looks weird.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Peter: &amp;quot;Sure, I can explain the setup, and we can discuss it.&amp;quot; &lt;em&gt;Hmm, I already explained it to some other folks recently, and now, I have one more. I would rather do something else.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Bob: &amp;quot;OK, I&#39;ll send you a meeting invitation.&amp;quot; &lt;em&gt;and one meeting more. puh.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Helpful Conversation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bob: &amp;quot;Since my start last week, I recognised a service call connection between service x and y. What&#39;s it all about? Why is it the way it is?&amp;quot; &lt;em&gt;Wow, that looks weird.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Peter: &amp;quot;You can read about it here &lt;em&gt;(link)&lt;/em&gt;. If you have questions, bring them to our next team discussion.&amp;quot; &lt;em&gt;thank god we have documentation, and I can focus on my current task.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Bob: &amp;quot;Got it, thanks.&amp;quot; &lt;em&gt;great, I can read it while travelling this evening.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;log-decisions-across-the-organisation&quot; tabindex=&quot;-1&quot;&gt;Log decisions across the organisation &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/decision-records/#log-decisions-across-the-organisation&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In practice, we work inside organisations with agile solution trains.
Each one consists of many delivery teams.
Architecture and product roles help coordinate and prioritise.
Each organisational level has its own focus.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution Train Level&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;High-level decisions that impact several teams happen here.
People from tech, product and management work together.
Choose a solution where everyone can collaborate.
This ensures everyone involved has access to the relevant information and contributes insights.
Getting non-technical people to learn Git may not be the best fit.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Team Level&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Each team develops and maintains a couple of services.
Cross-service or product decisions happen here.
Again, tech, product and management collaborate.
So, you want to use the same tooling as on the solution train level.
You can even span a graph via cross-referencing decisions.
It highlights how decisions on each layer work hand in hand.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Technical Level&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Technical decisions should be as close to the code as possible.
Please don&#39;t document something you can look up by reading the code.
Remember: Keep a single source of truth.
Generate all the other views you need from this single source.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion &lt;a class=&quot;header-anchor&quot; href=&quot;https://wiechtig.com/blog/decision-records/#conclusion&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You make decisions every day. Intentional or unintentional. Writing them down at every organisational level is essential.
A decision log can be as simple as a summary of the drivers, options, consequences, and the final decision.
Some metadata like the status, deciders, and date provide further insights.&lt;/p&gt;
&lt;p&gt;Keeping a written log of your decisions...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;...helps everyone in the team to remember why a solution is as it is
&lt;ul&gt;
&lt;li&gt;because less time is spent researching why a solution is weird&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;...helps onboarding new team members with async knowledge exchange
&lt;ul&gt;
&lt;li&gt;because everyone can read it themselves at their own pace and time&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;...less risk of losing essential team knowledge
&lt;ul&gt;
&lt;li&gt;because no knowledge is bound to specific team members&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Done right, it simplifies collaboration and reduces friction.
A key pillar for ongoing progress and growth within the organisation.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Now I turn back to my docs and create my second ADR, having decided in the first to write ADRs in the future.&lt;/em&gt;&lt;/p&gt;
</description>
    </item>

  </channel>
</rss>
