<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: arc42</title>
    <description>The latest articles on DEV Community by arc42 (@arc42).</description>
    <link>https://dev.to/arc42</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F4456%2Fe10f4cfa-af37-45f5-830b-c3abf784236f.jpg</url>
      <title>DEV Community: arc42</title>
      <link>https://dev.to/arc42</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arc42"/>
    <language>en</language>
    <item>
      <title>How to regain concentration and focus</title>
      <dc:creator>Dr. Gernot Starke</dc:creator>
      <pubDate>Wed, 03 Aug 2022 12:34:00 +0000</pubDate>
      <link>https://dev.to/arc42/how-to-regain-concentration-and-focus-32b9</link>
      <guid>https://dev.to/arc42/how-to-regain-concentration-and-focus-32b9</guid>
      <description>&lt;p&gt;This article was originally published at &lt;a href="https://www.innoq.com/en/blog/wie-ich-meine-konzentration-wiederfand/"&gt;INNOQ&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;No sooner had I started a task, the next thing I knew I was doing something else. I distracted myself by checking my email inbox every so often, and I was addicted to checking what was going on in the world on various news websites, constantly interrupting the original task.&lt;/p&gt;

&lt;p&gt;You're perfectly right: This sounds completely insane. Somehow these bad habits had sneaked silently into my life.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;News is to the mind what sugar is to the body.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
Rolf Dobelli, Author and entrepreneur&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;​&lt;br&gt;
And then two lightning bolts struck almost simultaneously: a book and a blog post. &lt;br&gt;
I significantly changed my (digital) life as a result and within only two weeks I was able to get more done again, sleep better, and am significantly happier. &lt;br&gt;
The short version: news diet and productive smartphone use.&lt;br&gt;
​&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g09bruH9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g29tnqdru0hqatdd8pes.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g09bruH9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g29tnqdru0hqatdd8pes.jpg" alt="Lightning strikes" width="880" height="382"&gt;&lt;/a&gt;&lt;/p&gt;
Lightning strikes

  

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  How my concentration was lost…
&lt;/h2&gt;

&lt;p&gt;For years, I've been producing  &lt;em&gt;content&lt;/em&gt; on a fairly regular basis in the form of talks, books, journal articles, blog posts, podcasts, and contributions to open-source projects (To quantify that: &lt;a href="https://www.gernotstarke.de/buecher/"&gt;30+ books or book editions&lt;/a&gt; and about a hundred articles in various magazines within the last 20 years - that's still one and a half books and five articles on average per year).&lt;br&gt;
​&lt;br&gt;
In the last few months, I ran out of steam, which made me personally very discontent. In early 2022 I published the last blog post, and in late 2021 the last articles. For the third time, I postponed the new edition of the arc42-in-Action book ...&lt;/p&gt;

&lt;p&gt;I had plenty of ideas, but somehow I couldn't put them down on paper. Unfortunately, ideas alone are not enough: the ideas also have to be made into reality, structured, and written down in comprehensible ways.&lt;/p&gt;

&lt;p&gt;Moreover, I was always a dedicated textbook reader, and binge-read a new book every few weeks. That, too, became more and more difficult for me - even though I was genuinely interested in the topics of the unread books on the shelf.&lt;br&gt;
Now, I could chalk it all up to the pandemic, my age (don't ask...), or whatever. But finding bogus excuses is just not my thing.&lt;br&gt;
​&lt;br&gt;
​&lt;br&gt;
"You've got to do something about that," I told myself. At first, I tried to increase my productivity and creativity by getting up earlier. No such luck. Staying up later in the evening didn't work either.&lt;br&gt;
​&lt;br&gt;
Then I tried what I've recommended (successfully!) countless times in my job as an IT consultant: A systematic analysis of the situation, a self-review.&lt;br&gt;
​&lt;/p&gt;

&lt;h4&gt;
  
  
  The self-analysis
&lt;/h4&gt;

&lt;p&gt;I tried to analyze my own way of working. I quickly noticed that it was becoming increasingly difficult for me to concentrate on individual tasks: No sooner had I started a task than I was already doing something else in between - or &lt;em&gt;distracted&lt;/em&gt; myself with emails or various news websites. Likewise, I sat at preparing a lecture - and checked the INNOQ Slack channels in between. Furthermore, I continued to write on a slide - and took a brief look at my smartphone to see what's been happening on WhatsApp or Signal. And since I was holding the phone in my hand anyway, I could read a few news items on BBC-News there too.&lt;/p&gt;

&lt;p&gt;Did you know that smartphone users unlock and look at their phones an average of 80-100 times a day (source: &lt;a href="https://www.prnewswire.com/news-releases/americans-check-their-phones-96-times-a-day-300962643.html"&gt;Cision Newswire&lt;/a&gt;, several other sources giving similar numbers)? I was one of them.&lt;br&gt;
News websites like &lt;a href="https://edition.cnn.com/"&gt;CNN&lt;/a&gt;, &lt;a href="https://www.wsj.com/"&gt;WSJ&lt;/a&gt;, and &lt;a href="https://www.bbc.com/"&gt;BBC&lt;/a&gt; had me as a permanent customer.&lt;br&gt;
​&lt;/p&gt;

&lt;p&gt;For me, these context switches already had addiction-like traits. &lt;br&gt;
Even while I was watching a series (yes, I admit that I like to &lt;em&gt;binge&lt;/em&gt; on one or two episodes), I would pick up the phone or tablet in between and casually check the news. &lt;br&gt;
Against my better judgment, I also checked my e-mails first thing in the morning before I even drank my first espresso.&lt;br&gt;&lt;br&gt;
And in my inbox, there were always various news summaries, from stock-market news, and international politics up to technology updates.&lt;br&gt;
​&lt;br&gt;
Unfortunately, all this news has done me more harm than good: For my coaching and consulting engagements, I don't need to know anything about current domestic or foreign politics. &lt;br&gt;
For my software architecture and engineering workshops, neither stock market trends nor the details of international terrorist acts are of any value. &lt;br&gt;
My articles and books deal with software and software engineering, not with climate or politics.&lt;br&gt;
​&lt;/p&gt;

&lt;h2&gt;
  
  
  A self-discovery
&lt;/h2&gt;

&lt;p&gt;Constantly switching between (sophisticated) technical work, the news from around the world, and private communication on personal and professional topics, I would argue, cost me a significant amount of my ability to concentrate.&lt;br&gt;
​&lt;br&gt;
My brain (apparently) doesn't handle frequent context switches well. Moreover, my brain must have unconsciously perceived distractions as something positive - and, like Pavlov's dog, kept wanting more of them, at increasingly shorter intervals.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FZcnwx_b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7hrr040ekbr2pg3skc20.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FZcnwx_b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7hrr040ekbr2pg3skc20.jpg" alt="A (Pavlovian) dog" width="880" height="361"&gt;&lt;/a&gt;&lt;/p&gt;
A (Pavlovian) dog

   

&lt;p&gt;I noticed the lack of concentration myself. However, my own fainthearted attempts, with Pomodoro timer and calming sounds, clearly failed.&lt;br&gt;
Effective remedies &lt;em&gt;from the outside&lt;/em&gt; had to come first, two major sources helped me:&lt;br&gt;
​&lt;br&gt;
While travelling to an architecture workshop, I sat on the train, not reading the news for a change, but attempting to read a book.&lt;/p&gt;

&lt;p&gt;For some time now, I have been using &lt;a href="https://www.blinkist.com/"&gt;Blinkist&lt;/a&gt; to read short summaries of various non-fiction books, to find out for myself whether I is worth for me to read the original of these books in their entirety.&lt;/p&gt;

&lt;p&gt;So - I'm sitting on the train and reading one of these &lt;a href="https://www.dobelli.com/en/books/"&gt;Blinks&lt;/a&gt;, when I'm struck by a mental lightning bolt: I felt so &lt;em&gt;caught&lt;/em&gt; by Rolf Dobelli's explanations, caught in my concentration trap, that I spontaneously decided to get serious. Let me quote from this book:&lt;br&gt;
​&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;News is not good for us:&lt;/strong&gt; &lt;br&gt;
It clouds our mind, distorts our view of what is really important, robs us of time, makes us depressed and paralyzes our willpower.&lt;br&gt;
​Rolf Dobelli, Author and entrepreneur&lt;br&gt;
​&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Paralyze my willpower, rob me of time. &lt;/p&gt;

&lt;p&gt;That was precisely my problem.&lt;/p&gt;

&lt;p&gt;While still sitting on the train, I decided to try a strict break from any news (&lt;em&gt;news&lt;/em&gt;, not e-mails or other messages) for a while.&lt;/p&gt;

&lt;p&gt;However, that wasn't enough: I remembered a blog post I had read a few years ago - about the &lt;a href="https://betterhumans.pub/how-to-set-up-your-iphone-for-productivity-focus-and-your-own-longevity-bb27a68cc3d8"&gt;productive configuration of smartphones&lt;/a&gt;, which has the promising subtitle &lt;em&gt;Configure Your iPhone to Work for You, Not Against You&lt;/em&gt;.&lt;br&gt;
I therefore decided to optimize my iPhone for maximum productivity and to reduce or even eliminate distractions.&lt;br&gt;
​&lt;/p&gt;

&lt;h2&gt;
  
  
  Drastic, but effective
&lt;/h2&gt;

&lt;p&gt;​&lt;br&gt;
​&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A (currently very strict) &lt;strong&gt;zero-news-diet&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;(Re)configure smartphone for high productivity and minimal distractions.&lt;/li&gt;
&lt;li&gt;Reduce distractions on tablets and computers.
​
Add to that slight changes I made to my daily habits: I've resolved (and managed for a few weeks now) to stop staring at my phone in the morning, and to stop using my iPhone at all in the evening after 8 PM at the latest (exception: setting an alarm for the next morning).
​&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  Zero News Diet
&lt;/h2&gt;

&lt;p&gt;During the aforementioned train ride, I cancelled my subscription to my formerly favorite online news portal (the German "Spiegel-Online") and deleted the associated app from my iPhone. I used the initial motivation to cancel additional news subscriptions and deleted the their apps from my smartphone and iPad so that I wouldn't be tempted. &lt;/p&gt;

&lt;p&gt;I have resolved &lt;strong&gt;very firmly&lt;/strong&gt; not to read any news at all for a while. In other words, a zero news diet. That was really hard for me for two or three days. Yet, that alone was a startling realization for me: I was actually &lt;em&gt;addicted&lt;/em&gt; to news and variety... and &lt;em&gt;cold withdrawal&lt;/em&gt; is hard with any kind of addiction, as you know.&lt;/p&gt;

&lt;p&gt;I purposefully invested the hours gained each day.&lt;br&gt;
As a kind of early reward for my zero news diet, I treated myself to an interesting non-fiction book as a PDF (by the way, the infamous "Thinking, Fast and Slow" by the great Daniel Kahnemann). &lt;br&gt;
The result: I was thrilled to have made good progress without any distractions.&lt;/p&gt;

&lt;p&gt;To support my news diet, I instructed my browser (Firefox) to &lt;em&gt;not&lt;/em&gt; present me with recommendations for supposedly interesting or important topics on new tabs or windows.&lt;/p&gt;

&lt;p&gt;&lt;a href="" class="article-body-image-wrapper"&gt;&lt;img alt="Firefox preferences: No more news suggestions"&gt;&lt;/a&gt;&lt;/p&gt;
Firefox preferences: No more news suggestions

  

&lt;p&gt;​&lt;br&gt;
​&lt;/p&gt;

&lt;h2&gt;
  
  
  Reconfigure Smartphone
&lt;/h2&gt;

&lt;p&gt;The above quote, "Configure Your iPhone to Work for You, Not Against You," sets the objective: &lt;br&gt;
It's the subtitle of a very long &lt;a href="https://betterhumans.pub/how-to-set-up-your-iphone-for-productivity-focus-and-your-own-longevity-bb27a68cc3d8"&gt;blog post&lt;/a&gt; by Tony Stubblebine.&lt;br&gt;
In addition to his many configuration suggestions, Tony also gives various advice for being more attentive and healthy, entirely worth reading in my opinion.&lt;br&gt;
​&lt;br&gt;
I summarize the things most important for me, which he illustrates in his article with many screenshots and explanations:&lt;br&gt;
​&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Turn off (almost) all notifications – so those red dots aren't constantly vying for your attention or making you feel guilty.&lt;/li&gt;
&lt;li&gt;Hide &lt;em&gt;social media&lt;/em&gt; apps as well as possible. Facebook, Instagram, Twitter &amp;amp; Co act like drugs. They deserve to be removed from the start/home screen and moved somewhere in the back of your smartphone. I deleted the Twitter app and kept Instagram only because it allows me to catch up a bit with my adult children.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Messaging apps (email, WhatsApp, Signal and co.) go into a folder, and preferably on the second screen of that folder. For me, it looks like this (K11n stands for communication):&lt;br&gt;
​&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jRQPsW9P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/62c5pvulqi9wq70qz2vg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jRQPsW9P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/62c5pvulqi9wq70qz2vg.png" alt="Communication apps – unimportant ones need more “swipe” gestures" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;
Communication apps – unimportant ones need more “swipe” gestures

  &lt;/li&gt;
&lt;li&gt;&lt;p&gt;Turn on do-not-disturb-mode, the longer, the better. At least from evening until morning.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lifting the phone should &lt;strong&gt;not&lt;/strong&gt; unlock it. This setting is called "Display &amp;amp; Brightness/Activate on Lift" on the iPhone - and should definitely be turned off.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Turn on the screen time widget – this gives me control over all the things I spend my smartphone time on... Meanwhile, I have made a sport out of getting to the smallest value possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Turn on content and app restrictions. I only allow myself 15 minutes a day for email and Instagram.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install a swipe keyboard app, so I can text faster on the phone and not have to awkwardly &lt;em&gt;click&lt;/em&gt; each letter. I use &lt;a href="https://www.microsoft.com/en-us/swiftkey"&gt;Microsoft Swiftkey&lt;/a&gt; (yes correct, a Microsoft app on the iPhone) for this, others do better with Google's &lt;a href="https://en.wikipedia.org/wiki/Gboard"&gt;Gboard&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wallpapers in muted colors. I chose a completely black home screen, and a reduced color lock screen:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2YRyw4Bx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5wqnwc7byxrhwmqt7x5h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2YRyw4Bx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5wqnwc7byxrhwmqt7x5h.png" alt="iPhone backgrounds in muted colors" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;
iPhone backgrounds in muted colors



&lt;p&gt;​&lt;/p&gt;

&lt;h2&gt;
  
  
  Reduce distractions on tablets and computers
&lt;/h2&gt;

&lt;p&gt;You will find similar preference settings on your tablet and your computer, respectively. I set those to reduce &lt;em&gt;notifications&lt;/em&gt; as much as possible:&lt;br&gt;
​&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mtryByo7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gyr8tzs3ocsp5evsrmr5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mtryByo7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gyr8tzs3ocsp5evsrmr5.png" alt="Notifications settings, almost all turned off" width="664" height="729"&gt;&lt;/a&gt;&lt;/p&gt;
Notifications settings, almost all turned off



&lt;h2&gt;
  
  
  In case you fall off the wagon
&lt;/h2&gt;

&lt;p&gt;In case you want to be a bit stricter with yourself, there are various blockers for popular desktop platforms that can prevent access to certain websites or applications for certain times. These can improve your digital self-discipline. I tried &lt;a href="https://getcoldturkey.com/"&gt;ColdTurkey&lt;/a&gt; and like it a lot. However, I hope to become disciplined enough to stick to my new habits without this electronic tether… at least in the near future.&lt;br&gt;
​&lt;/p&gt;

&lt;h2&gt;
  
  
  Furthermore...
&lt;/h2&gt;

&lt;p&gt;Besides the aforementioned settings and the zero news diet, I like to listen to &lt;em&gt;soundscapes&lt;/em&gt; for (supposedly) better mental focus when working intensively at my desk. I write &lt;em&gt;supposedly&lt;/em&gt; because I like this kind of aural background, but can't prove that it helps me in any way. My family, by the way, thinks it's horrible.&lt;/p&gt;

&lt;p&gt;If you want to try it out: My two favorites are &lt;a href="https://endel.io/about"&gt;Endel&lt;/a&gt; and &lt;a href="https://www.brain.fm/"&gt;brain.fm&lt;/a&gt;. Works on both smartphones and desktops (but please don’t say I didn’t warn you…).&lt;br&gt;
​&lt;br&gt;
I still haven't gotten comfortable with Pomodoro timers, they annoy me more than they help.&lt;br&gt;
​&lt;br&gt;
And finally, thanx to Łukasz, you might want to restrict your YouTube usage with the &lt;a href="https://unhook.app/"&gt;unhook&lt;/a&gt; extension. I tried that and immediately liked it. You have to tweak the default settings, though. No more wasted hours due to the addictive YouTube proposition algorithm...&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Why don't you start a self-experiment, and refrain from reading sports, politics, business, and technology news as much as possible for a while? Reduce your smartphone time drastically for one or two weeks, and enjoy the time gained with a good book, a personal conversation or approach a previously abandoned activity that has been left undone so far (due to a perceived lack of time…)&lt;/p&gt;

&lt;p&gt;Good luck – and I look forward to your feedback.&lt;br&gt;
​&lt;/p&gt;

&lt;h2&gt;
  
  
  Acknowledgements
&lt;/h2&gt;

&lt;p&gt;Thanks to Jochen Christ, Joachim Praetorius, Jan Seeger and Ben Wolf for reviews and constructive comments.  @m and Joy Heron have drastically improved readability and wording.&lt;br&gt;
​&lt;br&gt;
This article was originally published at &lt;a href="https://www.innoq.com/en/blog/wie-ich-meine-konzentration-wiederfand/"&gt;INNOQ&lt;/a&gt;, achieved a #4 rank and more than 300 comments on &lt;a href="https://news.ycombinator.com"&gt;Hackernews&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Image Sources
&lt;/h3&gt;

&lt;p&gt;​&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://unsplash.com/photos/ngqyo2AYYnE"&gt;Dog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://unsplash.com/photos/vmvlzJz1lHg"&gt;Lightning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://unsplash.com/photos/7KLa-xLbSXA"&gt;Header image&lt;/a&gt; by Paul Skorupskas
​&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;​&lt;br&gt;
​&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>motivation</category>
    </item>
    <item>
      <title>Enable ssh access to multipass vms</title>
      <dc:creator>Dr. Gernot Starke</dc:creator>
      <pubDate>Mon, 01 Aug 2022 15:03:00 +0000</pubDate>
      <link>https://dev.to/arc42/enable-ssh-access-to-multipass-vms-36p7</link>
      <guid>https://dev.to/arc42/enable-ssh-access-to-multipass-vms-36p7</guid>
      <description>&lt;h4&gt;
  
  
  The problem
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;You are using &lt;a href="https://multpass.run"&gt;multipass&lt;/a&gt; to create lightweight virtual (Ubuntu) machines.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You want to &lt;code&gt;ssh&lt;/code&gt; into those machines, because you cannot or don't want to use the &lt;em&gt;standard&lt;/em&gt; shell command &lt;code&gt;multipass shell &amp;lt;name-of-vm&amp;gt;&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The naive approach fails with &lt;code&gt;permission denied&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ssh 192.168.205.7
The authenticity of host '192.168.205.7 (192.168.205.7)' can't be established.
ED25519 key fingerprint is SHA256:lWKUbxxxx.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.205.7' (ED25519) to the list of known hosts.
gernotstarke@192.168.205.7: Permission denied (publickey).

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Permission denied, although there is a route to this virtual machine available...&lt;/p&gt;

&lt;h3&gt;
  
  
  Different approaches
&lt;/h3&gt;

&lt;p&gt;Two approaches have been documented elsewhere:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add an ssh-key to an existing virtual machine (explained by &lt;a href="https://dev.to/josuebustos/vs-code-remote-ssh-multipass-dn8"&gt;Josue Bustos here&lt;/a&gt;). Downside of this approach: You have to repeat it (more or less manually) for all new VMs you create with &lt;code&gt;multipass launch&lt;/code&gt;. Therefore, let's look at a solution that will also work for new VMs...&lt;/li&gt;
&lt;li&gt;Pass an ssh-key while creating a multipass VM (explained in detail by &lt;a href="https://www.ivankrizsan.se/2020/12/23/multipass-key-based-authentication/"&gt;Ivan Krizsan here&lt;/a&gt;). In short: You generate a new ssh-key, and pass the public key into every new VM. I summarize the required steps below.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The solution
&lt;/h3&gt;

&lt;p&gt;(I mention it again, the idea presented here have first been described by &lt;a href="https://www.ivankrizsan.se/2020/12/23/multipass-key-based-authentication/"&gt;Ivan Krizsan&lt;/a&gt;):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create new ssh-key for your multipass VMs&lt;/li&gt;
&lt;li&gt;Create a reusable launch configuration for multipass VMs with cloud-init&lt;/li&gt;
&lt;li&gt;Launch new multipass VMs with this configuration&lt;/li&gt;
&lt;li&gt;Find out IP-address of new multipass VM&lt;/li&gt;
&lt;li&gt;ssh into the new VM with this IP-address&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Prerequisites: You have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multipass installed. If not, it's &lt;a href="https://multipass.run/install"&gt;well-documented on their website&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;a terminal running a decent shell (bash, zsh).&lt;/li&gt;
&lt;li&gt;a decent text editor (VS-Code, nano, vim or the like.)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  1.: Create ssh-key
&lt;/h4&gt;

&lt;p&gt;On your host machine (the one with multipass installed), change to the directory from where you will be launching multipass vms. It can be your home directory, but any other will do.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;ssh-keygen &lt;span class="nt"&gt;-C&lt;/span&gt; vmuser &lt;span class="nt"&gt;-f&lt;/span&gt; multipass-ssh-key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;vmuser&lt;/code&gt; can be any (dummy) username, it will later be used to log into the VM.&lt;/li&gt;
&lt;li&gt;The parameter to &lt;code&gt;-f&lt;/code&gt; is the filename for the generated key. You can choose a name of your liking, but there must not be an existing key with the same name in the same directory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You will be asked to enter a passphrase, leave that empty! I know, it's not as secure as it should be, but multipass VMs are used for development and test only...&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Empty passphrases are &lt;strong&gt;NOT&lt;/strong&gt; suited for production environments.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  2.: Create cloud-init configuration
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://cloudinit.readthedocs.io/en/latest/"&gt;Cloud-init&lt;/a&gt; is the standardized approach for cross-platform cloud and VM configuration of instance initialization.&lt;br&gt;
Multipass can handle such configuration, we use it to pass the ssh key into the vm.&lt;/p&gt;

&lt;p&gt;In the directory where you generated the ssh-key, execute the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ touch cloud-init.yaml
$ code cloud-init.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can obviously use any text editor of your choice. Nowadays I use VS-Code for most of my edits.&lt;/p&gt;

&lt;p&gt;Put the following content into this file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;users&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;default&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;vmuser&lt;/span&gt;
    &lt;span class="na"&gt;sudo&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ALL=(ALL) NOPASSWD:ALL&lt;/span&gt;
    &lt;span class="na"&gt;ssh_authorized_keys&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;&amp;lt;content of YOUR public key&amp;gt;&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;&amp;lt;content of YOUR public key&amp;gt;&lt;/code&gt; starts with the letters &lt;code&gt;ssh-rsa&lt;/code&gt; and ends with the username you supplied in step 1. Both have to be included!&lt;/li&gt;
&lt;li&gt;Remember, it's yaml: Sensitive to spaces and dashes.&lt;/li&gt;
&lt;li&gt;In case you generated an &lt;code&gt;ed25519&lt;/code&gt; type of key, it starts with &lt;code&gt;ssh-ed25519&lt;/code&gt;. If you don't know what I'm talking about, ignore this last line.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3.: Launch multipass VM with ssh configuration
&lt;/h4&gt;

&lt;p&gt;You will use a slightly different launch command for your VM, by adding the cloud-init parameter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;multipass launch &lt;span class="nt"&gt;-n&lt;/span&gt; testvm &lt;span class="nt"&gt;--cloud-init&lt;/span&gt; cloud-init.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;testvm&lt;/code&gt; is the name of your new vm, you can choose any name or even leave it blank. In the latter case, multipass will create a random name for you.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cloud-init.yaml&lt;/code&gt; is the name of the configuration file we created in step 2.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  4.: Find IP address of new VM
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ multipass info testvm
Name:           testvm
State:          Running
IPv4:           192.168.205.4
Release:        Ubuntu 20.04.4 LTS
Image hash:     692406940d6a (Ubuntu 20.04 LTS)
Load:           0.00 0.00 0.00
Disk usage:     1.5G out of 4.7G
Memory usage:   140.5M out of 976.9M
Mounts:         --
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;testvm&lt;/code&gt; is the name of the VM you were using in step 3 (launch VM).&lt;/li&gt;
&lt;li&gt;The output of the info command contains the IPv4 address of this VM, you need that in the next step.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  5.: ssh into new VM
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ssh vmuser@192.168.205.4 -i multipass-ssh-key -o StrictHostKeyChecking=no

Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-122-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;vmuser&lt;/code&gt; is the username for which you created the ssh key&lt;/li&gt;
&lt;li&gt;Please replace the IP address by the one you found out in step 4.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And voilá - you made it. &lt;br&gt;
The command itself should be obvious... you pass the name of the ssh-key with the &lt;code&gt;-i&lt;/code&gt; commend (short for identity). In addition, you turn strict host checking off.&lt;/p&gt;

&lt;p&gt;You might see additional messages, depending on your host machine ssh configuration - but  you should be logged in your multipass VM by now.&lt;/p&gt;

&lt;p&gt;May the power of the shell be with you.&lt;/p&gt;

&lt;h3&gt;
  
  
  Acknowledgements
&lt;/h3&gt;

&lt;p&gt;Thanx to &lt;a href="https://www.ivankrizsan.se/2020/12/23/multipass-key-based-authentication/"&gt;Ivan Krizsan&lt;/a&gt;) for providing the initial solution and his nice writeup. I took me a while to cut through numerous web-searches to find his post, therefore I decided to write it up again under a slightly different title.&lt;/p&gt;

&lt;p&gt;All credits and kudos to him! All faults a clearly mine.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>vm</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>Brief introduction to arc42</title>
      <dc:creator>Dr. Gernot Starke</dc:creator>
      <pubDate>Mon, 21 Feb 2022 14:17:56 +0000</pubDate>
      <link>https://dev.to/arc42/brief-introduction-to-arc42-1c0l</link>
      <guid>https://dev.to/arc42/brief-introduction-to-arc42-1c0l</guid>
      <description>&lt;h2&gt;
  
  
  Brief Introduction to arc42
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm1c4o2158gpcprvqm2o6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm1c4o2158gpcprvqm2o6.jpg" alt="Man-made architecture (Berlin Reichstag)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;arc42 &lt;sup id="fnref1"&gt;1&lt;/sup&gt; is a template for architecture communication and documentation.&lt;br&gt;
It is a proven, practical and highly pragmatic approach and takes the pain out of documentation.&lt;/p&gt;

&lt;p&gt;arc42 provides everything you ever need to communicate and document your software architecture.&lt;br&gt;
It's tool and technology agnostic, therefore can you use arc42 for arbitrary systems. &lt;br&gt;
arc42 is open source and completely free to use.&lt;/p&gt;

&lt;p&gt;This article provides a quick overview of arc42 and its parts.&lt;br&gt;
For more information, please consult the (rather extensive) documentation [docsˆ] available on their &lt;a href="https://docs.arc42.org" rel="noopener noreferrer"&gt;documentation website&lt;/a&gt; (which, since V8/January 2022, contains several practical examples).&lt;/p&gt;

&lt;p&gt;arc42 answers the following two questions in a pragmatic way and can be tailored to your specific needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;em&gt;What&lt;/em&gt; should you document/communicate about your architecture?&lt;/li&gt;
&lt;li&gt;  &lt;em&gt;How&lt;/em&gt; should you document/communicate?&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;If you work under time or resource constraints, you will most likely skip certain parts of arc42. Our upcoming post on "lean documentation" will give guidance for such cases.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Before we dive in...
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Everything is optional - there is &lt;strong&gt;no&lt;/strong&gt; need to fill in every section of the template. Treat arc42 documentation like the compartments of a cabinet, similar to the image below: The cabinet has a value, even if certain compartments remain empty.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1lpsa5kpr347ar2cn9dc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1lpsa5kpr347ar2cn9dc.jpg" alt="Cabinet with 12 drawers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(image by &lt;a href="https://unsplash.com/@jankolar" rel="noopener noreferrer"&gt;Jan Kolar&lt;/a&gt; from &lt;a href="https://unsplash.com/photos/lRoX0shwjUQ" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The order of these compartements is optimized for &lt;strong&gt;reading&lt;/strong&gt; and understandability. You create your content in any order you like or your project requires. For example, in many development projects, the context (section 3) is defined and created first, followed by the top quality requirements (section 1.2).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;arc42 is completely tool-agnostic. You might create and maintain arc42 in your toolchain of choice: A wiki, a collection of Office documents, plain Markdown or Asciidoc, one of the commercial UML tools or even LaTeX. Whatever your tool of choice is, arc42 has you covered. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The structure of arc42
&lt;/h3&gt;

&lt;p&gt;arc42 proposes a dozen sections (aka compartments) for your documentation. &lt;br&gt;
These are organized top-down to improve understandability.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdzcud3slvhzz7mhul8ur.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdzcud3slvhzz7mhul8ur.png" alt="arc42 overview"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Introduction and goals
&lt;/h4&gt;

&lt;p&gt;Short description of the requirements and driving forces of your system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Describe what the system delivers for its users in one or two sentences. &lt;/li&gt;
&lt;li&gt;Describe the two or three major use cases or features of the system. &lt;/li&gt;
&lt;li&gt;&lt;p&gt;You should provide an extract or abstract of requirements. &lt;br&gt;
Restrict yourself to the top three (max five) &lt;strong&gt;quality requirements&lt;/strong&gt; for the architecture, which have highest priority for the major stakeholders.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Include a table of important &lt;strong&gt;stakeholders&lt;/strong&gt; with their expectation regarding architecture or documentation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flh4tqyq95gt38z0a5w8l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flh4tqyq95gt38z0a5w8l.png" alt="1. Introduction and goals"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Constraints
&lt;/h4&gt;

&lt;p&gt;Anything that constrains teams in design and implementation decisions or decision about related processes. Constraints can sometimes go beyond individual systems and might valid for whole organizations and companies (e.g. company-wide technology choices or government regulations).&lt;br&gt;
Time and money are common constraints in many organizations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrroqy6ssccv225lzfcx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrroqy6ssccv225lzfcx.png" alt="2. Constraints"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Context and scope
&lt;/h4&gt;

&lt;p&gt;The context delimits your system from its (external) communication partners (neighboring systems and users). &lt;br&gt;
It specifies or documents the &lt;strong&gt;external interfaces&lt;/strong&gt;. &lt;br&gt;
You should always document the context from a business or domain perspective.&lt;br&gt;
If infrastructure or specific hardware plays an important role, you might also show a technical perspective.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vj4zgpgq9ihwndf32y9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vj4zgpgq9ihwndf32y9.png" alt="3. Context and scope"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Solution strategy
&lt;/h4&gt;

&lt;p&gt;Summary of the fundamental decisions and solution strategies that shape the architecture. Can include technology, top-level decomposition, approaches to achieve top quality goals and relevant organizational decisions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1rmty6i1525njdgba40.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1rmty6i1525njdgba40.png" alt="4. Solution strategy"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  5. Building block view
&lt;/h4&gt;

&lt;p&gt;Usually, boxes and arrows, showing the high-level code structure of the system. To phrase it a little more formal: The building block view explains the static structure of the system and contains, abstractions of source-code. It refines the context view, where the complete system is depicted as blackbox.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhbqer4cg1zc6mgy5355.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhbqer4cg1zc6mgy5355.png" alt="5. Building block view"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Level 1 contains the major subsystems, components or parts of the system. In some cases, this coarse overview provides enough structural overview.&lt;/li&gt;
&lt;li&gt;Level 2 refines one or more elements from level 1: Create a separate whitebox (plus explanations) for every level-1 building block you like to explain in detail.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can drill down to an arbitrary level of detail, but keep in mind the following:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Recommendation&lt;/strong&gt;&lt;br&gt;
Try to stick to level-1, as it often gives enough guidance and understanding for most stakeholders.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  6. Runtime view
&lt;/h4&gt;

&lt;p&gt;The runtime view explains the behaviour or processing of one or several building blocks.&lt;br&gt;
It serves as companion to the static building block view from section 5 above.&lt;br&gt;
The runtime view might explain important use cases or features, interactions at critical external interfaces, error and exception behaviour.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbhq2lsssnp0ifuccmaiu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbhq2lsssnp0ifuccmaiu.png" alt="6. Runtime view"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Recommendation&lt;/strong&gt;&lt;br&gt;
Use runtime scenarios primarily during development to validate or design building block structures. They help to identify missing or unnecessary dependencies. Keep only a small number of scenarios in your documentation&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  7. Deployment view
&lt;/h4&gt;

&lt;p&gt;Software needs hardware to execute on, that's where the deployment view comes into play:&lt;br&gt;
It shows the technical infrastructure with environments, computers, processors, networks and network-topologies. &lt;br&gt;
In addition, it maps the software building blocks to those infrastructure elements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhtgpi8pg7ag62hgouj3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhtgpi8pg7ag62hgouj3.png" alt="7. Deployment view"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  8. Cross-cutting concepts
&lt;/h4&gt;

&lt;p&gt;(aka cross-cutting concerns)&lt;/p&gt;

&lt;p&gt;Overall, principal regulations and solution approaches relevant in multiple parts (→ cross-cutting) of the system. Concepts are often related to &lt;strong&gt;multiple building blocks&lt;/strong&gt;. Include different topics like domain models, architecture patterns and -styles, rules for using specific technology and implementation rules.&lt;/p&gt;

&lt;p&gt;!&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqozku5fcfpbbc0db1hdf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqozku5fcfpbbc0db1hdf.png" alt="8. Cross-cutting concepts"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  9. Architecture decisions
&lt;/h4&gt;

&lt;p&gt;Keep a collection of &lt;em&gt;architecturally significant&lt;/em&gt; decisions that are important, expensive, critical, large scale or risky including rationales, that are not recorded elsewhere.&lt;/p&gt;

&lt;p&gt;Please use your judgement to decide whether an architectural decision should be documented here or whether you better document it locally (e.g. within the building block view or any cross-cutting concept). &lt;br&gt;
You may have already captured the most important decisions of your architecture in the solution strategy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxzujkby92mwv2kecmieu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxzujkby92mwv2kecmieu.png" alt="9. Architecture decisions"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Recommendation:&lt;/strong&gt;&lt;br&gt;
Use &lt;a href="https://docs.arc42.org/section-9/" rel="noopener noreferrer"&gt;Architecture Decision Records&lt;/a&gt; to capture decisions in a simple, structured yet pragmatic way.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  10. Quality requirements
&lt;/h4&gt;

&lt;p&gt;Quality requirements, often described as scenarios.&lt;br&gt;
You may use a quality tree to provide a high-level overview. &lt;br&gt;
The most important quality goals should have been already described in section 1.2. (quality).&lt;/p&gt;

&lt;p&gt;Let's look at some examples:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;System shall performs all checks on a 100MByte file in less than 10 seconds.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operability&lt;/td&gt;
&lt;td&gt;The temperature range in which the correct functioning of the device is ensured should range from -25 degrees to +85 degrees&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maintainability&lt;/td&gt;
&lt;td&gt;A new additional verification algorithm can be included in less than one day.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  11. Risks and technical debt
&lt;/h4&gt;

&lt;p&gt;Known technical risks or technical debt. What potential problems exist within or around the system? What does the development team feel miserable about.&lt;/p&gt;

&lt;p&gt;In case somebody reviewed or audited your system, their findings might be included here.&lt;/p&gt;

&lt;h4&gt;
  
  
  12. Glossary
&lt;/h4&gt;

&lt;p&gt;Important domain and technical terms that stakeholders use when discussing the system. &lt;br&gt;
Please include  &lt;strong&gt;only specific terms&lt;/strong&gt; - and avoid explaining REST, HTTPS or other words that have common explanations.&lt;/p&gt;

&lt;p&gt;In addition, the glossary can serve as the translation reference if you work in a multi-language (&lt;em&gt;international&lt;/em&gt;) environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9oi46qn564d4kayafl0x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9oi46qn564d4kayafl0x.png" alt="12. Glossary"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Like what you saw?
&lt;/h3&gt;

&lt;p&gt;Give it a try! Document a few of your architecture decisions, sketch your scope and context and explain a few key technical concepts - and you have your first version of your architecture documentation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://arc42.org/download" rel="noopener noreferrer"&gt;Download&lt;/a&gt; the template in a format you like. Unpack and start documenting. In case you have questions or want to see examples, consult the extensive documentation site &lt;sup id="fnref2"&gt;2&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;In case you want to know more, we have you covered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I wrote about the &lt;a href=""&gt;principles of technical documentation&lt;/a&gt;. That deep-dive article explains the fundamental requirements your technical documentation needs to fulfill - and many proven approaches how to achieve these.&lt;/li&gt;
&lt;li&gt;Another article on &lt;a href=""&gt;lean documentation&lt;/a&gt; is in the making, please stay tuned. Until then, watch the &lt;a href=""&gt;video "Sparsame Dokumentation"&lt;/a&gt; (oops, sorry, it's in German)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Comments or questions?
&lt;/h3&gt;

&lt;p&gt;Leave a comment right below - or open an issue on the &lt;a href="https://github.com/arc42/arc42.org-site/issues" rel="noopener noreferrer"&gt;arc42 site&lt;/a&gt;. Otherwise, thanx for reading this article.&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;&lt;a href="https://arc42.org" rel="noopener noreferrer"&gt;https://arc42.org&lt;/a&gt;. The template has been created by Dr. Peter Hruschka and Dr. Gernot Starke. They published the first version in 2005, after having used predecessor versions for many years in different large and medium-sized projects. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;&lt;a href="https://docs.arc42.org" rel="noopener noreferrer"&gt;https://docs.arc42.org&lt;/a&gt;. The extensive documentation website, containing more than 140 tips and 30 examples on how to use arc42. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>arc42</category>
      <category>architecture</category>
      <category>documentation</category>
      <category>introduction</category>
    </item>
    <item>
      <title>Principles of technical documentation</title>
      <dc:creator>Dr. Gernot Starke</dc:creator>
      <pubDate>Sat, 29 Jan 2022 16:12:10 +0000</pubDate>
      <link>https://dev.to/arc42/principles-of-technical-documentation-4akj</link>
      <guid>https://dev.to/arc42/principles-of-technical-documentation-4akj</guid>
      <description>&lt;p&gt;This article collects fundamental requirements for technical documentation, especially software architecture documentation, together with ideas how to &lt;em&gt;satisfy&lt;/em&gt; those.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;The content of technical documentation needs to be correct, current, understandable and relevant. It needs to be maintainable, referenceable and use proper language. Furthermore, the whole documentation and its content need to be easy to find. To create and maintain such documentation, you should put everything under version control, prefer established tools and automate certain parts. Finally, you should document incrementally and continuously - and &lt;em&gt;not&lt;/em&gt; defer documentation to a &lt;em&gt;later stage of development&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;To help you achieve these goals, the article summarizes more than 30 simple practices that will facilitate your documentation task.&lt;/p&gt;

&lt;h2&gt;
  
  
  0. Introduction
&lt;/h2&gt;

&lt;p&gt;During several years of consulting work, I have noticed that different development teams across organizations in various domains repeated the same documentation mistakes over and over again. Therefore I decided to summarize some fundamental &lt;em&gt;requirements&lt;/em&gt; for technical documentation&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I deliberately mention modeling and diagramming only briefly as these will be subject of another post.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  A counterexample
&lt;/h3&gt;

&lt;p&gt;Imagine you are planning a trip to Scotland with your family. You want to visit the famous castles and legendary landscapes, and walk in the footsteps of the brave Scottish knights.&lt;/p&gt;

&lt;p&gt;To best prepare for this wonderful trip, you visit your local bookstore and ask for a suitable guidebook. The clerk proposes the “Adventure Travel Guide to Scotland”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7loymeb5vcsirjmtdmzm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7loymeb5vcsirjmtdmzm.jpg" alt="Fig 0.1: Your map of Scotland"&gt;&lt;/a&gt;&lt;/p&gt;
Fig. 0.1: Your map of Scotland



&lt;p&gt;Back home, you treat yourself to a decent cup of tea, recline in your favorite chair and start reading. After a couple of pages, you start to wonder if you got the right book (aka documentation):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  To your disappointment the documentation is not useful, as the authors start in Scotland, but quickly deviate to a lengthy coverage of the Spanish island of Fuerteventura&lt;/li&gt;
&lt;li&gt;  Next thing, parts of the documentation seem quite outdated to you. The only map you can find in your new book, despite being visually appealing, was printed&lt;sup id="fnref1"&gt;1&lt;/sup&gt; in 1747, more than 250 years ago (see Fig 0.1). Where the heck are the airports and highways?&lt;/li&gt;
&lt;li&gt;  It contains some serious mistakes - the city of Edinburgh is
misspelled &lt;em&gt;Edembourg&lt;/em&gt;&lt;sup id="fnref2"&gt;2&lt;/sup&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hopefully, your technical documentation better fits its title and is&lt;br&gt;
less than 250 years behind the current “version” of the system. But&lt;br&gt;
maybe you get the analogy: Documentation should be there to help, not hinder.&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview of documentation requirements
&lt;/h3&gt;

&lt;p&gt;Let’s start with an overview of documentation requirements, so you know what to expect. The main part of this article covers both requirements and solution approaches in detail.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsx8euhj7lqb0gixpff5g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsx8euhj7lqb0gixpff5g.png" alt="Fig. 0.2 Categories of documentation requirements"&gt;&lt;/a&gt;&lt;/p&gt;
Fig. 0.2 Categories of documentation requirements



&lt;p&gt;The most important of these categories cover the &lt;em&gt;content&lt;/em&gt; of&lt;br&gt;
documentation:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Explanation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Req-1: Correct&lt;/td&gt;
&lt;td&gt;Documentation needs to be accurate and free from errors. Wrong documentation is often worse than no documentation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Req-2: Current&lt;/td&gt;
&lt;td&gt;Documentation needs to be correct over time, reflecting changes performed upon code, infrastructure or interfaces of the system.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Req-3: Understandable&lt;/td&gt;
&lt;td&gt;Documentation needs to be understood by the target audience.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Req-4: Relevant&lt;/td&gt;
&lt;td&gt;With respect to structure, form and content, documentation shall be relevant for the tasks of its audience.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A few of these requirements are covered in the fundamental book book&lt;sup id="fnref3"&gt;3&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvfkm1pc0d297rrzluvc6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvfkm1pc0d297rrzluvc6.png" alt="Fig. 0.3 Content requirements"&gt;&lt;/a&gt;&lt;/p&gt;
Fig. 0.3: Content requirements



&lt;p&gt;In addition, you should consider a few &lt;em&gt;formal&lt;/em&gt; requirements, independent of documentation content:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Explanation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Req-5: Referenceable&lt;/td&gt;
&lt;td&gt;Use a consistent numbering schema for headings, diagrams and tables.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Req-6: Proper language&lt;/td&gt;
&lt;td&gt;Use proper language, correct spelling and grammar, active voice, positive statements and short sentences.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Req-7: Maintainable&lt;/td&gt;
&lt;td&gt;Maintainability is key to keeping documentation current.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnuo4475vwjxg455vrf7y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnuo4475vwjxg455vrf7y.png" alt="Fig. 0.4 Formal and content requirements"&gt;&lt;/a&gt;&lt;/p&gt;
Fig. 0.4: Formal and content requirements



&lt;p&gt;Finally, a few requirements concern your documentation process and&lt;br&gt;
tooling:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Explanation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Req-8: Easy to find&lt;/td&gt;
&lt;td&gt;Documentation itself should be easy to find whenever needed. Its content should be easily navigable and searchable.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Req-9: Version controlled&lt;/td&gt;
&lt;td&gt;As the system evolves, so will your documentation, without losing its history&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Req-10: Appropriate tools&lt;/td&gt;
&lt;td&gt;Focus on content, reduce time needed for tool-setup.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Req-11: Continuously updated&lt;/td&gt;
&lt;td&gt;Make it a habit to maintain and expand the documentation with every relevant change in your system.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That leaves us with the following overview of documentation requirements:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0sfi6wty8llkelgnsoa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0sfi6wty8llkelgnsoa.png" alt="Fig. 0.5 All documentation requirements"&gt;&lt;/a&gt;&lt;/p&gt;
Fig. 0.5: All documentation requirements



&lt;p&gt;In the upcoming sections I will consider these requirements one-by-one. You will find several tips and proposals on how to achieve them.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Req-1: Correct
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Technical documentation absolutely needs to be correct, “free of&lt;br&gt;
mistakes or errors and strictly adhere to fact and truth” (&lt;sup id="fnref3"&gt;3&lt;/sup&gt;, p3).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Some examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  When a diagram shows relationships between certain elements, those relationships have to exist in reality.&lt;/li&gt;
&lt;li&gt;  On the other hand, if is no relationship between those two elements, there shouldn’t exist one in the underlying code!&lt;/li&gt;
&lt;li&gt;  If a specific version of any product or framework is mentioned, exactly this version shall be used in reality.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This requirement seems trivial, but &lt;em&gt;correctness&lt;/em&gt; has to be achieved even in situations where development teams are constantly working to improve or enhance the system. They change code, update interfaces, frameworks or underlying technology. Important stakeholders will change requirements or constraints.&lt;/p&gt;

&lt;p&gt;The issue with constantly changing systems leads to another requirement (“current”), which will be subject of a larger section. Before we dive into this subject, let’s look at some options you have to get your documentation correct.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to achieve correctness
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Have the right people create and maintain the documentation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The exact same people who design and implement specific parts of the system also document these parts. The advantage: No information is lost at some potential interpersonal communication barrier. The disadvantage: These people might not be capable of producing high quality technical documentation, they might not have appropriate tools, motivation or time.&lt;/li&gt;
&lt;li&gt; Have the architect(s) create that documentation. On one hand they will be able to extract the required knowledge from the responsible stakeholder. On the other hand, they should know the basics of quality technical documentation.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have all parts of your documentation reviewed by the people who built, decided or implemented that exact thing - as they know the truth.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prefer abstract information over detailed: &lt;em&gt;Abstract&lt;/em&gt; information is still correct, it’s just leaving out some detail. Leaving out details reduces the chance for errors and the need for&lt;br&gt;
constant updates. Have the courage to leave things undocumented (&lt;em&gt;better no documentation than wrong documentation&lt;/em&gt;). The next section on current documentation will dive deeper into that subject.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Req-2: Current
&lt;/h2&gt;

&lt;p&gt;Change is normal: Development teams have to implement new features or optimize/fix/change existing ones. They have to adjust the system to cope with changes in infrastructure, updates in frameworks or 3rd-party products. Teams have to update their systems to reflect changes in external infrastructure, data formats or a plethora of other aspects that might change during the lifetime of any software system.&lt;/p&gt;

&lt;p&gt;Despite all those changes, the documentation has to fulfill the&lt;br&gt;
&lt;em&gt;correctness requirement&lt;/em&gt;. Teams must constantly adapt (&lt;em&gt;maintain&lt;/em&gt;) their documentation, so it remains correct.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to keep documentation current
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Regularly review your documentation, especially those parts that
relate to recently-changed elements of the system.&lt;/li&gt;
&lt;li&gt;  Leave out the &lt;em&gt;obvious&lt;/em&gt;. Focus on important and specific aspects, elements or decisions in your system.&lt;/li&gt;
&lt;li&gt;  Document only those parts or aspects of your system and its
architecture that are definitely required by stakeholders.&lt;/li&gt;
&lt;li&gt;  From time to time you should iterate over all parts of the
documentation and:

&lt;ul&gt;
&lt;li&gt;  question whether this part is still required by somebody and&lt;/li&gt;
&lt;li&gt;  you are still willing to maintain this part of the documentation in the future.&lt;/li&gt;
&lt;li&gt;  If the answer to one of these questions is “no”, then remove the corresponding part of the documentation. As everything is  version controlled, it would be available if needed later on.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  Optimize your documentation (not only your system!) for
maintainability. The section on Easy to find contains numerous approaches that help to optimize maintainability.&lt;/li&gt;

&lt;li&gt;  Automate the generation of certain parts of your documentation..&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Req-3: Understandable
&lt;/h2&gt;

&lt;p&gt;Although &lt;em&gt;understandability&lt;/em&gt; seems like a trivial and basic requirement for technical documentation, it is pretty hard to achieve and really easy to get wrong. Let’s dig into some details of what makes documentation understandable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Terms and symbols need to be clear and unambiguous.&lt;/li&gt;
&lt;li&gt;  Use abbreviations only after they have been written in full.&lt;/li&gt;
&lt;li&gt;  The overall organization (aka &lt;em&gt;structure&lt;/em&gt;) of the documentation
shall be optimized for consuming/reading&lt;/li&gt;
&lt;li&gt;  People tend to &lt;em&gt;comprehend&lt;/em&gt; things better if they understand the
reasons&lt;/li&gt;
&lt;li&gt;  Form, structure, language, tone and symbols should be adequate for the audience.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How to improve understandability
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Know your target audience
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Understandability depends on the target audience.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What people understand depends on their knowledge, experience, language skills, culture etc. A specific part of your documentation might be fully understandable by certain people, and completely alien to others. Different stakeholders will have different requirements concerning documentation.&lt;/p&gt;

&lt;p&gt;The more you know about your stakeholders, the better you will be&lt;br&gt;
prepared to meet their demands. This is closely related to Relevance.&lt;/p&gt;

&lt;p&gt;Follow these steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identify all stakeholders: Identify all roles or people that might have an interest in or need for your technical documentation&lt;/li&gt;
&lt;li&gt;Identify what your target audience really needs, what are acceptable forms or formats for documentation&lt;/li&gt;
&lt;li&gt;Create and maintain a stakeholder table containing that information.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This information about your stakeholders will also be important to&lt;br&gt;
improve the relevance of your documentation.&lt;/p&gt;

&lt;h4&gt;
  
  
  Document unambiguously
&lt;/h4&gt;

&lt;p&gt;Ensure your documentation is clear, precise and presented in a way that the target audience can understand. Most diagrams leave room for interpretation, especially if naming and/or semantics of elements isn’t exactly clear. Make sure that all symbols in diagrams and all specific term have a defined meaning. Add a legend to clarify visual elements if you are not using a standardized notation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  See also Explain your notation
&lt;/li&gt;
&lt;li&gt;  See also Combine diagrams with text
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Place details into context
&lt;/h4&gt;

&lt;p&gt;Your audience shall be able to start with an overview and then “dive in” when they need more information. Therefore, organize your documentation top-down.&lt;/p&gt;

&lt;p&gt;Technical documentation will contain technical details that are prerequisite to understanding some decisions or concepts. Ensure people can understand the &lt;em&gt;context&lt;/em&gt; of such a detail. Add references to external documents for readers who might not meet your knowledge&lt;br&gt;
prerequisites.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F245qfy918phell482v5y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F245qfy918phell482v5y.png" alt="Fig. 3.1: Details with context"&gt;&lt;/a&gt;&lt;/p&gt;
Fig. 3.1: Details with context



&lt;h4&gt;
  
  
  Explain specific terms
&lt;/h4&gt;

&lt;p&gt;In case you use specific terms with a special or uncommon meaning or&lt;br&gt;
semantics, you should define or explain these. Especially if the&lt;br&gt;
semantics of your terms slightly deviate from common or standard&lt;br&gt;
definitions.&lt;/p&gt;

&lt;p&gt;Provide a glossary of such terms.&lt;/p&gt;

&lt;h4&gt;
  
  
  Explain reasons
&lt;/h4&gt;

&lt;p&gt;Many decisions taken during development of a system are reflected in its source code. What’s missing though, are the explanations or reasons for these decisions.&lt;/p&gt;

&lt;p&gt;Therefore, consider documenting the reasons and explain why the&lt;br&gt;
development team took a particular path. Start with explaining the&lt;br&gt;
requirements and constraints for a specific decision, then explain the reasons for the decision.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Use diagrams to explain structures
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Structure&lt;/em&gt;: the way that something is built, arranged, or&lt;br&gt;
organized&lt;br&gt; &lt;br&gt;
&lt;a href="https://www.merriam-webster.com/dictionary/structure" rel="noopener noreferrer"&gt;https://www.merriam-webster.com/dictionary/structure&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Diagrams or graphical models are well-suited to convey structural&lt;br&gt;
information, like building-blocks (aka components and their&lt;br&gt;
dependencies, hardware elements and their relationships or even dynamic structures like processes.&lt;/p&gt;

&lt;p&gt;Use them with care - as changing or updating diagrams is harder than&lt;br&gt;
updating a short textual description. On the other hand, structural&lt;br&gt;
information is traditionally conveyed via diagrams.&lt;/p&gt;

&lt;p&gt;Restrict diagrams to higher abstraction levels. Prefer to omit details from your diagrams, instead of trying to explain low-level structures in diagrams. Stick to a single topic per diagram.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Explain your notation (or use a standard)
&lt;/h4&gt;

&lt;p&gt;Graphical models or diagrams are an elegant way to convey structural&lt;br&gt;
information, they can improve visual effectiveness.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Visual effectiveness is a measure of how the appearance of information and the use of visual elements within it affect the ease with which users can find, understand, and use the information.&lt;br&gt;
&lt;sup id="fnref3"&gt;3&lt;/sup&gt;,p.277&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every symbol in a diagram should have a clear semantic or meaning. That makes the diagram unambiguous.&lt;/p&gt;

&lt;p&gt;Either you provide a legend which explains the meaning of every symbol type, or you rely on a standard graphical notation, like UML&lt;sup id="fnref4"&gt;4&lt;/sup&gt;,  C4&lt;sup id="fnref5"&gt;5&lt;/sup&gt; or ArchiMate&lt;sup id="fnref6"&gt;6&lt;/sup&gt;;&lt;sup id="fnref7"&gt;7&lt;/sup&gt;. &lt;br&gt;
If you rely on a standard, reference it in addition to the legend.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Combine diagrams with text
&lt;/h4&gt;

&lt;p&gt;A diagram itself might leave room for interpretation, unless amended by textual or tabular clarification. See the following example, where component names give hints on their actual responsibility, but terms might be misleading. What is a “Reporter”? A journalist? A component creating a report, or delivering it?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66rvv30eyrwq6cv64q4m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66rvv30eyrwq6cv64q4m.png" alt="Fig. 3.2: An example diagram that needs&amp;lt;br&amp;gt;
explanation"&gt;&lt;/a&gt;&lt;/p&gt;
Fig. 3.2: An example diagram that needs
explanation



&lt;p&gt;A table explaining important elements from a diagram can help to remove&lt;br&gt;
such ambiguities - see for yourself:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Element&lt;/th&gt;
&lt;th&gt;Responsibility / Meaning&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Checker&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;performs the actual checking, relies on the status- and error messages of the &lt;code&gt;Parser&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;org.aim42.hsc.core&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Parser&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;open-source library to parse HTML files&lt;/td&gt;
&lt;td&gt;org.jsoup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Suggester&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;suggests solutions to problems found during checking&lt;/td&gt;
&lt;td&gt;org.aim42.hsc.core&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Reporter&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;creates a hicely formatted html report of all problems found during checking&lt;/td&gt;
&lt;td&gt;org.aim42.hsc.core&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h5 id="sect-helpful-structure"&gt;
Use helpful structure
&lt;/h5&gt;

&lt;p&gt;The structure of technical documentation should be organized top-down, beginning with an overview, and gradually adding details.&lt;/p&gt;

&lt;p&gt;Approaches like &lt;a href="https://arc42.org" rel="noopener noreferrer"&gt;arc42&lt;/a&gt;&lt;sup id="fnref8"&gt;8&lt;/sup&gt; or C4&lt;sup id="fnref5"&gt;5&lt;/sup&gt; propose structures that are highly practical, established and free to use.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Req-4: Relevant (aka &lt;em&gt;task oriented&lt;/em&gt;)
&lt;/h2&gt;

&lt;p&gt;Documentation shall serve the purposes of its target audience, see Know your target audience above. They have specific goals or tasks that can be enabled or supported by technical documentation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Relevance depends on the goals and tasks of the target audience.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let’s look at some potential stakeholders, their goals and documentation needs:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stakeholder&lt;/th&gt;
&lt;th&gt;Task/Goal&lt;/th&gt;
&lt;th&gt;Documentation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;New developer&lt;/td&gt;
&lt;td&gt;Efficient onboarding&lt;/td&gt;
&lt;td&gt;Overview of requirements, solution approaches, building block structure, technical concepts, important decisions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Development team&lt;/td&gt;
&lt;td&gt;Guide implementation&lt;/td&gt;
&lt;td&gt;technical concepts, decisions, building block structure, some runtime scenarios&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;—“—&lt;/td&gt;
&lt;td&gt;Take decision&lt;/td&gt;
&lt;td&gt;e.g. quality requirements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tester&lt;/td&gt;
&lt;td&gt;Test parts of the system&lt;/td&gt;
&lt;td&gt;some internal interfaces, technology overview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Neighbour system&lt;/td&gt;
&lt;td&gt;Use external interface, e.g. API&lt;/td&gt;
&lt;td&gt;context, technology overview, API details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Management&lt;/td&gt;
&lt;td&gt;Budget decisions&lt;/td&gt;
&lt;td&gt;context, technical decisions, used 3rd party frameworks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auditor&lt;/td&gt;
&lt;td&gt;Check compliance&lt;/td&gt;
&lt;td&gt;often: deployment view, technical decisions, high-level building blocks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External reviewer&lt;/td&gt;
&lt;td&gt;Due diligence&lt;/td&gt;
&lt;td&gt;solution approaches, high-level structure, technical concepts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  How to improve relevance
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Identify tasks of target audience
&lt;/h4&gt;

&lt;p&gt;You need to know what information the target audience needs from the&lt;br&gt;
documentation, (see above). Create a&lt;br&gt;
stakeholder table to contain information about each stakeholders’ tasks&lt;br&gt;
and/or goals, so you can better estimate their documentation&lt;br&gt;
requirements.&lt;/p&gt;

&lt;h4&gt;
  
  
  Show examples of existing documentation
&lt;/h4&gt;

&lt;p&gt;It is highly effective to show each stakeholder examples of existing&lt;br&gt;
documentation: Based upon specific examples, stakeholders can point out&lt;br&gt;
what they need in addition, or what parts they are not interested in.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Beware of the “I need everything” trap: When stakeholders see detailed&lt;br&gt;
and well-organized documentation, they might want “everything” - even&lt;br&gt;
though they don’t need parts. Therefore, it might be more efficient if&lt;br&gt;
you show only those parts which you estimate people will really need!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Req-5: Referenceable
&lt;/h2&gt;

&lt;p&gt;Referenceable elements can be uniquely identified in the context of your&lt;br&gt;
documentation. Instead of writing “see the diagram below” or “the table&lt;br&gt;
above”, you should strive for “see diagram 5.2” or “the table 3.1”. You&lt;br&gt;
can chose any numbering or referencing scheme you like, but you should&lt;br&gt;
use it consistently.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to make documentation referenceable
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Number every section and heading of technical documentation, at least to heading level 2.&lt;/li&gt;
&lt;li&gt;  Number every diagram or image. Prefix diagram numbers by the number/id of the appropriate section. For example, the first diagram in section 3 shall be labelled “Fig. 3.1”.&lt;/li&gt;
&lt;li&gt;  Number every table, again prefixed by section-id/number.&lt;/li&gt;
&lt;li&gt;  Provide a table of contents (toc). Electronic or online versions of your documentation should contain hyperlinks within the toc. For paper or printed versions, use page numbers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You should use appropriate tools to facilitate&lt;br&gt;
referencing.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Req-6: Proper language
&lt;/h2&gt;

&lt;p&gt;Your target audience shall have no reason to complain about spelling or grammar mistakes, but shall instead focus on content. Proper language will also improve readability and understandability.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to improve documentation language
&lt;/h3&gt;

&lt;p&gt;Language, wording and style of your documentation should be adequate for your target audience. Sentences should be grammatically correct. &lt;br&gt;
Text should be formulated in a factual way and avoid emotional or offensive language.&lt;/p&gt;

&lt;p&gt;Some specific advice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Use positive statements, aka &lt;em&gt;avoid negation&lt;/em&gt;. The human brain needs significantly longer to understand negation&lt;sup id="fnref9"&gt;9&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;  Write concisely, aim for brevity. The average length of a sentence should be 15-20 words.&lt;/li&gt;
&lt;li&gt;  Use the active voice, as it makes it easier for our brain to comprehend and remember.&lt;/li&gt;
&lt;li&gt;  Aim for correct spelling and grammar.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;sup id="fnref10"&gt;10&lt;/sup&gt; contains several examples and explanations of “proper language”.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Req-7: Maintainable
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The structure and organization of technical documentation should be&lt;br&gt;
optimized for &lt;em&gt;maintainability&lt;/em&gt; - so that keeping the documentation&lt;br&gt;
current despite frequent changes becomes as easy as possible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As already mentioned above, many aspects of systems change -&lt;br&gt;
requirements, source code, configuration, deployment, operations, external interfaces, etc. These changes shall be easy to incorporate into the technical documentation, therefore &lt;em&gt;maintainability&lt;/em&gt; is an important requirement.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Please note: We refer to &lt;em&gt;maintainability&lt;/em&gt; of the documentation, &lt;em&gt;not&lt;/em&gt;&lt;br&gt;
of the system itself.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  How to improve maintainability
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Abstract: Omit (some) details
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;  Leave out certain facts: Explicitly decide to &lt;em&gt;not&lt;/em&gt; document
irrelevant or overly detailed facts. Leaving out some facts reduces
the amount of content you have to keep up-to-date in the future.
Only document facts that:

&lt;ul&gt;
&lt;li&gt;  you or your team can promise to maintain in the future.&lt;/li&gt;
&lt;li&gt;  important stakeholders need to know to do their work&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  Document abstractions instead of details. That is a special case of
not documenting certain facts, namely the details. But what kind of
details could be left out of documentation? Please note that I wrote
&lt;em&gt;could&lt;/em&gt; be left out, not &lt;em&gt;shall&lt;/em&gt; be left out. In some cases you will
want or need to document details!&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;instead of…&lt;/th&gt;
&lt;th&gt;try this…&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;trying to name/show &lt;strong&gt;all&lt;/strong&gt; elements&lt;/td&gt;
&lt;td&gt;aggregate elements, especially when you can give explicit cohesion criteria&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;giving a specific version number&lt;/td&gt;
&lt;td&gt;omit that version number or specify a range like “version &amp;gt;2.1”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;showing all children of an element&lt;/td&gt;
&lt;td&gt;omit children, point to parent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;showing all dependencies between two elements&lt;/td&gt;
&lt;td&gt;show just one (aggregate) dependency (see below for an example)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;explaining interface details like parameters&lt;/td&gt;
&lt;td&gt;just name the interface, omit details&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You see the underlying principle: Leaving out details facilitates change&lt;br&gt;
and will make your documentation more robust against (at least some)&lt;br&gt;
changes in requirements, code or infrastructure.&lt;/p&gt;

&lt;h5&gt;
  
  
  Examples of &lt;em&gt;omitting details&lt;/em&gt;
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2atvj5fmcjz3kc96dq4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2atvj5fmcjz3kc96dq4.png" alt="Fig 7.1 Example: Abstractions instead of&amp;lt;br&amp;gt;
details"&gt;&lt;/a&gt;&lt;/p&gt;
Fig. 7.1: Abstractions instead of details



&lt;p&gt;In the first example, we condense three building blocks (A,B,C) into a&lt;br&gt;
single one. At the same time, we reduce the details of explicit&lt;br&gt;
dependencies between &lt;code&gt;foo&lt;/code&gt; and A,B,C from 9 different to one. As this&lt;br&gt;
single dependency carries several responsibilities (remember, it serves as an abstraction for nine detailed relationships), it’s a good practice to give such dependencies a name and explain some of the details in text or a table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9ooficmr82t0p26rb9y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9ooficmr82t0p26rb9y.png" alt="Fig 7.2 Example: Abstraction in runtime view"&gt;&lt;/a&gt;&lt;/p&gt;
Fig. 7.2: Example: Abstraction in runtime view



&lt;p&gt;The second example shows a detailed sequence diagram containing three participants (b1, b2 and b3), having some interactions among themselves and a few with the rest of the system (a and c). In the abstraction I made use of an &lt;em&gt;interaction reference&lt;/em&gt; to hide details, see &lt;sup id="fnref11"&gt;11&lt;/sup&gt; or &lt;sup id="fnref12"&gt;12&lt;/sup&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Keep the source of every diagram
&lt;/h4&gt;

&lt;p&gt;Diagrams are created using appropriate tools. Often diagramming or modeling tools use proprietary binary data formats, which are converted and exported to a format like png, jpg, svg or pdf.&lt;/p&gt;

&lt;p&gt;To be able to later modify diagrams, you need the original (source) representation.&lt;/p&gt;

&lt;p&gt;At best, the source of diagrams is versioned and referenced from the diagram.&lt;/p&gt;

&lt;h4&gt;
  
  
  Regularly delete outdated parts
&lt;/h4&gt;

&lt;p&gt;If something has become common knowledge, you may delete it from your written documentation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In one of my projects, I tagged such parts as “to-be deleted”. In case nobody from the team objected within a week or so, that content would be removed from the active documentation and moved to an archive instead. Such tagging works great in some wikis.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Automation won’t improve your content
&lt;/h4&gt;

&lt;p&gt;You can (and should) automate data collection, transformation, or even some visualization, which we will discuss in the section on tools later on.&lt;/p&gt;

&lt;p&gt;But: The intellectual process of creating valuable content for technical documentation cannot currently be automated.&lt;/p&gt;

&lt;p&gt;Documentation generated from source code will be restricted to&lt;br&gt;
high-level abstractions of this source code. It cannot give reasons or explain things, therefore it will always miss critical information.&lt;/p&gt;

&lt;p&gt;See &lt;sup id="fnref13"&gt;13&lt;/sup&gt; for a&lt;br&gt;
coverage of automated (&lt;em&gt;living&lt;/em&gt;) documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Req-8: Easy to find
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Finding information is essential. The organization, retrievability,&lt;br&gt;
and visual effectiveness of information contribute most to whether&lt;br&gt;
users can find the information that they need.&lt;br&gt;
&lt;sup id="fnref3"&gt;3&lt;/sup&gt;,p.213&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This requirements relates to both the content of the documentation and&lt;br&gt;
to the documentation itself. In reality, documentation is often located&lt;br&gt;
in access-controlled areas that are not covered by any search engine:&lt;br&gt;
That means you have to know where to look for the documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to make information easier to find
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Ensure the documentation itself can be easily found, for example by
providing entry points at well-know locations (i.e. the start- or
homepage of the product or team wiki).&lt;/li&gt;
&lt;li&gt;  Use a template, like &lt;a href="https://arc42.org" rel="noopener noreferrer"&gt;arc42&lt;/a&gt;
&lt;sup id="fnref8"&gt;8&lt;/sup&gt;
&lt;/li&gt;
&lt;li&gt;  Organize your documentation top-down, see place details into
context above&lt;/li&gt;
&lt;li&gt;  Use cross-references and hyperlinks where possible, so readers can
&lt;em&gt;jump&lt;/em&gt; within your structure&lt;/li&gt;
&lt;li&gt;  Provide a document overview that explains the structure of your documentation. For standards, like arc42, such overviews already exist.&lt;/li&gt;
&lt;li&gt;  Facilitate navigation and search, see Req-9: Easy to
find
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally, you should accept some repetition in documentation to make it&lt;br&gt;
more comfortable for stakeholders (See &lt;sup id="fnref14"&gt;14&lt;/sup&gt;, ARID).&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Req-9: Version controlled
&lt;/h2&gt;

&lt;p&gt;As there will be several people actively contributing to technical&lt;br&gt;
documentation, you should version-control its artifacts similar to&lt;br&gt;
source code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  It shall be possible to rollback certain documentation changes.&lt;/li&gt;
&lt;li&gt;  The ability to work on different versions of the documentation
(e.g. in different branches of a version management system) will be
useful, especially in larger or distributed development teams.&lt;/li&gt;
&lt;li&gt;  Documentation shall closely correspond to the identified versions or
releases of the system. In case somebody needs to &lt;em&gt;go back in time&lt;/em&gt;,
for example to fix a bug in an older release of the system, the
documentation of that older release shall be available without much
effort.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How to version-control documentation
&lt;/h3&gt;

&lt;p&gt;Obviously the straightforward approach is using version control systems&lt;br&gt;
(VCS), like &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;subversion&lt;/code&gt; or similar tools.&lt;/p&gt;

&lt;p&gt;But in reality that’s not always as simple as it sounds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Organizations might prefer proprietary systems for documentation,
for example wikis (e.g. Confluence™).&lt;/li&gt;
&lt;li&gt;  Documentation authors, especially from non-technical roles, might
not be able (or refuse to) use a VCS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Therefore I propose the following strategy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Ideally, add all documentation artifacts to a VCS, like &lt;code&gt;git&lt;/code&gt;. Your
VCS should facilitate branching and merging artifacts. Additionally,
it should allow for versioning of binary artifacts.&lt;/li&gt;
&lt;li&gt;  In case your documentation tools produce binary or proprietary
artifacts, which cannot easily be added to your VCS, take the following path:

&lt;ul&gt;
&lt;li&gt;  Export all &lt;em&gt;release&lt;/em&gt; versions of your documentation (those you need to keep) to PDF. Ideally, the result is a single PDF file containing the complete documentation to a specific release or version.&lt;/li&gt;
&lt;li&gt;  Add the resulting PDF to version control.&lt;/li&gt;
&lt;li&gt;  Automate the preceding two steps (creating and adding the PDF). See automate certain parts.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Req-10: Use appropriate tools
&lt;/h2&gt;

&lt;p&gt;You need a toolchain that satisfies a number of requirements. Let’s start with text processing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  structured text, with different heading levels&lt;/li&gt;
&lt;li&gt;  lists (numbered and/or bulleted)&lt;/li&gt;
&lt;li&gt;  cross-references&lt;/li&gt;
&lt;li&gt;  include images/diagrams created by other tools (at least png/jpg,
svg/pdf recommended)&lt;/li&gt;
&lt;li&gt;  tables&lt;/li&gt;
&lt;li&gt;  split documents into several parts&lt;/li&gt;
&lt;li&gt;  support reviews by others than the author(s) with review comments and suggestions&lt;/li&gt;
&lt;li&gt;  the ability to generate numbers/ids for diagrams, tables and sections/headings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you should create diagrams or models (see Use&lt;br&gt;
diagrams), your diagramming tool shall support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  static structures, like components, building-blocks or technical infrastructure&lt;/li&gt;
&lt;li&gt;  dynamic structures, like activities or processes&lt;/li&gt;
&lt;li&gt;  any standard notation like UML &lt;sup id="fnref4"&gt;4&lt;/sup&gt;, C4
&lt;sup id="fnref5"&gt;5&lt;/sup&gt; or ArchiMate
&lt;sup id="fnref7"&gt;7&lt;/sup&gt;
&lt;/li&gt;
&lt;li&gt;  legends in diagrams, to enable Explain
notation
&lt;/li&gt;
&lt;li&gt;  flexible layout, so you can improve visual effectiveness of diagrams (e.g. place important elements in the center, leave appropriate whitespace around elements, use fonts or color to emphasize aspects)&lt;/li&gt;
&lt;li&gt;  links or cross-references to related diagrams&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prefer established tools
&lt;/h3&gt;

&lt;p&gt;For development teams it might be fun to use the latest and greatest toolchain, with this and that plugin to spice up the otherwise boring task of documenting the architecture.&lt;/p&gt;

&lt;p&gt;But: Any toolchain needs a certain amount of maintenance: Updates, backups, user support, and other mundane activities will require somebody’s attention. If you install and operate your own tooling, it might be you who needs to invest this time. If you rely on established tools, your company or organization will provide this support.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I’m a documentation tooling fanboy. I often install and test new tools, so I can develop my opinion and give better advice to my clients. This advice is, more often than not, directed towards the &lt;em&gt;boring&lt;/em&gt; toolchains that already exist, where maintenance, backup and support are already sorted out.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  In exceptional cases…
&lt;/h3&gt;

&lt;p&gt;If (and only then!) there is no appropriate and usable toolchain available for documentation - you need to introduce one. Such a toolchain requires documentation, maintenance and support effort.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Automate certain parts
&lt;/h3&gt;

&lt;p&gt;You should try to automate certain parts of maintaining your&lt;br&gt;
documentation, to keep it current.&lt;/p&gt;

&lt;p&gt;Some candidates for automation are the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  creating platform-neutral representations (like PDF) of the complete documentation&lt;/li&gt;
&lt;li&gt;  publishing the documentation, e.g. in a browseable format&lt;/li&gt;
&lt;li&gt;  testing the sanity or consistency of your documentation, e.g. by checking hyperlinks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the generation and publishing part, have a look at docToolchain &lt;sup id="fnref15"&gt;15&lt;/sup&gt;, a lightweight, open-source approach to create and maintain technical documentation. It can read several data formats (AsciiDoc, PowerPoint®, Excel®, a variety of image formats etc) and generate numerous output formats, including static websites.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a&gt;&lt;/a&gt;Req-11: Continuously updated
&lt;/h2&gt;

&lt;p&gt;Deferring documentation to &lt;em&gt;later&lt;/em&gt; is like procrastination, or saying “I’ll start healthy living next week.” Start right now, in small chunks. You decided to upgrade that persistence framework? Create an ADR for this decision. The team decided to split that module in two separate parts? Make an appropriate note in the building block view explaining the reason for the split.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to enable or facilitate continuous documentation
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Include documentation task in your Definition-of-Done (DoD)
&lt;/h4&gt;

&lt;p&gt;For many agile teams that work in iterations, the Definition-of-Done “ensures everyone on the team knows exactly what is expected of everything the team delivers” (quoted from &lt;sup id="fnref16"&gt;16&lt;/sup&gt;)&lt;/p&gt;

&lt;p&gt;If something is not contained in the DoD, it won’t be done. Therefore you need to make sure that technical documentation &lt;em&gt;is&lt;/em&gt; contained in your DoD.&lt;/p&gt;

&lt;h4&gt;
  
  
  Reserve small timeboxes for documentation
&lt;/h4&gt;

&lt;p&gt;Invest a few minutes per day, or 15min every Friday to create, maintain or improve your documentation.&lt;/p&gt;

&lt;h4&gt;
  
  
  Document incrementally
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;  Start with an overview, a birds’ eye perspective. Drill down into details only if somebody is willing to maintain these details.&lt;/li&gt;
&lt;li&gt;  Start small and add facts when they have gotten robust enough. If certain aspects or elements are still under discussion or investigation, don’t include those in your documentation.&lt;/li&gt;
&lt;li&gt;  If your team is experimenting with a certain technology, framework, structure or concept, defer the details to a later point in time.&lt;/li&gt;
&lt;li&gt; Maintain a documentation backlog, where you collect open issues for your documentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Instead of adding even more text, I provide a graphical summary:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu9hcqhkgeeou222yzp0k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu9hcqhkgeeou222yzp0k.png" alt="Fig 12.1: Pattern map for technical documentation"&gt;&lt;/a&gt;&lt;/p&gt;
Fig 12.1: Pattern map for technical documentation



&lt;p&gt;You can download a &lt;a href="https://arc42.org/downloads/principles-pattern-map.pdf" rel="noopener noreferrer"&gt;high-res pdf version&lt;/a&gt; from arc42.&lt;/p&gt;

&lt;h2&gt;
  
  
  Acknowledgements
&lt;/h2&gt;

&lt;p&gt;Thanks and praise to my knowledgeable and articulate reviewers Ralf D. Müller, Joachim Praetorius, Marco Stroppel and Peter Hruschka. &lt;br&gt;
Header image by (Retrosupply)[&lt;a href="https://unsplash.com/photos/jLwVAUtLOAQ" rel="noopener noreferrer"&gt;https://unsplash.com/photos/jLwVAUtLOAQ&lt;/a&gt;].&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;Map from Wikimedia Commons, provided to Wikimedia by Geographicus Rare Antique Maps, a specialist dealer in rare maps and other cartography. It was first drawn by Daniel de la Feuille in 1706. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;Edembourg actually &lt;em&gt;was&lt;/em&gt; the correct spelling back in the 18th century...  ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;G. Hargis, Ed., &lt;em&gt;Developing quality technical information: A handbook for writers and editors&lt;/em&gt;. Upper Saddle River, N.J: Prentice Hall Professional Technical Reference, 2004.  ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn4"&gt;
&lt;p&gt;"UML 2.5 Diagrams Overview." [Online]. &lt;a href="https://www.uml-diagrams.org/uml-25-diagrams.html" rel="noopener noreferrer"&gt;https://www.uml-diagrams.org/uml-25-diagrams.html&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn5"&gt;
&lt;p&gt;S. Brown, "The C4 model for visualising software architecture." &lt;a href="https://c4model.com" rel="noopener noreferrer"&gt;https://c4model.com&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn6"&gt;
&lt;p&gt;"ArchiMate Quick Guide." [Online]. Available: &lt;a href="https://archimatetool.gitbook.io/project" rel="noopener noreferrer"&gt;https://archimatetool.gitbook.io/project&lt;/a&gt;.  ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn7"&gt;
&lt;p&gt;VAN HAREN PUBLISHING, &lt;em&gt;ARCHIMATE(R) 3.1 SPECIFICATION.&lt;/em&gt; S.l.: VAN HAREN PUBLISHING, 2019. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn8"&gt;
&lt;p&gt;"Docs.Arc42.org." &lt;a href="https://docs.arc42.org/home/" rel="noopener noreferrer"&gt;https://docs.arc42.org/home/&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn9"&gt;
&lt;p&gt;M. A. Sherman, "Bound to be easier? The negative prefix and sentence comprehension," &lt;em&gt;Journal of Verbal Learning and Verbal Behavior&lt;/em&gt;, vol. 12, no. 1, pp. 76–84, Feb. 1973. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn10"&gt;
&lt;p&gt;C. Hibbard, "Six Principles of Technical Writing." ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn11"&gt;
&lt;p&gt;"Sequence Diagram with References." &lt;a href="https://sparxsystems.com/resources/gallery/diagrams/software/sw-sequence_diagram_with_references.html" rel="noopener noreferrer"&gt;https://sparxsystems.com/resources/gallery/diagrams/software/sw-sequence_diagram_with_references.html&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn12"&gt;
&lt;p&gt;"UML Sequence Diagrams - Graphical Notation Reference." &lt;a href="https://www.uml-diagrams.org/sequence-diagrams-reference.html" rel="noopener noreferrer"&gt;https://www.uml-diagrams.org/sequence-diagrams-reference.html&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn13"&gt;
&lt;p&gt;C. Martraire, &lt;em&gt;Living documentation: Continuous knowledge sharing by design&lt;/em&gt;, 1st edition. Boston, MA: Pearson Education, Inc, 2019. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn14"&gt;
&lt;p&gt;"Documentation Principles — Write the Docs.” &lt;a href="https://www.writethedocs.org/guide/writing/docs-principles/" rel="noopener noreferrer"&gt;https://www.writethedocs.org/guide/writing/docs-principles/&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn15"&gt;
&lt;p&gt;R. D. Müller, "docToolchain."  &lt;a href="http://doctoolchain.org/docToolchain/v2.0.x/" rel="noopener noreferrer"&gt;http://doctoolchain.org/docToolchain/v2.0.x/&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn16"&gt;
&lt;p&gt;J. Sutherland, "Definition of Done," 07-Aug-2014. &lt;a href="https://www.scruminc.com/definition-of" rel="noopener noreferrer"&gt;https://www.scruminc.com/definition-of&lt;/a&gt; done. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>documentation</category>
      <category>principles</category>
      <category>arc42</category>
    </item>
    <item>
      <title>Awesome presentations deserve beautiful code</title>
      <dc:creator>Dr. Gernot Starke</dc:creator>
      <pubDate>Thu, 20 Jan 2022 11:43:30 +0000</pubDate>
      <link>https://dev.to/arc42/awesome-presentations-deserve-beautiful-code-3jn9</link>
      <guid>https://dev.to/arc42/awesome-presentations-deserve-beautiful-code-3jn9</guid>
      <description>&lt;h3&gt;
  
  
  Ever seen ugly source code on a slide?
&lt;/h3&gt;

&lt;p&gt;Welcome to reality. Every now and then we all need to put code samples onto PowerPoint or Keynote presentations.&lt;/p&gt;

&lt;p&gt;But wait - presentation programs are made for &lt;strong&gt;text&lt;/strong&gt;, not for &lt;strong&gt;code&lt;/strong&gt;: &lt;br&gt;
They loose all syntax highlighting when you paste your valuable code into their limited textboxes...&lt;br&gt;
Look at this horrible example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9uewhzmq3z130owhmn5u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9uewhzmq3z130owhmn5u.png" alt="Slide with ugly source code"&gt;&lt;/a&gt;&lt;br&gt;Fig.1 - Slide with ugly code.
  &lt;/p&gt;

&lt;p&gt;I like to introduce &lt;a href="https://carbon.now.sh" rel="noopener noreferrer"&gt;carbon&lt;/a&gt; - a free website that elegantly solves this problem. On their website the creators describe their goal short and concise: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Carbon lets you create and share beautiful images of your source code". &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You see a possible result below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvb78wmihb4gy8wxq5ve0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvb78wmihb4gy8wxq5ve0.png" alt="Slide with beautiful source code (by carbon.now)"&gt;&lt;/a&gt;&lt;/p&gt;
Fig.2 - Slide with beautiful code.

 

&lt;p&gt;What a difference!&lt;/p&gt;

&lt;h3&gt;
  
  
  Nice'n Easy
&lt;/h3&gt;

&lt;p&gt;Carbon is incredbly easy to use: Simply paste your code in the textbox or drag a source file.&lt;/p&gt;

&lt;p&gt;Carbon has a number of interesting configuration options available: Themes, borders, (fake) window controls and more.&lt;/p&gt;

&lt;h4&gt;
  
  
  Predefines themes
&lt;/h4&gt;

&lt;p&gt;Several themes are available, all except the Darcula-Pro themes are free:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpm1smn1yrm2r78ee304e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpm1smn1yrm2r78ee304e.png" alt="carbon themes (1) - Monokai"&gt;&lt;/a&gt; &lt;/p&gt;
Fig.3 - carbon theme (Monokai).

 

&lt;p&gt;If you prefer a lighter theme, you are covered too:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frcr3xkgpwmjslcgveha7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frcr3xkgpwmjslcgveha7.png" alt="carbon themes (2) - OneLight"&gt;&lt;/a&gt;&lt;/p&gt;
Fig.4 - carbon theme (OneLight)

 

&lt;p&gt;In case you need to, you may even configure your own custom theme. It's a lot of work, and for me the standard themes are way good enough.&lt;/p&gt;

&lt;h4&gt;
  
  
  Additional Layout Options
&lt;/h4&gt;

&lt;p&gt;You can set padding, border color, shadow, width, (artificial) window controls and a few more options:&lt;/p&gt;

&lt;p&gt;&lt;a href="" class="article-body-image-wrapper"&gt;&lt;img alt="Some config options"&gt;&lt;/a&gt;&lt;/p&gt;
Fig.5 - some config options.

 

&lt;h4&gt;
  
  
  Export to png and svg
&lt;/h4&gt;

&lt;p&gt;As expected, carbon can export the image of your source as png or svg:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnzs8qgr34x81atllyibl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnzs8qgr34x81atllyibl.png" alt="carbon export options"&gt;&lt;/a&gt;&lt;/p&gt;
Fig.6 - export options.

 

&lt;h4&gt;
  
  
  Alternatives
&lt;/h4&gt;

&lt;p&gt;All right, you may also copy/paste source code as RTF (and hope that your presentation tool really preserves formatting).&lt;br&gt;
You could either paste your code to Microsoft-Word (crossing fingers again for preserved formatting), and export it to PowerPoint from Word. Might work, but is less fun. And in contrast to carbon.sh, it does no good to our atmosphere :-).&lt;/p&gt;

&lt;h3&gt;
  
  
  But: Accessibility Issues
&lt;/h3&gt;

&lt;p&gt;When you convert source code to images, you have to (manually) take care of &lt;a href="https://www.innoq.com/en/topics/accessibility/" rel="noopener noreferrer"&gt;accessibility&lt;/a&gt;.&lt;br&gt;
Images like the ones generated by carbon.sh are not suitable for screen readers.&lt;br&gt;
If you want to adhere to accessibility good practices, you should therefore include the source code shown in the alt-tag of the generated images.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enjoy!
&lt;/h3&gt;

&lt;p&gt;You never again need to include source code as plain and ugly text in any of your presentations!&lt;/p&gt;

&lt;p&gt;One final remark: The name "carbon" was chosen by the authors because they want to reduce CO2 in the atmosphere, read the small print (&lt;a href="https://www.wren.co/join/carbon" rel="noopener noreferrer"&gt;...offsets&lt;/a&gt;) on their website. &lt;/p&gt;

&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://carbon.now.sh" rel="noopener noreferrer"&gt;carbon.now.sh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The creators, &lt;a href="https://twitter.com/carbon_app" rel="noopener noreferrer"&gt;carbon_app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Their &lt;a href="https://github.com/carbon-app/carbon" rel="noopener noreferrer"&gt;Github repository (carbon-app)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Thanx
&lt;/h3&gt;

&lt;p&gt;Kudos to Joachim Praetorius for improving my English and Lars Hupel for pointing out the accessibility issues!&lt;/p&gt;

&lt;p&gt;Thanx to &lt;a href="https://unsplash.com/photos/E0bIdzi8zoQ" rel="noopener noreferrer"&gt;Miguel Henriques&lt;br&gt;
&lt;/a&gt; for the header image.&lt;/p&gt;

</description>
      <category>presentation</category>
      <category>code</category>
    </item>
    <item>
      <title>Authoring Markdown with Zotero - My Workflow</title>
      <dc:creator>Dr. Gernot Starke</dc:creator>
      <pubDate>Sun, 16 Jan 2022 06:58:27 +0000</pubDate>
      <link>https://dev.to/arc42/authoring-markdown-with-zotero-my-workflow-1jgp</link>
      <guid>https://dev.to/arc42/authoring-markdown-with-zotero-my-workflow-1jgp</guid>
      <description>&lt;p&gt;This post describes an authoring workflow that combines the simplicity of markdown (for writing) with the power of a reference manager (for citing and generation of a bibliography).&lt;/p&gt;

&lt;p&gt;This is my current writing workflow:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aHEIq2Um--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nt6hmyyo5rnksxczxoiu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aHEIq2Um--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nt6hmyyo5rnksxczxoiu.png" alt="Overview of writing workflow" width="880" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Collect references, articles, books etc. via Zotero, my citation
manager. You might call this the “research phase”.&lt;/li&gt;
&lt;li&gt; Edit article/text/book using markdown editor.&lt;/li&gt;
&lt;li&gt; Zotero exports your references to a file (continuously in background)&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;make&lt;/code&gt; to compile markdown to final result:&lt;/p&gt;

&lt;p&gt;4a.  &lt;code&gt;pandoc&lt;/code&gt; reads your markdown source file&lt;br&gt;
4b.  &lt;code&gt;pandoc&lt;/code&gt; reads the bibliography file&lt;br&gt;
4c.  &lt;code&gt;pandoc&lt;/code&gt; formats the bibliography entries following the desired citation style, described in a .csl file&lt;br&gt;
4d.  &lt;code&gt;pandoc&lt;/code&gt; creates desired output format(s), like docx or html.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You like more details? Then follow along…&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Markdown (sometimes) isn’t enough
&lt;/h2&gt;

&lt;p&gt;I don’t need to advertise the advantages of markdown as free,&lt;br&gt;
lightweight, simple yet powerful-enough approach to authoring arbitrary content like articles, blogposts (like this one!) or even books.&lt;/p&gt;

&lt;p&gt;But: Markdown is optimized for &lt;em&gt;writing&lt;/em&gt;, not for &lt;em&gt;citing&lt;/em&gt;. If you refer to other sources, like websites, blogs, books or articles in your writing, you want to systematically &lt;em&gt;reference&lt;/em&gt; these sources. An example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;See the original article about Markdown&lt;br&gt;
[1] for further info.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In markdown source, this would be the following:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;See the original article about Markdown ([@gruberDaringFireballMarkdown]) for further info.&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For a blog post, one could simply include the hyperlink, but for any&lt;br&gt;
printed publication a &lt;em&gt;real reference&lt;/em&gt; is more appropriate, often&lt;br&gt;
required by publishers. Such references in your bibliography will look similar to the following example:&lt;/p&gt;

&lt;p&gt;[1] J. Gruber, “Daring Fireball: Markdown.” &lt;a href="https://daringfireball.net/projects/markdown/"&gt;https://daringfireball.net/projects/markdown/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In case you write just a single article, this isn't a big problem: Manually add your sources at the end of your text, and you’re done. But if you (like myself) publish regularly, you might want to have a central repository of your references including publication dates, publisher info, links etc. That’s where &lt;a href="https://www.zotero.org/"&gt;Zotero&lt;/a&gt; comes into play:&lt;/p&gt;
&lt;h2&gt;
  
  
  Zotero
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.zotero.org/"&gt;Zotero&lt;/a&gt; is a free, open-source and user-friendly tool to help you collect, organize and cite references,&lt;br&gt;
like articles, books or research papers (see [2])&lt;/p&gt;

&lt;p&gt;Zotero is available for all major platforms (Win, Mac, Linux).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--THwSzURs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1y1mweest5gujiabp3ur.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--THwSzURs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1y1mweest5gujiabp3ur.png" alt="My Zotero library" width="880" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can sync your reference library across multiple devices and add new references either by ISBN, &lt;a href="https://en.wikipedia.org/wiki/Digital_object_identifier"&gt;DOI&lt;/a&gt; or similar ways. For online publications, powerful browser plugins are available to add any webpage to your library, together with a snapshot for offline viewing!&lt;/p&gt;
&lt;h3&gt;
  
  
  Required Zotero Plugins
&lt;/h3&gt;

&lt;p&gt;You need to add BetterBibTeX (short bbt, see [3]) to your Zotero installation.&lt;br&gt;
bbt can export your Zotero library (or a subset of it) to an arbitrary file system location - and keep this export updated! Wheneve you add a new reference to Zotero, this exported file gets updated too!&lt;/p&gt;
&lt;h2&gt;
  
  
  Adding References to a Text
&lt;/h2&gt;

&lt;p&gt;I like the editing experience of VS-Code, mainly for its rich plugin universe. One of these plugins is the Zotero-Citation-Picker: &lt;br&gt;
It gives you a search box and retrieves results directly from your Zotero library.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DVcDwPUq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wd1aaroputnk1g5zxxa5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DVcDwPUq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wd1aaroputnk1g5zxxa5.png" alt="Zotero Citation Picker Plugin" width="880" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you have found the correct reference, the plugin enters the unique citation key at the current cursor location.&lt;/p&gt;
&lt;h2&gt;
  
  
  Compile the Bibliography
&lt;/h2&gt;

&lt;p&gt;Now you have a markdown text containing several of these “citation keys” - but still no list of references, the so called bibliography*.&lt;/p&gt;

&lt;p&gt;That’s where the next player enters the field: &lt;a href="https://pandoc.org/"&gt;pandoc&lt;/a&gt; (see [4] ).&lt;/p&gt;
&lt;h2&gt;
  
  
  Compile Output with Pandoc
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;“If you need to convert files from one markup format into another,&lt;br&gt;
pandoc is your swiss-army knife.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Although you could use pandoc directly from the command line, I prefer good old &lt;code&gt;make&lt;/code&gt;, as I cannot remember parameters and options. Look at my &lt;code&gt;Makefile&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight make"&gt;&lt;code&gt;&lt;span class="nv"&gt;OUTPUT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;out
&lt;span class="nv"&gt;SOURCE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;content.md &lt;span class="c"&gt;# name of your markdown source file&lt;/span&gt;

&lt;span class="nv"&gt;CITATIONSTYLE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ieee.csl
&lt;span class="nv"&gt;BIBLIO&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/Dropbox/zotero-export/zorg-biblio.bib
&lt;span class="nv"&gt;TARGET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$(OUTPUT)&lt;/span&gt;.docx &lt;span class="nv"&gt;$(OUTPUT)&lt;/span&gt;.md

&lt;span class="nv"&gt;PANDOC&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;pandoc &lt;span class="se"&gt;\&lt;/span&gt;
   &lt;span class="nt"&gt;--from&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;markdown &lt;span class="se"&gt;\&lt;/span&gt;
   &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;--bibliography&lt;/span&gt; &lt;span class="nv"&gt;$(BIBLIO)&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
   &lt;span class="nt"&gt;--citeproc&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
   &lt;span class="nt"&gt;--csl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$(CITATIONSTYLE)&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
   &lt;span class="nt"&gt;--metadata&lt;/span&gt; link-citations&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
   &lt;span class="nv"&gt;$(SOURCE)&lt;/span&gt;

&lt;span class="c"&gt;# create docx
&lt;/span&gt;&lt;span class="nl"&gt;$(OUTPUT).docx&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;$(SOURCE) $(METADATA)&lt;/span&gt;
   &lt;span class="err"&gt;$(PANDOC)&lt;/span&gt; &lt;span class="nv"&gt;--output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$(OUTPUT)&lt;/span&gt;.docx


&lt;span class="c"&gt;# create github flavored markdown
&lt;/span&gt;&lt;span class="nl"&gt;$(OUTPUT).md&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;$(SOURCE) $(METADATA)&lt;/span&gt;
   &lt;span class="err"&gt;$(PANDOC)&lt;/span&gt; &lt;span class="nv"&gt;--to&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gfm &lt;span class="nt"&gt;--output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$(OUTPUT)&lt;/span&gt;.md

&lt;span class="nl"&gt;all&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;$(TARGET)&lt;/span&gt;

&lt;span class="nl"&gt;clean&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
   &lt;span class="err"&gt;rm&lt;/span&gt; &lt;span class="err"&gt;-rf&lt;/span&gt; &lt;span class="err"&gt;$(OUTPUT).docx&lt;/span&gt; &lt;span class="err"&gt;$(OUTPUT).md&lt;/span&gt;

&lt;span class="nl"&gt;.PHONY&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;all clean $(TARGET)&lt;/span&gt;
&lt;span class="nv"&gt;.DEFAULT_GOAL&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(This Makefile is available as &lt;a href="https://gist.github.com/gernotstarke/8deff51f87f1fe0270c88e21fe9fa74b"&gt;Github-gist&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Yes, I know: One could wrap pandoc into a tiny Docker container - but pandoc is easy to install and is incredibly fast. A Docker container would remove the dependency to pandoc, but add the overhead of a running container.&lt;/p&gt;

&lt;p&gt;When you try this on your own, please fulfill the following&lt;br&gt;
prerequisites: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;install &lt;code&gt;pandoc&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;add the citation-style csl-file to your current directory (I didn’t manage to keep this file in any central location - help or suggestions would be appreciated)&lt;/li&gt;
&lt;li&gt;add the &lt;code&gt;Makefile&lt;/code&gt; to the current directory&lt;/li&gt;
&lt;li&gt;update the &lt;code&gt;BIBLIO&lt;/code&gt; variable in the makefile to point to your Zotero export location.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Image Credit
&lt;/h3&gt;

&lt;p&gt;Splash image by &lt;a href="https://unsplash.com/photos/UgA3Xvi3SkA"&gt;Trent Erwin&lt;/a&gt; on Unsplash.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bibliography
&lt;/h3&gt;

&lt;p&gt;This bibliography has been auto-generated by the workflow shown above.&lt;/p&gt;

&lt;p&gt;&lt;span&gt;[1] &lt;/span&gt;&lt;span&gt;J. Gruber, “Daring Fireball: Markdown.”&lt;br&gt;
&lt;a href="https://daringfireball.net/projects/markdown/"&gt;https://daringfireball.net/projects/markdown/&lt;/a&gt;. &lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;[2] &lt;/span&gt;&lt;span&gt;“Zotero | Your personal research assistant.”&lt;br&gt;
&lt;a href="https://www.zotero.org/"&gt;https://www.zotero.org/&lt;/a&gt;. &lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;[3] &lt;/span&gt;&lt;span&gt;E. Heyns, “Better BibTeX for Zotero.” Dec-2021.&lt;br&gt;
&lt;a href="https://retorque.re/zotero-better-bibtex/"&gt;https://retorque.re/zotero-better-bibtex/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;[4] &lt;/span&gt;&lt;span&gt;“Pandoc - About pandoc.” &lt;a href="https://pandoc.org/"&gt;https://pandoc.org/&lt;/a&gt;.&lt;br&gt;
&lt;/span&gt;&lt;/p&gt;



</description>
      <category>markdown</category>
      <category>authoring</category>
      <category>pandoc</category>
      <category>workflow</category>
    </item>
  </channel>
</rss>
