<?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>Forem: Christian Dewein</title>
    <description>The latest articles on Forem by Christian Dewein (@fabrik42).</description>
    <link>https://forem.com/fabrik42</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%2Fuser%2Fprofile_image%2F54337%2Fc15064e5-70f4-4833-bfa0-3cd3d323c9bc.jpeg</url>
      <title>Forem: Christian Dewein</title>
      <link>https://forem.com/fabrik42</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/fabrik42"/>
    <language>en</language>
    <item>
      <title>Signing React Native Android APKs on Microsoft App Center</title>
      <dc:creator>Christian Dewein</dc:creator>
      <pubDate>Thu, 17 May 2018 20:51:04 +0000</pubDate>
      <link>https://forem.com/fabrik42/signing-react-native-android-apks-on-microsoft-app-center-33f6</link>
      <guid>https://forem.com/fabrik42/signing-react-native-android-apks-on-microsoft-app-center-33f6</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; , how I want my APK signing to work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No credentials/keystore in the repository.&lt;/li&gt;
&lt;li&gt;Build and sign it locally using the keystore (not checked into version control) with configuration using &lt;strong&gt;environment variables&lt;/strong&gt; as part of the general build process.&lt;/li&gt;
&lt;li&gt;Build it on &lt;strong&gt;MS App Center&lt;/strong&gt; using their &lt;a href="https://docs.microsoft.com/en-us/appcenter/build/android/code-signing#setting-up-code-signing" rel="noopener noreferrer"&gt;Branch Configuration&lt;/a&gt; for keystore upload and configuration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I followed the &lt;a href="https://facebook.github.io/react-native/docs/signed-apk-android.html" rel="noopener noreferrer"&gt;official React Native instructions&lt;/a&gt; to create a keystore file.&lt;/p&gt;

&lt;p&gt;However, I did not want to manage a global gradle config in my home directory and rather go with usual &lt;em&gt;environment variables&lt;/em&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  What will happen?
&lt;/h4&gt;

&lt;p&gt;Uploading sensitive data to the repository is out of the question, so the only possibility is to use the upload feature of the &lt;a href="https://docs.microsoft.com/en-us/appcenter/build/android/code-signing#setting-up-code-signing" rel="noopener noreferrer"&gt;Branch Configuration&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This setup will enable you to build signed APKs locally using&lt;br&gt;&lt;br&gt;
&lt;code&gt;./gradlew assembleRelease&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It will not try to sign the APK if no keystore path is set in the environment variables but print a warning instead. This is important, because MS App Center will sign the APK in a second step, after the build, using the keystore and credentials you set in the branch configuration.&lt;/p&gt;

&lt;p&gt;I really did not get the documentation that describes the different ways how to sign an APK on App Center and it took me a while to figure out how this works.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Setting environment variables&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Assume your keystore file is located in your React Native project at:&lt;br&gt;&lt;br&gt;
&lt;code&gt;android/app/myapp-dev.keystore&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You need to set the following environment variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ORG_GRADLE_PROJECT_MYAPP_RELEASE_STORE_FILE=myapp-dev.keystore
ORG_GRADLE_PROJECT_MYAPP_RELEASE_KEY_ALIAS=myapp-alias
ORG_GRADLE_PROJECT_MYAPP_RELEASE_STORE_PASSWORD=your-password
ORG_GRADLE_PROJECT_MYAPP_RELEASE_KEY_PASSWORD=your-password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I usually use direnv to do this.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ORG_GRADLE_PROJECT_&lt;/code&gt; is a prefix that will tell grade to include these environment variables as properties, the prefix will be stripped in this process.&lt;/p&gt;

&lt;h4&gt;
  
  
  Configure Gradle
&lt;/h4&gt;

&lt;p&gt;Edit &lt;code&gt;android/app/build.gradle&lt;/code&gt; to include the signing in this way:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;signingConfigs {
    release {
      if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
        storeFile rootProject.file("app/" + project.findProperty('MYAPP_RELEASE_STORE_FILE') ?: "ANDROID_STORE_FILE_NOT_SET")
        storePassword project.findProperty('MYAPP_RELEASE_STORE_PASSWORD') ?: "ANDROID_STORE_PASSWORD_NOT_SET"
        keyAlias project.findProperty('MYAPP_RELEASE_KEY_ALIAS') ?: "ANDROID_KEY_ALIAS_NOT_SET"
        keyPassword project.findProperty('MYAPP_RELEASE_KEY_PASSWORD') ?: "ANDROID_KEY_PASSWORD_NOT_SET"
      }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And also the call in the release buildType:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;buildTypes {
    release {
        //...

        if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
          signingConfig signingConfigs.release
        } else {
          println '-------------------------------------------------'
          println 'The MYAPP_RELEASE_STORE_FILE property was not set!'
          println 'This release will not be signed by gradle!'
          println '-------------------------------------------------'
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Configure App Center
&lt;/h4&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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AZ7uXMRe4vh4pq2FCV1P7Nw.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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AZ7uXMRe4vh4pq2FCV1P7Nw.png"&gt;&lt;/a&gt;Upload your keystore and store credentials&lt;/p&gt;

&lt;h4&gt;
  
  
  That’s it!
&lt;/h4&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%2Fcdn-images-1.medium.com%2Fmax%2F842%2F1%2A4q8GT3lWSbJnTnWUuj57zA.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%2Fcdn-images-1.medium.com%2Fmax%2F842%2F1%2A4q8GT3lWSbJnTnWUuj57zA.png"&gt;&lt;/a&gt;Build succeeded at last!&lt;/p&gt;

&lt;p&gt;Many thanks to: &lt;a href="https://twitter.com/gkarlsson86" rel="noopener noreferrer"&gt;Gustav&lt;/a&gt;, &lt;a href="https://twitter.com/muneikh" rel="noopener noreferrer"&gt;Muneeb&lt;/a&gt; and the nice tech support from Microsoft support for their hints and patience! 🙏&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>android</category>
      <category>reactnative</category>
    </item>
    <item>
      <title>My Productivity Boosters — A random collection of tricks and tools — What are yours?</title>
      <dc:creator>Christian Dewein</dc:creator>
      <pubDate>Tue, 10 Apr 2018 16:21:59 +0000</pubDate>
      <link>https://forem.com/fabrik42/my-productivity-boosters--a-random-collection-of-tricks-and-tools--what-are-yours-28fm</link>
      <guid>https://forem.com/fabrik42/my-productivity-boosters--a-random-collection-of-tricks-and-tools--what-are-yours-28fm</guid>
      <description>&lt;p&gt;I love working on projects. I’ve been working on all kinds of projects for 12 years now and over time, some patterns emerged.&lt;/p&gt;

&lt;p&gt;Here are some of my &lt;em&gt;non-technical&lt;/em&gt; workflows that work very well for me and that I want to share.&lt;/p&gt;

&lt;h5&gt;
  
  
  &lt;em&gt;Hint&lt;/em&gt;: Make sure to check the comments for even more tricks and share your own!
&lt;/h5&gt;




&lt;h2&gt;
  
  
  Special Keybindings
&lt;/h2&gt;

&lt;p&gt;Most of the time I work with the keyboard. And as I am a &lt;a href="https://www.meetup.com/de-DE/Mechanical-Keyboard-Meetup-Rhein-Main/" rel="noopener noreferrer"&gt;keyboard enthusiast&lt;/a&gt; in general I’ve spent some time experimenting with my keyboard setup. I use two tools to customise my key bindings.&lt;/p&gt;

&lt;h3&gt;
  
  
  Karabiner Elements
&lt;/h3&gt;

&lt;p&gt;The one and only &lt;a href="https://pqrs.org/osx/karabiner/" rel="noopener noreferrer"&gt;key remapping tool for MacOS&lt;/a&gt;. If you are not sure what could make sense, have a look at the gallery of customisations for inspiration.&lt;/p&gt;

&lt;h4&gt;
  
  
  CapsLock to Ctrl/Esc
&lt;/h4&gt;

&lt;p&gt;I use &lt;a href="http://spacemacs.org/" rel="noopener noreferrer"&gt;SpaceMacs&lt;/a&gt; in evil mode, so I have a lot of use for &lt;code&gt;Ctrl&lt;/code&gt; as well as &lt;code&gt;Esc&lt;/code&gt;. This custom modification allows me to use the &lt;code&gt;CapsLock&lt;/code&gt; key for both. When pressed alone it acts as &lt;code&gt;Escape&lt;/code&gt;, when pressed together with another key it registers as &lt;code&gt;Ctrl&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Almost all common modifier actions in my controller can be triggered with my pinky now, without leaving home row and without bending it too much.&lt;/p&gt;

&lt;h4&gt;
  
  
  Tab/Numeric Keypad
&lt;/h4&gt;

&lt;p&gt;I mostly work with &lt;a href="http://keyboardcatalog.com/65-percent" rel="noopener noreferrer"&gt;65%-keyboards&lt;/a&gt; or laptop keyboards, but sometimes I miss my num pad, which I used very heavily back in the days.&lt;/p&gt;

&lt;p&gt;This modification will remap the alphanumeric keys of my right hand¹ to resemble a num pad. Not perfectly, because the keyboard still doesn’t have an orthogonal layout, but it comes very close.&lt;/p&gt;

&lt;h3&gt;
  
  
  Better Touch Tool
&lt;/h3&gt;

&lt;p&gt;The Swiss army knife called &lt;a href="https://www.boastr.net/" rel="noopener noreferrer"&gt;Better Touch Tool&lt;/a&gt; is a productivity allrounder that enables you to manipulate input devices of all kinds on a higher level than Karabiner Elements. Sometimes this means more input lag, but also much more possibilities.&lt;/p&gt;

&lt;h4&gt;
  
  
  Double tap left shift for emoji menu
&lt;/h4&gt;

&lt;p&gt;Most important for communication: If I double tap &lt;code&gt;Shift&lt;/code&gt; I open the macOS emoji menu. It even includes a search bar, so adding emojis is super fast and easy. 👌 💯 🔥&lt;/p&gt;

&lt;h4&gt;
  
  
  Backticks as quotes
&lt;/h4&gt;

&lt;p&gt;Especially when editing markdown documents, the backtick is semantically more of a quote for me. That is why I remapped it to &lt;code&gt;Opt+’&lt;/code&gt;, so I have all kinds of quotes in one place.&lt;/p&gt;

&lt;h4&gt;
  
  
  Maximized Window
&lt;/h4&gt;

&lt;p&gt;It’s a native feature of Better Touch Tool and I use it all the time. I had some problems with other window managers, but BTT works all the time!&lt;/p&gt;

&lt;h4&gt;
  
  
  App specific Ctrl+j/k up/down mappings
&lt;/h4&gt;

&lt;p&gt;I try to avoid the arrow keys and to stay on the home row as much as possible.&lt;/p&gt;

&lt;p&gt;For apps where it makes sense, like Slack, I remap &lt;code&gt;Ctrl+j&lt;/code&gt; and &lt;code&gt;Ctrl+k&lt;/code&gt; (remember CapsLock is remapped to Ctrl) to &lt;code&gt;up&lt;/code&gt; and &lt;code&gt;down&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Note-Taking
&lt;/h2&gt;

&lt;p&gt;Finding a good note-taking app is the hardest of all.&lt;/p&gt;

&lt;p&gt;I used &lt;a href="https://www.evernote.com" rel="noopener noreferrer"&gt;Evernote&lt;/a&gt; for about eight years, but I was very dissatisfied with the mobile sync and at some point I just did not accept anymore that they don’t provide end-to-end encryption. Right now I have a semi-satisfying double approach on note-taking:&lt;/p&gt;

&lt;h3&gt;
  
  
  iA Writer/deft
&lt;/h3&gt;

&lt;p&gt;For loose and fast note taking I use the same folder of markdown files that I either edit in &lt;a href="https://jblevins.org/projects/deft/" rel="noopener noreferrer"&gt;deft/emacs&lt;/a&gt; or in &lt;a href="https://ia.net/writer/" rel="noopener noreferrer"&gt;iA Writer&lt;/a&gt;, depending on the situation.&lt;/p&gt;

&lt;p&gt;The good thing is it can be edited easily, works mobile and I can do it with my favourite code editor. But everything beyond plain text is terrible and it is not end-to-end encrypted as I use Dropbox for sync.&lt;/p&gt;

&lt;h4&gt;
  
  
  DayOne
&lt;/h4&gt;

&lt;p&gt;The only thing that came close to a note-taking app that I wish for is not really a note-taking app, &lt;a href="http://dayoneapp.com/" rel="noopener noreferrer"&gt;but rather a journal&lt;/a&gt;. But it has a nice UI, E2E encryption and can embed multimedia files.&lt;/p&gt;

&lt;p&gt;I use it for more sensible data and long-term notes. Searching and organising notes is not as good as in Evernote, but it works fine for most cases.&lt;/p&gt;

&lt;p&gt;If you have a better setup (E2E and mobile access is crucial though) — please take my money!&lt;/p&gt;




&lt;h2&gt;
  
  
  Project Management
&lt;/h2&gt;

&lt;p&gt;Every personal or professional project that grows bigger than one note becomes a &lt;a href="http://trello.com/" rel="noopener noreferrer"&gt;Trello board&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I practiced &lt;a href="https://gettingthingsdone.com/" rel="noopener noreferrer"&gt;GTD&lt;/a&gt; for some years and it highly influenced the way I arrange my lanes on a Trello board. These are my default lanes for most projects:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;TODO&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Everything that is actionable &lt;em&gt;right now&lt;/em&gt; and should be done as soon as possible.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;@waitfor&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Everything that &lt;em&gt;should&lt;/em&gt; be done but is not actionable for me right now. This idea is straight from GTD and every task management system should have something like this.&lt;/p&gt;

&lt;p&gt;An example: I want Bob to setup a staging environment, so “Setup Staging Environment” is on my &lt;em&gt;TODO&lt;/em&gt; lane at first, because it is actionable (ask Bob) and it should be done asap. But what after I asked Bob to do it? It is not done, I cannot forget about it, but it is also not actionable right now. That’s what I have &lt;em&gt;@waitfor&lt;/em&gt; for.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;WIP&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Don’t forget what you are working on ;)&lt;br&gt;&lt;br&gt;
This makes sense if it is about a project that I only work on irregularly.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;SOON&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Actionable, not asap, but soon after.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;SOMEDAY&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Things I want to do someday. In a Scrum backlog, this would be the Icebox. 50% the task will die here, but they won’t clog the lanes I focus on right now.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;Knowledge Base/Summary&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Important lane for most of my personal projects. There are two kinds of &lt;em&gt;DONE&lt;/em&gt; in a project:&lt;/p&gt;

&lt;p&gt;First kind is just a chore, an obstacle that you have to get out of your way so you can proceed. This is nothing I need on my board, e.g. in a &lt;em&gt;DONE&lt;/em&gt; lane.&lt;/p&gt;

&lt;p&gt;The other kind is something where the outcome of the task becomes part of the project, e.g. booking a band for an event. I want to keep this knowledge in a handy manner, that’s why I usually keep an additional lane with given facts about the project. Every card is a fact and contains additional information, links, contacts, etc.&lt;/p&gt;




&lt;h2&gt;
  
  
  Taking Notes on Mobile
&lt;/h2&gt;

&lt;p&gt;Trello is also the way I take notes with my mobile phone, &lt;a href="https://help.trello.com/article/809-creating-cards-by-email" rel="noopener noreferrer"&gt;using a special Email address to add cards&lt;/a&gt; to the &lt;em&gt;TODO&lt;/em&gt; lane.&lt;/p&gt;

&lt;p&gt;This may sound cumbersome, but it is indeed the fastest way I know to jot down three words to remind me later.&lt;/p&gt;

&lt;p&gt;My use case is: Get Phone out of pocket, write down three words, put phone back in pocket. Most note taking apps will waste my time booting up, syncing or being stuck with brittle network connections. The only app that works for me on my iPhone with acceptable performance is Apple’s Mail app.&lt;/p&gt;

&lt;p&gt;For long time I used to send the notes to myself via mail, recently I switched to sending it to Trello directly. I saved the secret mail address in my contacts as &lt;code&gt;tt&lt;/code&gt;, so addressing the mail is only two keystrokes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Email Workflow
&lt;/h2&gt;

&lt;p&gt;I used to use &lt;a href="https://www.postbox-inc.com/" rel="noopener noreferrer"&gt;Postbox&lt;/a&gt; for a long time and I still think it is the best mail client if you are a power user and have to compose a lot of mails.&lt;/p&gt;

&lt;p&gt;Right now, I consume a lot of mails, but actually almost never write one on my own. That is why I switched to &lt;a href="http://airmailapp.com/" rel="noopener noreferrer"&gt;AirMail&lt;/a&gt;, which has good keybindings and is generally a lot faster, although with less features.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fy17mgflzt256ovlihxm9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fy17mgflzt256ovlihxm9.png" width="290" height="245"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I practice Inbox Zero. If an email hits my inbox, I either act immediately or write down a Card in the according Trello or do nothing. However, the mail will be archived by the end of the day.&lt;/p&gt;

&lt;p&gt;I have no fancy automated email rules set up. For me, setting them up always turned out as a waste of time.&lt;/p&gt;

&lt;p&gt;10 years ago, I read a Lifehacker article saying something like “it’s 2007, just use the search feature” — I’ve been doing it this way ever since, never missed a mail, never lost a mail.&lt;/p&gt;

&lt;p&gt;I have exactly one folder set up, it’s called “Invoices” and it contains tax-relevant stuff. The rest gets archived completely unsorted and I look it up if I need it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pomodoro
&lt;/h2&gt;

&lt;p&gt;I try to keep myself focussed and don’t get distracted to much by the usual storm of Slack messages, notifications and emails. If I really need to concentrate I make use of the &lt;a href="https://francescocirillo.com/pages/pomodoro-technique" rel="noopener noreferrer"&gt;Pomodoro Technique&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My setup is the following:&lt;/p&gt;

&lt;p&gt;* Enable &lt;a href="https://github.com/paulrudy/alfred-toggle-do-not-disturb" rel="noopener noreferrer"&gt;Do not Disturb&lt;/a&gt;-Mode via &lt;a href="https://www.alfredapp.com/" rel="noopener noreferrer"&gt;Alfred&lt;/a&gt;&lt;br&gt;&lt;br&gt;
* Start Spotify, apply hoodie for extra hacker points (optional)&lt;br&gt;&lt;br&gt;
* Use &lt;a href="https://xwavesoft.com/be-focused-pro-for-iphone-ipad-mac-os-x.html" rel="noopener noreferrer"&gt;Be Focussed Pro&lt;/a&gt; to set the goal of the session and start the timer.&lt;/p&gt;

&lt;p&gt;I keep the ticking timer in my macOS menu bar to remind me to focus on this single task.&lt;/p&gt;

&lt;p&gt;The Pomodoro technique works well for me, but I only use it if it makes sense for the task at hand. I learned quickly that it does not work well for every task, but when chosen wisely it can be a real productivity booster.&lt;/p&gt;

&lt;p&gt;That’s it for now! 🎉 Just a quick overview of some of the tools that make my work a little bit more productive. If you know other ways to do it, or you missed something, please let me know in the comments!&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;When pressing tab the following keys get remapped: uio=789; jkl=456; m,.=123;&amp;lt;SPACE&amp;gt; = 0&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Photo by Arthur Lambillotte on Unsplash&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>productivity</category>
      <category>devtips</category>
      <category>tips</category>
    </item>
    <item>
      <title>Actionable Core Values for your Engineering Team</title>
      <dc:creator>Christian Dewein</dc:creator>
      <pubDate>Thu, 21 Sep 2017 15:15:49 +0000</pubDate>
      <link>https://forem.com/fabrik42/actionable-core-values-for-your-engineering-team-p33</link>
      <guid>https://forem.com/fabrik42/actionable-core-values-for-your-engineering-team-p33</guid>
      <description>&lt;p&gt;If you work in a team of developers, you should talk about your shared values as a team. In this article, I will explain why this makes sense, why you should take action on these values and how we did it in our team.&lt;/p&gt;

&lt;p&gt;This was an experiment for me. When I started it, I worked with some of my teammates professionally and full time together for over 7 years, with others for about 7 days. I knew we shared a lot of values back then, but we never actually worked them out. I wanted to change this.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why should you define core values for your team?
&lt;/h4&gt;

&lt;p&gt;When you work together with other people in a team, and they care about what the team is doing and the team is somehow successful, you probably already share some unsaid values among the members of this team.&lt;/p&gt;

&lt;p&gt;I am lucky to work in such a very well performing and friendly team.&lt;/p&gt;

&lt;p&gt;Sometimes this is not the case and working with the team is frustrating. But even if the collaboration is inert or exhausting, there may be a good chance that you also share some values. They are just misinterpreted or not recognized.&lt;/p&gt;

&lt;p&gt;The point is: You will talk about values one way or the other. Everyone has personal values. They will come up at some point, in a discussion, an argument.&lt;/p&gt;

&lt;p&gt;The more stressful the situation is, the less likely it is that you will really understand each other. Perspectives and approaches differ and it takes some time to realize which values you share. It is much easier to really &lt;em&gt;get&lt;/em&gt; each other when you put some time aside to specify upfront what’s important to you. It will also be easier to remember the values and live by them, once they are clarified and written out.&lt;/p&gt;

&lt;p&gt;For me, this is like the technical part of developing software. You can take your time now to think about how things should be and write some specs for it. Or you can wait until production is on fire. You will think about it one way or the other, but I am sure the former approach is much more efficient and pleasant.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why should you tie actions to the core values?
&lt;/h4&gt;

&lt;p&gt;Sometimes these kind of “core-value-finding team offsites” are primarily a way to get to know the colleagues a little bit better and create some common ground. This is fine too, but I wanted to go further.&lt;/p&gt;

&lt;p&gt;I didn’t want us to define core values as an end in itself, but as a base for further actions to take our team to the next level. If you don’t live by a value, it’s not really a value to you. In order to live by these values, they must be actionable.&lt;/p&gt;

&lt;p&gt;So an additional task, beyond the definition of values, would be to put some thought into actions that bring these values to live. Which daily routines, tools, processes, behaviours or events can support a value?&lt;/p&gt;

&lt;p&gt;By reflecting about the values and how to make them actionable, we would have a much more intensive and detailed discussion about every proposed value.&lt;/p&gt;

&lt;h3&gt;
  
  
  Our Approach
&lt;/h3&gt;

&lt;p&gt;I looked for the best way to do this and found my answer in the book &lt;a href="http://www.triballeadership.net/book" rel="noopener noreferrer"&gt;Tribal Leadership&lt;/a&gt;. It defines two terms:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Values&lt;/strong&gt; – What does the team stand for. The shared values of the team. A value can be defined by terms like &lt;a href="http://www.threadsculture.com/blog/company-culture/core-values-list-threads/" rel="noopener noreferrer"&gt;“Quality”, “Courage”, or “Trust”&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Noble Cause&lt;/strong&gt; – What does the team live for. It is meant as a credo, a short description of what the team aspires to be. The book gives some very good examples. In other words, I would define it as the &lt;a href="http://www.alessiobresciani.com/foresight-strategy/51-mission-statement-examples-from-the-worlds-best-companies/" rel="noopener noreferrer"&gt;mission statement&lt;/a&gt; of your team.&lt;/p&gt;

&lt;p&gt;It is important to understand the difference between both.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;Core Values&lt;/em&gt; are the foundation, the basecamp of which the team starts off right now. The &lt;em&gt;Noble Cause&lt;/em&gt; gives the team the right direction, reminds them of what they want to become.&lt;/p&gt;

&lt;p&gt;Therefore it is important to look out for actionable items. They should build upon the values and support the team to move in the right direction, towards the noble cause.&lt;/p&gt;

&lt;p&gt;Based on these ideas we did a one day offsite with the whole team. In the next section, I will describe what we did and how it went.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Offsite Event
&lt;/h3&gt;

&lt;p&gt;This was the first time I organized this kind of event for my colleagues and I was very nervous. They were all very supportive of the idea, but I know that this kind of events can get a kind of cheesy vibe, which will result in eye-rolling and snarky comments and would basically undermine the whole idea. So one of my top priorities was to get my teammates into the mood to give it a serious and honest try.&lt;/p&gt;

&lt;p&gt;We took a whole day for this. We were eight people and met in a creative space outside of work, to not be distracted. I brought coffee and some soft drinks. We started slow.&lt;/p&gt;

&lt;p&gt;I wanted everyone to feel comfortable, because I think it was crucial to the success of this event that people were relaxed and open to the work we wanted to do.&lt;/p&gt;

&lt;h4&gt;
  
  
  Story Time
&lt;/h4&gt;

&lt;p&gt;As a warm up, we sat down at a table for a face-to-face discussion. We would soon start to work a lot with Post-Its and flip charts, but I felt a more intimate, personal opener would set a better course for the rest of the day.&lt;/p&gt;

&lt;p&gt;I started to share one of my “developer war stories”, at the risk of boring the rest of the group. But the point of the story was that I could end with &lt;em&gt;“and this is when I realized&lt;/em&gt; &lt;strong&gt;&lt;em&gt;X&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;is a very important value for me in my working environment”&lt;/em&gt;. The others could relate and I asked them to share some stories of themselves. In the end, everyone had shared a short story and a value the team could relate with.&lt;/p&gt;

&lt;h4&gt;
  
  
  Collecting Ideas for Core Values
&lt;/h4&gt;

&lt;p&gt;We split up in two groups and spent some time collecting and discussing personal work-related values, writing them down on Post-its. This is important, because to discuss shared values, every member needs to have some basic understanding of their own personal values and the values of others.&lt;/p&gt;

&lt;p&gt;We came together, presented the results of the two sub-groups and I think everyone was surprised how much in common everyone had.&lt;/p&gt;

&lt;p&gt;Normally, one would assume that we would proceed to discuss the presented values, cluster the results, discard the less-important and so on. But we didn’t do that. Not yet.&lt;/p&gt;

&lt;h4&gt;
  
  
  Collecting Ideas for the Noble Cause
&lt;/h4&gt;

&lt;p&gt;Instead, I introduced the concept of &lt;em&gt;Noble Cause&lt;/em&gt; and the difference between &lt;em&gt;Core Values&lt;/em&gt; and the &lt;em&gt;Noble Cause&lt;/em&gt;. We split up again and worked on ideas and suggestions for a noble cause.&lt;/p&gt;

&lt;p&gt;I think it was important to do it this way, because people should realize the difference &lt;strong&gt;&lt;em&gt;and&lt;/em&gt;&lt;/strong&gt; the connection between these two terms. It was necessary to start working on the noble cause before finishing the values. Otherwise, topics of one concept always seem to creep into the other one.&lt;/p&gt;

&lt;p&gt;Only after this round of brainstorming and discussion, we came together to talk about the results of values and cause. I created a new git repo and we started clustering, sorting out, formulating the values and the cause in a markdown file on a projector.&lt;/p&gt;

&lt;h4&gt;
  
  
  Defining Core Values and Noble Cause as a whole Group
&lt;/h4&gt;

&lt;p&gt;This was the most laborious, but also the most important part of the offsite. We tried to settle on a handful of terms that represent our values and to write some short explanation for every term. It forced us to discuss the actual meaning of the terms more in depth, clarifying what every term meant for the single team members. Interestingly, it was much easier to agree on the topics to leave out, than on the meaning of the topics everybody wanted to include.&lt;/p&gt;

&lt;p&gt;In the end, we agreed on five core values, each one explained by one to four short bullet points. And two very short sentences as our noble cause.&lt;/p&gt;

&lt;p&gt;The whole team was exhausted, but also happy with the result. Everyone could find themselves in the values and cause, but would agree that it was hard work to express these. Not because we argued all the time, but because it is hard to formulate the values and cause. You realize, even when you talked about these values implicitly for years, you never tried to boil it down, as a group effort, to make it clear to everyone. It is much harder than you would think, even after years of happily working together.&lt;/p&gt;

&lt;h4&gt;
  
  
  Finding Actionable Items for the Core Values
&lt;/h4&gt;

&lt;p&gt;After a break, we spent the rest of the afternoon by splitting up in two groups again. We were collecting ideas for actionable items to support our way as a team, based on the core values, towards the noble cause.&lt;/p&gt;

&lt;p&gt;The idea was to find things in our workflow that would support our core values: Things that always existed, things that we should do more, or new things that would move us into the right direction.&lt;/p&gt;

&lt;p&gt;We presented and discussed the ideas and, most importantly, we appointed people to be responsible for actionable items they cared for.&lt;/p&gt;

&lt;p&gt;This is when this offsite ended. We were able talk about a lot of things for the present and the future of this team, but it was also clear that we needed to take care of the results to prevent them from vanishing.&lt;/p&gt;

&lt;h3&gt;
  
  
  One Month Later — The Aftermath
&lt;/h3&gt;

&lt;p&gt;I waited one month to write up this article, because I wanted to see if the results of this offsite would last. The offsite was not meant to change the life of every team member, but I really hoped it would have a positive, sustainable impact on the way we work.&lt;/p&gt;

&lt;p&gt;Here are some of the actionable items that we already took action on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We created a Slack channel to discuss and remind ourselves of our core values and noble cause.&lt;/li&gt;
&lt;li&gt;We printed the core values and noble cause on two large posters to hang it in our office.&lt;/li&gt;
&lt;li&gt;We shared and explained the core values and noble cause to candidates and new team members during our hiring process and onboarding process.&lt;/li&gt;
&lt;li&gt;We discussed concrete rules for better commit messages.&lt;/li&gt;
&lt;li&gt;We settled some heated discussions by stopping for a second and reminding ourselves about our values.&lt;/li&gt;
&lt;li&gt;We revived a company internal book club and read a book together.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A lot of different ideas were created in this initial workshop. Sometimes the scope is very broad (book club), sometimes the scope is very specific (better commit messages). But they all pay into the same values, our values. I think it is great that we have such a wide variety of small enhancements coming from this.&lt;/p&gt;

&lt;h3&gt;
  
  
  So… What are our Core Values and Noble Cause?
&lt;/h3&gt;

&lt;p&gt;I am very proud of our core values and noble cause, so a part of me really wants to share them. But I won’t. This is something we did for us, that is important to us, and tailored for us.&lt;/p&gt;

&lt;p&gt;Maybe someday we will decide to publish them. For now, we will keep them hidden in our little dev tribe. We just want to see where this goes.&lt;/p&gt;




&lt;p&gt;&lt;small&gt;&lt;a href="https://unsplash.com/photos/e3OUQGT9bWU" rel="noopener noreferrer"&gt;Title Photo by Helena Lopes on Unsplash&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;

</description>
      <category>leadership</category>
      <category>career</category>
      <category>motivation</category>
      <category>culture</category>
    </item>
  </channel>
</rss>
