<?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: Tability</title>
    <description>The latest articles on Forem by Tability (@tability).</description>
    <link>https://forem.com/tability</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%2F178%2F4b3f9daa-91d6-4c7b-ac60-e298ef49ca19.png</url>
      <title>Forem: Tability</title>
      <link>https://forem.com/tability</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tability"/>
    <language>en</language>
    <item>
      <title>How to build a Pragmalith</title>
      <dc:creator>Sten</dc:creator>
      <pubDate>Fri, 10 Apr 2020 06:29:25 +0000</pubDate>
      <link>https://forem.com/tability/how-to-build-a-pragmalith-5egf</link>
      <guid>https://forem.com/tability/how-to-build-a-pragmalith-5egf</guid>
      <description>&lt;p&gt;This is a long overdue post, and I'm going to expedite it because otherwise I'll never post it. There's a heated debate going on right now about microservices vs. monoliths and I'm here to introduce you my answer.&lt;/p&gt;

&lt;p&gt;BEHOLD. THE PRAGMALITH.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What is a Pragmalith?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A Pragmalith is boring. It's a way to build your app that embraces your ability to fuck up and tries to minimize the impact of your mistakes. It also recognizes that discipline is hard, so why not force good practices on us?&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The rules of the Pragmalith&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Choose the familiar rather than the exciting
&lt;/h3&gt;

&lt;p&gt;Pick the edge cases and bugs that you know rather than having to discover new ones. Treat innovation like a rare and precious gem. Read &lt;a href="https://mcfunley.com/choose-boring-technology"&gt;Choose Boring Technology&lt;/a&gt; and pass it around.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Don't trust yourself
&lt;/h3&gt;

&lt;p&gt;Document things. Write comments. Write tests. Don't SQL your prod database. Put safeguards in place to save you from the day you'll be too tired to care about discipline.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Don't be clever
&lt;/h3&gt;

&lt;p&gt;Do things the boring way. Clever code won't save you CPU cycles but it will kill many brain cells — including yours when you'll come back to it after a year.&lt;/p&gt;

&lt;p&gt;(It may also cause hair losses via forced pull action).&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Split your frontend from your backend
&lt;/h3&gt;

&lt;p&gt;Backends and frontend have different lifecycles. Keep them separate to minize risks. It will also prevent some spaghetti shortcuts where build backend logic in your views.&lt;/p&gt;

&lt;p&gt;This here is the only rule where I'm calling for something specific. And this is coming from my experience. I worked as a dev and as a product manager and I'm absolutely convinced that separating the frontend cycle from the backend cycle works best for everyone (I can expand more on this if you really want to — just ask in the comments).&lt;/p&gt;

&lt;h3&gt;
  
  
  5. The default answer to creating a new service should be "No"
&lt;/h3&gt;

&lt;p&gt;If you think you need a new microservice then you probably don't need it. New services or repositories should be painkillers, not vitamins.&lt;/p&gt;

&lt;p&gt;E👏v👏e👏r👏y👏  new service will add a new set of 👏pro👏blems. Testing, deploying, backing up, testing the backups... Adding more services is expensive and brutal. And it should be weighed against a real pain felt today (slow release cycles, devs stepping on each other, etc...)&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Architecture vs. practices&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A Pragmalith is not just about how you structure your services. It's about having a certain mindset where you try to minimize headaches and avoid unnecessary complexity.&lt;/p&gt;

&lt;p&gt;Do the things you have to, not the things you want to.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why not a Monolith?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Monoliths have their own problems at scale and you'll need to break them up at some point. But really, it's about being pragmatic and do things that work for you.&lt;/p&gt;

&lt;p&gt;I don't trust myself to have the discipline to avoid shortcuts in the code. That's why our backend is a REST API in a separate codebase: it has clear inputs and outputs, and you can't cheat in the views. The separation of concerns is forced on us.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What's our Pragmalith at Tability?&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Rails 5 API backend with Postgres&lt;/li&gt;
&lt;li&gt;React* for the web app frontend&lt;/li&gt;
&lt;li&gt;React Native* for the mobile app&lt;/li&gt;
&lt;li&gt;Gatsby for the website&lt;/li&gt;
&lt;li&gt;A Rails microservice for the Jira Connect App&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;* Items with a star mean an innovation token was used at the time&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;React was a new framework at the time, thus being an &lt;a href="https://medium.com/@stenpittet/lessons-from-building-a-fresh-react-native-app-in-37-days-9492bade5145"&gt;expensive innovation token to use&lt;/a&gt;. BUT, it was going to remove a lot of pain for our small team. We could re-use a lot of the web app code for the mobile app, and once I got the hand of React it became quite easy to approach Gatsby.&lt;/p&gt;

&lt;p&gt;But all the other stuff is boring. I really want to try Elixir and Phoenix, to learn more about Kubes, to explore all that AWS has to offer. But it would kill us.&lt;/p&gt;

&lt;p&gt;We'd have an exciting tech but a boring product.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Pragmalith hates fights&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A Pragmalith is something that works for &lt;em&gt;you and your org&lt;/em&gt;. The threshold of what's boring moves with the competencies and experience of the team.&lt;/p&gt;

&lt;p&gt;I'm out ✌️&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
    </item>
    <item>
      <title>How we replaced (part of) Intercom with 100* lines of code</title>
      <dc:creator>Sten</dc:creator>
      <pubDate>Tue, 27 Aug 2019 12:37:39 +0000</pubDate>
      <link>https://forem.com/tability/how-we-replaced-intercom-with-100-lines-of-code-ok-it-was-105-lines-58e6</link>
      <guid>https://forem.com/tability/how-we-replaced-intercom-with-100-lines-of-code-ok-it-was-105-lines-58e6</guid>
      <description>&lt;p&gt;Edit: less clickbaity title&lt;/p&gt;

&lt;p&gt;(*ok, it was 105 lines)&lt;/p&gt;

&lt;p&gt;We started to use Intercom the classic way: we wanted a simple way for people to reach out to us. Whether they were curious visitors or existing users, Intercom gave us a great way to interact with folks and have rapid feedback.&lt;/p&gt;

&lt;p&gt;So, to be clear, we love Intercom ❤️, and they're an inspiration in many aspects.&lt;/p&gt;

&lt;p&gt;But we started to see issues with feature announcements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users would have a hard time clearing messages.&lt;/li&gt;
&lt;li&gt;New posts would pop up in odd situations.&lt;/li&gt;
&lt;li&gt;It wasn't possible to find old announcements if you missed it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm sure that a lot of it was due to a poor configuration on our end. But even if we got better at posting, it still would not solve the last issue.&lt;/p&gt;

&lt;p&gt;Replacing Intercom with another solution has been a real "scaling small" exercise. We wanted to be able to keep moving fast and letting users know about improvements, but we also had to manage costs — we could not justify spending more than a couple of days on an alternative.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking for a better solution
&lt;/h2&gt;

&lt;p&gt;I've been burned several times jumping straight into code, and I learned the hard way that you should step on the brakes first if you want to cross a wide road.&lt;/p&gt;

&lt;p&gt;We have a simple way to evaluate options when we're about to build something significant. First, we look at the core capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customers can learn about new features.&lt;/li&gt;
&lt;li&gt;Customers can find old announcements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then we list some constraints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Less intrusive&lt;/li&gt;
&lt;li&gt;Cheap implementation costs&lt;/li&gt;
&lt;li&gt;Low management overhead&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These 2 lists are enough to start outlining options. It's crucial to add the status quo as the first option because you need to make sure that you're improving things. If you just compare a set of new solutions you risk picking an approach that might degrade the current experience. &lt;/p&gt;

&lt;p&gt;So, here's what the first set of options looked like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Keep using Intercom (status quo)&lt;/li&gt;
&lt;li&gt;Hardcode announcements&lt;/li&gt;
&lt;li&gt;Build our own announcement feature&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I put them in a table and made a quick comparison to see if option 2 or 3 would be satisfying.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fnl58epiempcude6qc7tf.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fnl58epiempcude6qc7tf.png" alt="None of the options could fit all criterias"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;None of the proposed solutions were satisfying. Hardcoding posts would be super annoying to manage, and building a full service was way too expensive.&lt;/p&gt;

&lt;p&gt;We kept looking around for inspiration, and, not without a bit of irony, the answer came from Intercom itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The lightbulb moment💡: using what we had
&lt;/h2&gt;

&lt;p&gt;The goal was to let customers know about new features — nothing more. But we were so focused on the current experience (everything in-app) that we did not look for a different approach.&lt;/p&gt;

&lt;p&gt;Well, Intercom has a small bell icon in their navbar for feature announcements. It gets a red dot when there are new things to read about, and clicking on the bell takes you to their blog. No intrusive popup, no messages to dismiss.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F74oqjy1mkvx1giiqnk2v.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F74oqjy1mkvx1giiqnk2v.jpg" alt="Click on the bell, and you're taken to the Intercom blog."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That was perfect.&lt;/p&gt;

&lt;p&gt;All our feature posts were already on our blog, and this is where customers could also find old posts. So we just had to send them there to read about what we've done to improve Tability.&lt;/p&gt;

&lt;p&gt;No backend required to manage posts. No need to create a fancy listing in the UI. We just needed a way to show that new blog posts had been posted.&lt;/p&gt;

&lt;p&gt;That was done simply by using localStorage to capture the last time they clicked on the link to the blog. Sure, the notification would pop up again if you switched browser for the same account, but that's still an edge case right now (but we'll fix that later).&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Faxvalcl59rfeopaogpzs.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Faxvalcl59rfeopaogpzs.jpg" alt="Our own announcement UX for Tability"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  105 lines of code later
&lt;/h2&gt;

&lt;p&gt;We're pretty happy with the result and we will iterate on the implementation to improve it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We still have to store the timestamp of the last blog update somewhere in on frontend (we deploy multiple times a day so still manageable).&lt;/li&gt;
&lt;li&gt;Having the notification popping up again in different devices will end up being annoying when we launch our mobile app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's not what we originally had in mind, but it does the right job: reducing noise while letting users learn about improvements.&lt;/p&gt;

&lt;p&gt;The lesson learned? Focusing on what the customer needs to do, rather than the experience you want to ship lets you be more creative.&lt;/p&gt;

&lt;p&gt;(Also, 105 lines could have been shorter, but Redux...)&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The 4 stages of goal-tracking (aka don't jump into OKRs)</title>
      <dc:creator>Sten</dc:creator>
      <pubDate>Fri, 22 Mar 2019 05:05:09 +0000</pubDate>
      <link>https://forem.com/tability/the-4-stages-of-goal-tracking-aka-dont-jump-into-okrs-27ai</link>
      <guid>https://forem.com/tability/the-4-stages-of-goal-tracking-aka-dont-jump-into-okrs-27ai</guid>
      <description>&lt;p&gt;&lt;em&gt;This is the second post in our series about pragmatic goal-tracking. While this is not diving into dev practices it's something that I believe is important to empower Product teams. By being more outcome-driven you can reduce micro-management and let the team own more of the future.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;You can check the previous post introducing &lt;a href="https://blog.tability.io/be-like-a-remote-team-empower-your-team-to-scale-productivity/"&gt;the business case for setting and tracking goals&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Staying productive as you grow is a common challenge for teams. Agile practices help a lot to make sure that your projects are delivered faster, but they don't guarantee that your team is working on the right initiatives. This is why goal-setting, and the Objective and Key Results (OKRs) framework in particular, are rapidly gaining in popularity - they provide an easy way to create a shared understanding of what matters for the business, and what the top priorities are.&lt;/p&gt;

&lt;p&gt;However, it's often daunting to go from nothing to setting multi-level OKRs that are tracked religiously. Change management is hard, and there are multiple stages to pass in order to grow your outcome-driven muscle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 1: No shared goals
&lt;/h2&gt;

&lt;p&gt;This is where you start, and while it might sound silly it's an extremely common place to be.&lt;/p&gt;

&lt;p&gt;When you're early stage it's hard to have a clearly defined view of where you want to be in 3, 6, 12 months. You're still figuring things out talking to as many users as possible and trying to get a sense of what the market wants.&lt;/p&gt;

&lt;p&gt;You might have a target for revenues and users but it's not broken down much further in metrics that each member of the team can relate to.&lt;/p&gt;

&lt;p&gt;What are 5 signs that you're in stage 1?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There are no goals beyond revenue and customer growth targets.&lt;/li&gt;
&lt;li&gt;There are no monthly and quarterly review of progress and impact.&lt;/li&gt;
&lt;li&gt;The roadmap is reactive, new projects are decided when the current ones are finished.&lt;/li&gt;
&lt;li&gt;Micro-management is needed to make progress. The team doesn't have enough understanding of the path forward to make their own decisions.&lt;/li&gt;
&lt;li&gt;The team feels disengaged from the product - people are checking-in to do the work decided by leadership.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stage 2: We want goals
&lt;/h2&gt;

&lt;p&gt;Even if you do not plan for stage 2 it's something that you'll get to eventually as your team grows. Past a certain size, it's not possible to keep having in-person discussions with everyone, and it's hard to keep up with the number of open questions about the future. You have more people moving together, and you need good ways to make sure they're going in the same direction.&lt;/p&gt;

&lt;p&gt;You're just starting to think actively about your North Star and most of your effort will go into changing the culture to build more trust and become more data-driven.&lt;/p&gt;

&lt;p&gt;What are 5 signs that you are in stage 2?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You have some metrics beyond your sales and customer targets but they're mostly defined by leadership.&lt;/li&gt;
&lt;li&gt;You're covering key performance indicators (KPIs) like monthly active users (MAUs), conversion rates, customer acquisition costs (CAC), but you do not have goals that are driving improvements in specific aspects of your products.&lt;/li&gt;
&lt;li&gt;You follow the evolution of your KPIs but have not set targets for them yet.&lt;/li&gt;
&lt;li&gt;Progress is generally reviewed on a quarterly basis.&lt;/li&gt;
&lt;li&gt;The team has a shared understanding of the vitals of the business, but not everyone feels like they can have an impact.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stage 3: We set goals
&lt;/h2&gt;

&lt;p&gt;Okay, now we're getting to the stage where things start to scale in an exciting way. Stage 3 companies have teams running their own workshops to define how they'll measure success. There's a clear vision coming from the top that you can look up to understand how you can contribute to success.&lt;/p&gt;

&lt;p&gt;There are still some hiccups when it comes to tracking goals and defining realistic targets but people can now work autonomously and report on outcomes to leadership.&lt;/p&gt;

&lt;p&gt;5 signs you're at stage 3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You have a few people championing the concepts of SMART goals and OKRs.&lt;/li&gt;
&lt;li&gt;Leadership creates the vision but teams can define their own goals.&lt;/li&gt;
&lt;li&gt;Targets are set but there are some big misses due to goals being too ambitious.&lt;/li&gt;
&lt;li&gt;Goals are set before each quarter and written down in a shared doc or spreadsheet&lt;/li&gt;
&lt;li&gt;But, updates are sometimes missed, and you do not keep the progress history.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stage 4: we track goal
&lt;/h2&gt;

&lt;p&gt;At stage 4, your company is fully driven by outcome. Every team knows what their focus should be and they are able to self-evaluate to make hard calls on projects that are late or not delivering the impact expected.&lt;/p&gt;

&lt;p&gt;This is when your company produces unexpected results as people are able to come up with innovative solutions to achieve a particular outcome. It's also when you can see a high engagement from the team as they become accountable for their own decisions.&lt;/p&gt;

&lt;p&gt;5 signs you're at stage 4:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Everyone is familiar with the concepts of KPIs, SMART goals and OKRs.&lt;/li&gt;
&lt;li&gt;Teams are able to design a set of goals to improve significantly a particular theme or aspect of their product ( &lt;em&gt;expand customers, knowing our users, ecosystem integrations&lt;/em&gt;). &lt;/li&gt;
&lt;li&gt;Leadership can focus on longer-term goals (where they want to be in 2-3 years) and let teams define the right outcomes for each quarter.&lt;/li&gt;
&lt;li&gt;Progress is shared and monitored on a regular basis (weekly for quarterly goals, monthly for yearly plans).&lt;/li&gt;
&lt;li&gt;Historical data is kept and you can go back in time to understand how you got to where you are today.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Moving up the ladder
&lt;/h2&gt;

&lt;p&gt;There are a few more posts outlining how to move from 1 stage to another but I'm mindful of dev.to being a tech community. I'd be keen to share the rest of the series if the crowd is happy (and tech posts will be coming back soon!)&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This post was originally published &lt;a href="https://blog.tability.io/the-4-stages-of-goal-tracking-how-to-go-from-0-to-okrs/"&gt;on our blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
    </item>
    <item>
      <title>Be like a remote team: empower your team to scale productivity</title>
      <dc:creator>Sten</dc:creator>
      <pubDate>Thu, 07 Mar 2019 02:25:11 +0000</pubDate>
      <link>https://forem.com/tability/be-like-a-remote-team-empower-your-team-to-scale-productivity-3ng8</link>
      <guid>https://forem.com/tability/be-like-a-remote-team-empower-your-team-to-scale-productivity-3ng8</guid>
      <description>&lt;p&gt;&lt;em&gt;This article is part of a series about pragmatic goal-tracking that we're publishing on &lt;a href="https://blog.tability.io/"&gt;our blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;One advantage that we don't talk about often enough about remote teams is that they're forced to ditch micro-management early on and adopt collaboration practices that help them scale execution - you can't rely on verbal checks to get work done across multiple timezones. You need to build trust and get a shared understanding of where you are now, and where you want to go.&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://tability.io"&gt;Tability&lt;/a&gt; we're small, and remote. And by remote, I mean several layers of timezones between us. I live in Sydney, and Bryan is in Portland. Same love for coffee, different temperatures.&lt;/p&gt;

&lt;p&gt;This situation gives us a few advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Great coverage of our customers.&lt;/li&gt;
&lt;li&gt;Flexible hours and minimum commute (I work from a co-working space, Bryan works from home).&lt;/li&gt;
&lt;li&gt;Long, uninterrupted, blocks of work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But, being remote also forced us to grow up faster and fix some collaboration issues that you'd generally associate with bigger companies.&lt;/p&gt;

&lt;h2&gt;
  
  
  The big collaboration problems of small distributed teams
&lt;/h2&gt;

&lt;p&gt;Whether it's on Twitter or in the press, it seems that 2019 is going to be the year of remote teams. And it's not just for startups! Larger organizations are also becoming more and more open to having employees working outside of their headquarters. More than a fad, this is now a convincing perk to attract and retain the best talent in tech.&lt;/p&gt;

&lt;p&gt;There's a problem though. The cost of coordination for remote teams is an order of magnitude higher than for people sitting in the same office. A co-located team &lt;em&gt;should&lt;/em&gt; be investing the same amount in collaboration, but they can usually do away with it much longer than distributed teams.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Everyone is in the office at the same time. You can talk to the entire team at once by raising your voice.&lt;/li&gt;
&lt;li&gt;Impromptu meetings can be organized on the spot.&lt;/li&gt;
&lt;li&gt;You can get questions answered right away. Just turn around to your neighbor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This proximity and availability make it easy to rely on over the shoulder checks (&lt;em&gt;are you done?&lt;/em&gt;), rapid interruptions (&lt;em&gt;hey can you check this?&lt;/em&gt;) and just-in-time requirements (&lt;em&gt;oh that's not how it's supposed to work...&lt;/em&gt;). The alternative is to spend more time up front to explain the problem we need to tackle, outline the expected benefits, define how we'll measure success, and finally prepare the work that needs to be done.&lt;/p&gt;

&lt;p&gt;The second approach will yield better results, but the upfront costs are often scary for teams that are already under pressure. So we push back until it becomes apparent that we need to change the way we work to scale.&lt;/p&gt;

&lt;p&gt;(Un)fortunately for remote teams, your colleagues are sitting far from you. So you have no choice but to invest in practices that will help everyone on the team to work autonomously while going in the same direction. It's the same type of problem that large organizations are facing when a vision has to be shared by teams that can't meet in person. How can you empower people to move fast in the same direction with low friction?&lt;/p&gt;

&lt;h2&gt;
  
  
  3 simple steps to switch to an outcome-driven culture and scale execution
&lt;/h2&gt;

&lt;p&gt;The best way to help your organization move faster is by giving everyone the means to understand the impact they can have to take the business where it should be. Instead of giving people projects, you give them goals - they will decide themselves what projects are more suited to deliver the expected outcome.&lt;/p&gt;

&lt;p&gt;But turning your culture around can take time and there are a few things to put in place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: write everything down, starting with the vision
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;"If I had more time, I would have written a shorter letter." - Blaise Pascal&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It takes efforts to extract one's thoughts and put them down shortly and concisely. And it's not enough to write a few bullet points in a doc. You will need to make sure that everyone has the same understanding of the content, and that all potential questions and doubts have been addressed.&lt;/p&gt;

&lt;p&gt;This is going to set the tone for the future - every goal, every initiative that is proposed should relate to that initial vision.&lt;/p&gt;

&lt;p&gt;Once that is done you should keep the practice of writing things down, starting by answering a few questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are we doing?&lt;/li&gt;
&lt;li&gt;Why do we want it?&lt;/li&gt;
&lt;li&gt;Who is it for?&lt;/li&gt;
&lt;li&gt;How will we know it works?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You'll note that there's no &lt;em&gt;when&lt;/em&gt; in here, and that's because before deciding if something should be done &lt;em&gt;now&lt;/em&gt; or &lt;em&gt;never&lt;/em&gt;, you should first have a good understanding of its value. Then, you can move on to evaluating the cost, and only after that will you have enough information to see if it is a good fit for your vision compared to other initiatives that you might have on your list.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: start measuring success
&lt;/h3&gt;

&lt;p&gt;The second step is to make sure that you have the right tools to know if your projects are successful. It's not enough to look at sales and signups. You need to be able to drill down further to have a deeper understanding of how improvements are affecting the performance of your product.&lt;/p&gt;

&lt;p&gt;If you want your team to be able to work better autonomously, you need to provide them with ways to self-evaluate and judge if they are making the right decisions. Do you have tools to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track events in your product?&lt;/li&gt;
&lt;li&gt;Analyze your conversion funnels?&lt;/li&gt;
&lt;li&gt;Get you Net Promoter Score (NPS)?&lt;/li&gt;
&lt;li&gt;Understand retention, churn?&lt;/li&gt;
&lt;li&gt;Know where leads are coming from?&lt;/li&gt;
&lt;li&gt;Track your Monthly Recurring Revenues (MRR), Monthly Active Users (MAUs), Customer Acquisition Cost (CAC)? &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This list is not exhaustive and it will vary a lot depending on your product, but that's a good place to start. You absolutely need to be able to give more than revenue targets to your team if you want them to make good decisions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Rely on goals rather than projects
&lt;/h3&gt;

&lt;p&gt;My coding background has trained me to focus on delivering features. I got really good at this, being able to do quick trades in implementation to ship a new improvement in time.&lt;/p&gt;

&lt;p&gt;A lot of businesses are organized that way. We define projects and train people to be flexible and find solutions to make sure that deadlines are met. It's very effective, but it puts too much emphasis on outputs (get the project done) and not enough on outcomes (get the expected results). It might look like a subtle difference but you're teaching your organization to innovate on delivering solutions, rather than finding the right problems to solve.&lt;/p&gt;

&lt;p&gt;This is why, once you know who to measure success, the final step is to switch to being more driven by outcomes. There are different ways to get there but the path we will explore in future posts will look like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start by finding the &lt;a href="https://neilpatel.com/blog/single-startup-metric/"&gt;one metric that matter&lt;/a&gt; (OMTM) for your business&lt;/li&gt;
&lt;li&gt;Use the &lt;a href="https://www.atlassian.com/blog/productivity/how-to-write-smart-goals"&gt;SMART template&lt;/a&gt; to define underlying goals&lt;/li&gt;
&lt;li&gt;Adopt &lt;a href="https://felipecastro.com/en/okr/what-is-okr/"&gt;OKRs&lt;/a&gt; to structure your goals and get bottom-up initiatives.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it for the introduction. Feel free to go &lt;a href="https://blog.tability.io/#subscribe"&gt;subscribe to our newsletter&lt;/a&gt;, and you can also find me &lt;a href="https://twitter.com/stenpittet"&gt;on Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>okrs</category>
      <category>productivity</category>
      <category>teamwork</category>
      <category>remoteteams</category>
    </item>
    <item>
      <title>A simple goal framework to collaborate remotely</title>
      <dc:creator>Sten</dc:creator>
      <pubDate>Thu, 24 Jan 2019 22:40:31 +0000</pubDate>
      <link>https://forem.com/tability/a-simple-goal-framework-to-collaborate-remotely-4n3d</link>
      <guid>https://forem.com/tability/a-simple-goal-framework-to-collaborate-remotely-4n3d</guid>
      <description>&lt;p&gt;Last week I stumbled upon the following question on IndieHackers: &lt;a href="https://www.indiehackers.com/forum/is-it-possible-to-have-a-startup-with-the-co-founders-living-in-different-countries-fa64126ef7" rel="noopener noreferrer"&gt;"Is it possible to have a startup with the co-founders living in different countries?"&lt;/a&gt;.   We're in that exact situation at Tability with one founder (Bryan) in Portland, and the other one (me) in Sydney.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F2ztz1m3kr1b0d60diilp.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F2ztz1m3kr1b0d60diilp.png"&gt;&lt;/a&gt;&lt;br&gt;
I shared a few tips on that post that I want to expand on here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remote problems are large teams problems
&lt;/h2&gt;

&lt;p&gt;Bryan and I both worked at Atlassian before starting Tability, so we have a few years of experience working in large-ish companies (YMMV). What surprised me when we started working as a remote duo is that a lot of the issues we faced were quite similar to the problems I ran into while I was a Product Manager in a team of 20, working with a dozen of other groups across the world:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can't rely on over-the-shoulder communication to clarify things.&lt;/li&gt;
&lt;li&gt;You need to build an environment allowing people to be autonomous.&lt;/li&gt;
&lt;li&gt;You need to find ways to keep everyone informed and engaged.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You might object that this is true for all organizations, but you don't really feel the pain if you're a team of 5 all sitting in the same room. At that stage, it's still easy to keep everyone on the same page by standing up and talking out loud, and you're small enough that you can keep track of what each person is doing. But, add a couple more people to the team, and communication will start to break down. There's too much going on, and it becomes harder to identify the signal from the noise.&lt;/p&gt;

&lt;p&gt;There's another way to experience that pain, even if you stay small.&lt;/p&gt;

&lt;p&gt;Make your team remote-first. Just like we are.&lt;/p&gt;

&lt;p&gt;Timezones and distance will produce the same communication issues that you'd have with a larger co-located team. TL;DR; we had to figure out pretty early on how to make sure we would be rowing our boat in the same direction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Purpose &amp;gt; Focus &amp;gt; Measures (PFM)
&lt;/h2&gt;

&lt;p&gt;We created a simple document that drives our effort and makes it easy to find answers when we're wondering what we should be working on. It's inspired by a mix of our experience at Atlassian, &lt;a href="https://sliwinski.com/v2mom/" rel="noopener noreferrer"&gt;Salesforce V2MOM&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/OKR" rel="noopener noreferrer"&gt;OKRs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It's a straightforward model designed to be easily understood and quick to adopt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Purpose at the top
&lt;/h3&gt;

&lt;p&gt;The first section of the document defines our purpose as a company. This is something that should last a few years. We're still iterating on our mission statement but it goes something like that:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Bring teams together to solve big problems&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It should be precise enough that it sets a clear direction, but loose enough that it doesn't stifle innovation. I'd recommend taking some time to figure it out because everything else will come down from it. Using the &lt;a href="https://en.wikipedia.org/wiki/5_Whys" rel="noopener noreferrer"&gt;5 Whys&lt;/a&gt; and the &lt;a href="http://innovatorstoolkit.com/content/technique-1-jobs-be-done" rel="noopener noreferrer"&gt;Jobs To Be Done&lt;/a&gt; is a good start, but if you're like us you'll probably do several iterations as you get to know your customers better.&lt;/p&gt;

&lt;h3&gt;
  
  
  Focus areas underneath
&lt;/h3&gt;

&lt;p&gt;Below the purpose, we've listed our big priorities for the next 12 months. There are still no metrics at this stage. Instead, we list 2-3 focus areas that will drive our roadmap for the year.&lt;/p&gt;

&lt;p&gt;In our case we have:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Don't run out of money:&lt;/strong&gt; we're a young bootstrapped startup so managing our cash flow is critical.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Land teams:&lt;/strong&gt; we love it when individuals use Tability, but we're building it for teams primarily.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Awesome goal-tracking:&lt;/strong&gt; we could expand to goal-setting but we want first to do excel at goal-tracking first.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These focus areas are fairly large and will help pick initiatives for the next 12 months. It's what we often go back to when we're putting things on the backlog. Does it help with cash flow? Does it make teams sticky? Is it making goal-tracking easy and great? If there isn't a positive answer for any of these question then it's probably not a good fit.&lt;/p&gt;

&lt;h3&gt;
  
  
  Measures at the bottom.
&lt;/h3&gt;

&lt;p&gt;Finally, we have set 2-3 measurable goals per focus areas to help us track progress. I won't give you our exact targets but the overall document looks like the picture 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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fnsb58840nkxtlh9764ls.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fnsb58840nkxtlh9764ls.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Good goals are hard to define. It's often easy to fall for vanity metrics that do not really challenge your business. Metrics do not exist to make you feel good. They are here to make sure that you're achieving the results you need, or at least help you realize that you might not get there with your current approach.&lt;/p&gt;

&lt;p&gt;Once you've picked a set of metrics, just run a few scenarios to double-check that they'll help you know the truth. For instance, if you focus on the growth of accounts instead of the growth of &lt;em&gt;active&lt;/em&gt; accounts you can easily get a false sense of accomplishment if you see a lot of people signing up. But if most of the newly signed users never return to your product then your business will quickly go underground.&lt;/p&gt;

&lt;p&gt;Overall I'd suggest not having more than 10 driving goals in your document because the more you have, the more you're going to dilute your effort. It's better to have a great impact on a few things than having lots of small improvements in different areas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Split things into quarters
&lt;/h2&gt;

&lt;p&gt;Now that our PFM doc is set up we can use it to drive the roadmap. At the beginning of each quarter, we look at what we can do to maximize impact in each of the focus areas. We always have a clear view of the next 3 months, and an outline of months 3-6. Beyond that, we can just refer back to our strategy document to understand what our priorities will be.&lt;/p&gt;

&lt;p&gt;The goals are roughly the same as the ones in the PFM but the targets are adjusted for the quarter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measure, learn, adjust - on repeat
&lt;/h2&gt;

&lt;p&gt;Now, this is what truly makes a difference. Creating a vision document, setting some goals is cool. But the real value is in tracking progress regularly. This is quite different from having a weekly demo, or weekly standup where you talk about what you've done in the week.&lt;/p&gt;

&lt;p&gt;We update progress on our quarterly goal every week. It's a simple update with a red/yellow/green status as well and how far we are from the target. This is a bit akin to applying Continuous Delivery to strategy, and providing updates on a weekly basis has several benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It helps us realize pretty quickly if we're stagnating in an area, or if something is in the red&lt;/li&gt;
&lt;li&gt;It keeps us accountable and softens the noise that happens during the week.&lt;/li&gt;
&lt;li&gt;It helps us be more responsive and agile.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More importantly, it helps us drive a culture where we focus on impact rather than tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adopting the PFM
&lt;/h2&gt;

&lt;p&gt;I created a &lt;a href="https://docs.google.com/spreadsheets/d/1CAgnyvSR6Kll3Z9CV-kRbh_I6Wmsz3Ta229nJ-E6l5Y/edit?usp=sharing" rel="noopener noreferrer"&gt;Google Sheet&lt;/a&gt; with a PFM and a goal-tracking template which should be enough to get you started.&lt;/p&gt;

&lt;p&gt;Obviously, we're also building a great tool to help teams track their goal. So if you're looking for something better than a spreadsheet, you should &lt;a href="https://tability.io" rel="noopener noreferrer"&gt;sign up for Tability&lt;/a&gt;. It includes automatic reminders, an accountability bot, and makes it easy to share updates and visualize progress.&lt;/p&gt;

&lt;p&gt;I'm always keen on learning from other teams so please share your own approach and feedback in the comments, and you can always reach out to me on &lt;a href="https://twitter.com/stenpittet" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This post was first published on &lt;a href="https://blog.tability.io/a-simple-goal-framework-to-collaborate-remotely-and-focus-on-impact/" rel="noopener noreferrer"&gt;https://blog.tability.io&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>startup</category>
    </item>
    <item>
      <title>Squadlytics is on ProductHunt! Applying CI/CD principles to organizations</title>
      <dc:creator>Sten</dc:creator>
      <pubDate>Tue, 06 Nov 2018 11:18:20 +0000</pubDate>
      <link>https://forem.com/tability/squadlytics-is-on-producthunt-applying-cicd-principles-to-organizations-i31</link>
      <guid>https://forem.com/tability/squadlytics-is-on-producthunt-applying-cicd-principles-to-organizations-i31</guid>
      <description>&lt;p&gt;Hey all! It's an exciting day for us at Squadlytics as we've just &lt;a href="https://www.producthunt.com/posts/squadlytics-2" rel="noopener noreferrer"&gt;launched on ProductHunt&lt;/a&gt;. It's been a lot of sweating and perseverance to get there today, and it's really cool to reach a ProductHuntable state.&lt;/p&gt;

&lt;p&gt;We're building a continuous feedback platform to help teams stay focused on their goals and share progress easily. The basic idea is to bring the benefits of Continuous Integration to track the health of projects.&lt;/p&gt;

&lt;p&gt;There's a lot of friction today in the way people share goals and results. You have to find the right spreadsheet or doc, update a column, lose history. And if you're something like Jira or Trello for it, you often end up with a custom setup that is hard to share across your organization. &lt;/p&gt;

&lt;p&gt;At Squadlytics &lt;a href="https://dev.to/squadlytics/how-we-measure-simplicity-to-make-sure-users-can-do-more-with-less-c1n"&gt;we're working hard to keep things simple&lt;/a&gt; and create fast feedback loops. If we can remove that friction and accelerate feedback, then it is much easier for teams to address the issues preventing them from reaching their objectives.&lt;/p&gt;

&lt;p&gt;Check us out at &lt;a href="https://www.producthunt.com/posts/squadlytics-2" rel="noopener noreferrer"&gt;https://www.producthunt.com/posts/squadlytics-2&lt;/a&gt; - we're eager to get your feedback!&lt;/p&gt;

</description>
      <category>productivity</category>
    </item>
    <item>
      <title>How we measure simplicity to make sure users can do more with less</title>
      <dc:creator>Sten</dc:creator>
      <pubDate>Thu, 04 Oct 2018 12:07:18 +0000</pubDate>
      <link>https://forem.com/tability/how-we-measure-simplicity-to-make-sure-users-can-do-more-with-less-c1n</link>
      <guid>https://forem.com/tability/how-we-measure-simplicity-to-make-sure-users-can-do-more-with-less-c1n</guid>
      <description>&lt;p&gt;&lt;em&gt;I hesitated to share this post here because it's more about UX than really teaching something new about software development. I thought it'd still be relevant as we're all building experiences at the end of the day.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;At Squadlytics we have a strong commitment to simplicity. Heck, I'll go further and say that this is our raison d'être, and we've put a little framework together to help measure friction in our product.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wait, what's Squadlytics?
&lt;/h3&gt;

&lt;p&gt;Our platform helps teams stay focused by providing continuous feedback on goals and results.  Most of the teams we talk to have goals they care deeply about. They worked hard to figure out the best path forward, and they strive to deliver their best work.&lt;/p&gt;

&lt;p&gt;But as they grow it becomes difficult to share progress and get visibility on how people are doing. You're either using a spreadsheet, which gets lost among all the other docs of the company. Or you have to set up heavy-handed performance management systems, which can be complicated to use and slow the feedback loop.&lt;/p&gt;

&lt;p&gt;We believe we can make our users happier with a simple, lightweight solution. We want to help teams know what the priorities are, and how they're progressing. Then we get out of the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we treat simplicity as a feature
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Defining a framework to measure simplicity
&lt;/h3&gt;

&lt;p&gt;When you release a new capability, it's reasonably easy to measure its success. You look at the analytics events and compare that with your expectations. It's straightforward to measure the impact of things that are added to a product.&lt;/p&gt;

&lt;p&gt;But when you talk about simplifying things, removing behaviors, it's hard to understand how much you're moving the needle because we lack metrics for that. It's much easier for us to quantify outcomes (how many users signed up) than processes (how much effort did it take for the user to sign up).&lt;/p&gt;

&lt;p&gt;Rather than coming up with a complicated formula, we decided to look at 2 things in our case:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How many clicks does it take to complete a step?&lt;/li&gt;
&lt;li&gt;How many times do you switch context?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We then weighted both actions and decided that a context-switch would be 3 times as painful as a click. This is purely arbitrary and could be debated, but the goal was to reflect that having to go from one screen to another is much more annoying than clicking around the same page. So we end up with this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Friction Index = Clicks + 3 x Context-switches&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Defining the user flow
&lt;/h3&gt;

&lt;p&gt;Once we had the framework, we had to pick a user flow to measure. We did not want to stop at the bare minimum after signing up. Repeating some core actions would give us a better understanding of what our users go through.&lt;/p&gt;

&lt;p&gt;If you stop at one instance of each action, you can easily be under the illusion that your process is good enough. But if creating a page takes a dozen clicks, it will quickly become a pain if it's a task performed often in your product.&lt;/p&gt;

&lt;p&gt;So our scenario was the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A user (you) wants to sign up for Squadlytics to give it a try with 2 colleagues, Joe and Jane.&lt;/li&gt;
&lt;li&gt;They want one project with 2 goals (1 for themselves, 1 for Joe).&lt;/li&gt;
&lt;li&gt;They want a sub-project with 2 sections and 3 goals (1 for themselves, 1 for Joe, 1 for Jane).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This flow would allow us to cover the signup, onboarding, goals creation and invites. It does not take into account the second user experience on purpose as we're focused on the first user.&lt;/p&gt;

&lt;h3&gt;
  
  
  Establishing the baseline
&lt;/h3&gt;

&lt;p&gt;We measured our Friction Index (FI) 2 weeks ago, and the results are below. Note that we counted the max number of clicks instead of going for the optimal path. By that, I mean that even when you could press enter to submit a form, we would use a click to submit it instead. &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Clicks&lt;/th&gt;
&lt;th&gt;Context-switch&lt;/th&gt;
&lt;th&gt;Context-switch weighted (x3)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Signup&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Email confirmation&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Create your profile&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Create your workspace&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Create your first project&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Create goal for yourself&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Create goal for Joe&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Create sub-project&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Create goal for yourself&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Create goal for Joe&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;Create new section&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Create goal for Jane&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Total&lt;/td&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Honestly, when I saw these numbers for the first time I couldn't believe that it was taking 65 clicks and 18 screens to go through this simple flow. 🤯. Here's another way to see that data: each step circle is proportional to the number of clicks or screens involved.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fzorythc6ovugcnux7sc6.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fzorythc6ovugcnux7sc6.png" alt="old-friction"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That really made me feel bad, but we had something to work with. Our FI was 119 and we needed to reduce that number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Things we did to improve the user experience
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Reduce context-switching
&lt;/h3&gt;

&lt;p&gt;It's generally useful to take the user through a step-by-step process the first time they use your products. But it can quickly become painful if you keep that heavy flow for repetitive actions.&lt;/p&gt;

&lt;p&gt;One example for us was the creation of new projects where we were taking you to a project form, and then back to the newly created project. We changed our approach to automatically generate the project as soon as you'd hit the &lt;code&gt;create&lt;/code&gt; button. You could then edit the project title and other settings directly from the page itself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Better inline-editing
&lt;/h3&gt;

&lt;p&gt;A great thing about spreadsheets is that you can just click on a cell to update its value. This is far much easier than having to show up an entire form with multiple entries when the user only wants to change one parameter.&lt;/p&gt;

&lt;p&gt;We implemented inline editing in our project view so that you could change most of the goals, sections and project parameters without having to go to another screen or trigger a popup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pick defaults values
&lt;/h3&gt;

&lt;p&gt;Instead of always asking the user to fill in all the fields when creating goals, we would keep the previous values entered for the owner, score and deadline. That helps reduce the number of clicks required when creating multiple goals in a sequence as there a high chance that some of these values stay the same.&lt;/p&gt;

&lt;h3&gt;
  
  
  Focus on the right fields
&lt;/h3&gt;

&lt;p&gt;A lot of the clicks were wasted on clicking on the first field of a form. We switched to auto-focus wherever it made sense. Once again it may look like nothing, but at scale it can become a UX burden.&lt;/p&gt;

&lt;h2&gt;
  
  
  The result
&lt;/h2&gt;

&lt;p&gt;After 2 weeks of work, this is how the metrics improved.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Clicks&lt;/th&gt;
&lt;th&gt;Context-switch&lt;/th&gt;
&lt;th&gt;Context-switch weighted (x3)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Signup&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Email confirmation&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Create your profile&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Create your workspace&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Create your first project&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Create goal for yourself&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Create goal for Joe&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Create sub-project&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Create goal for yourself&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Create goal for Joe&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;Create new section&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Create goal for Jane&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Total&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Our new Friction Index is 84, which is a ~30% improvement on the previous experience. It still too much if you ask me, and a lot of that has to do with the email confirmation step. But I'm super happy to see that we cut in half the cost of creating goals and projects since it's something that people will often do with the product.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F2oxpyj0qy34qmuq4wl99.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F2oxpyj0qy34qmuq4wl99.png" alt="new-friction"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Visually we can see that fewer steps involve switching context and we reduced the number of clicks in many places.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fck8et4hqrbt0mgbnq61l.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fck8et4hqrbt0mgbnq61l.png" alt="old-vs-new"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Data doesn't tell all the story
&lt;/h2&gt;

&lt;p&gt;It's important to not blindly look at the numbers and set lofty goals without understanding context. If you look at the absolute numbers, it removes all the complexity of the user experience, and it doesn't help understand the investment required to keep things simple.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ffqb5rpjnm68feu3e1n45.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ffqb5rpjnm68feu3e1n45.png" alt="old-vs-new-comparison"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's important to dig into the details and look at what's happening in each step. In our case, we have highlighted the email confirmation step. That's because it means we lose control of the experience at that point and things can be much worse than what we think.&lt;/p&gt;

&lt;p&gt;Another thing is that a lot of the ideas to reduce friction came from talking to our users and observing them working with the product. Sometimes you can't cut corners, and it's better to have a couple more clicks, screens or steps to explain the value of your product. Other times you'll notice that you created new pains without realizing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enabling users to do more with less effort
&lt;/h2&gt;

&lt;p&gt;As I said in the intro, simplicity is a crucial feature for us. It's how we distinguish ourselves from the market, and it's essential for us to make sure we're helping our customers to get more things done faster.&lt;/p&gt;

&lt;p&gt;If anything, I hope that this post will encourage you to take a look at your product and try to measure your own friction index.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://squadlytics.com" rel="noopener noreferrer"&gt;Squadlytics&lt;/a&gt; is a continuous feedback platform that helps teams keep projects on track. We remove friction from sharing goals and make updates easy to do.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
    </item>
    <item>
      <title>A simple tool to promote trust in your company culture</title>
      <dc:creator>Sten</dc:creator>
      <pubDate>Fri, 21 Sep 2018 07:28:59 +0000</pubDate>
      <link>https://forem.com/tability/a-simple-tool-to-promote-trust-in-your-company-culture-5877</link>
      <guid>https://forem.com/tability/a-simple-tool-to-promote-trust-in-your-company-culture-5877</guid>
      <description>&lt;p&gt;A week ago I wrote a &lt;a href="https://dev.to/squadlytics/focus-on-outcomes-not-hours-spent-in-the-office-1mhb"&gt;blog post&lt;/a&gt; about switching to a trust-based culture that seemed to have resonated with the dev.to community. This was a bit unexpected, and a few people ended up signing up for our service after reading that blog post. So today, I thought I'd be a bit more formal and explain why, what and how we're building Squadlytics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the why
&lt;/h2&gt;

&lt;p&gt;Over the past couple of years, technology has significantly evolved to give us more flexibility. Collaboration tools enable async work, Slack helps us stay connected, conf calls are easier than ever. The need to be in the same space at the same time to work is fading away, and people are rightfully looking for better work arrangements.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fwsaxt2k2wphfq9vnzuf2.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fwsaxt2k2wphfq9vnzuf2.png" alt="Employees want flexibility, not ping-pong tables"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Remote work and flexible hours are becoming the ultimate perks that companies can offer to attract and retain talent. On top of that, it's also a great way to support people that can't do 9 to 5 and level the playing field. The traditional organization with complex layers of management is disappearing in favor of smaller autonomous teams that can execute better and faster. But that means that we need new tools to promote the vision of the company and make sure that we're all working towards the same goals.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's the easiest way to keep projects on track?
&lt;/h2&gt;

&lt;p&gt;Here's a classic scenario. You meet with your team a couple of weeks before the beginning of the quarter and do a few intensive workshops to decide what your goals are. Everybody is aligned, and now you go to get sh*t done. But after a few weeks, barely anyone can remember the objectives that were set. Focus starts drifting away.&lt;/p&gt;

&lt;p&gt;The easiest way to prevent that is to repeat the strategy, repeat the goals, early and often. It sounds boring, I know, but it's effective. Everybody gets busy, and many unforeseen problems will pop on our roadmap. That is why we need periodic reminders of the "why"s because it's really hard to be both solving a problem and thinking about why it's there.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fw5s0oy6k0oi2a1h3sccj.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fw5s0oy6k0oi2a1h3sccj.jpg" alt="This is why you should not interrupt a programmer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What we've built to help with that
&lt;/h2&gt;

&lt;p&gt;We started Squadlytics to help teams switch to a better work culture which would empower people to achieve goals. And what we ended up building is a tiny, lightweight reminder engine.&lt;/p&gt;

&lt;p&gt;I know, it sounds silly.&lt;/p&gt;

&lt;p&gt;But we wanted to achieve a few things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep the tool simple so that it doesn't become a chore.&lt;/li&gt;
&lt;li&gt;Make it accessible to everyone in the organization and avoid domain-specific language.&lt;/li&gt;
&lt;li&gt;Make it easy to share with other teams.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, in a nutshell, Squadlytics is a goal tracking platform that sends reminders to make sure that (a) you know your goals and (b) you know how much progress you've made and (c) you know your team/company priorities.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fd51ezm0dghnaw203jt2h.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fd51ezm0dghnaw203jt2h.png" alt="Squadlytics dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To use Squadlytics you just need to do the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a project&lt;/li&gt;
&lt;li&gt;Set some goals with owners&lt;/li&gt;
&lt;li&gt;Add update every week (or month/quarter)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We kept the updates super simple, using traffic lights colors to indicate if you're on-track, at-risk or off-track.&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fix5t3kn0yxk54atjmai5.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fix5t3kn0yxk54atjmai5.png" alt="Squadlytics update"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last but not least, we have a bot that will chime in to send you reminders, and that will downgrade the status of your goals if you forget to update them 😬. We're still experimenting with this, but we're trying to add built-in mechanics to help keep teams accountable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sign up for our beta today
&lt;/h2&gt;

&lt;p&gt;While there's still a lot for us to do I'm super proud of what we've done so far. Tracking goals is only the tip of the iceberg for us, and we aim to promote better ways to work.&lt;/p&gt;

&lt;p&gt;You can sign up at &lt;a href="https://app.squadlytics.io" rel="noopener noreferrer"&gt;https://app.squadlytics.io&lt;/a&gt;, and don't hesitate to add a comment or email me at &lt;a href="mailto:sten@squadlytics.com"&gt;sten@squadlytics.com&lt;/a&gt; if you have any questions.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;(you can also check the main website at &lt;a href="https://squadlytics.com" rel="noopener noreferrer"&gt;https://squadlytics.com&lt;/a&gt;)&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Focus on outcomes, not hours spent in the office</title>
      <dc:creator>Sten</dc:creator>
      <pubDate>Wed, 12 Sep 2018 15:50:18 +0000</pubDate>
      <link>https://forem.com/tability/focus-on-outcomes-not-hours-spent-in-the-office-1mhb</link>
      <guid>https://forem.com/tability/focus-on-outcomes-not-hours-spent-in-the-office-1mhb</guid>
      <description>&lt;p&gt;There are many blessings in being a remote team, but one that I like particularly is that you can't check over your shoulder to see who's in the office.&lt;/p&gt;

&lt;h2&gt;
  
  
  Empower people with goals
&lt;/h2&gt;

&lt;p&gt;If you focus on hours, you'll get what you want: people will show up on time, and leave after you. But you're promoting the wrong thing. You're signaling that it's more important to be around than to create something that matters. The primary drive for giving people an expected set of office hours is because you're deriving a certain amount of value from it - if I ask the team to work from 9 to 5, then we will be able to achieve &lt;em&gt;this much&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;A better approach is to go the other way around. If you give clear goals and give people the means to achieve them, then it doesn't matter how they organize their agenda as long as they deliver what everyone agreed on. That's especially important if you want to be more inclusive as not everyone can give you a straight 8 hours day.&lt;/p&gt;

&lt;p&gt;Another thing that happens is that you will scale your ability to delight your customers. When people are given goals instead of tasks, they care more about the outcome. There may be times when you'll look at the solution and will believe that you had a better idea. But if you give people room to make mistakes, then you give them room to grow. And it won't be long before your team starts moving much faster, while you can focus on other things.&lt;/p&gt;

&lt;h2&gt;
  
  
  Negative outcomes are valuable too
&lt;/h2&gt;

&lt;p&gt;One rebuttal for focusing on outcomes is that it can be understood as ignoring effort. But a negative result is still a result. Building a product can be seen as an iterative process that consists in being less wrong about what people want over time. &lt;/p&gt;

&lt;p&gt;Bad outcomes should be accepted as long as you learn from them. You should always do a post-mortem on projects, and try to understand what went wrong. It can be that the concept was poorly defined, that you didn't have enough resources, that external factors impacted the timeline, and yes, sometimes it will be because someone did a poor job. But more often than not, there will be many reasons why you didn't get the expected results, and it's rarely the fault of a single individual. So learn, fix, and repeat.&lt;/p&gt;

&lt;h2&gt;
  
  
  Embrace a remote team culture, even if you're in the same office
&lt;/h2&gt;

&lt;p&gt;Remote teams are forced by nature to document things, to communicate more, to be open. But more importantly, remote teams have to build trust and discard micro-management in favor of creating a strong culture where the vision, values, and goals are shared broadly.&lt;/p&gt;

</description>
      <category>productivity</category>
    </item>
    <item>
      <title>Get your end-to-end pipeline ready before coding any features</title>
      <dc:creator>Sten</dc:creator>
      <pubDate>Fri, 31 Aug 2018 09:20:34 +0000</pubDate>
      <link>https://forem.com/tability/get-your-end-to-end-pipeline-ready-before-coding-any-features-57oi</link>
      <guid>https://forem.com/tability/get-your-end-to-end-pipeline-ready-before-coding-any-features-57oi</guid>
      <description>&lt;p&gt;When you get a great idea (and after it's been validated), the next thing is to start building your MVP. But instead of implementing any of the required features, it's best to begin by shipping a "Hello World" to production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Late deployment pipelines are costly
&lt;/h2&gt;

&lt;p&gt;A lot of teams have adopted Continuous Integration because it allows them to move faster. By integrating the work of everyone early and often into the mainline, you reduce the risk of conflicts and you make it trivial to understand what is breaking.&lt;/p&gt;

&lt;p&gt;The same thinking needs to be applied to deployments. Every week you're going to be solving small configuration problems. Missing dependencies, env variables, service configuration, monitoring tools... As you add more features to your software, you will also increase the amount of configuration required for it to work. If you wait until you're satisfied with your local tests to release your app then you're likely to spend a significant amount of time figuring out how to set things up in a public environment.&lt;/p&gt;

&lt;p&gt;The better approach is to start with your classic "Hello World" and to ship that in what will be your production. It doesn't matter if it's on mobile, desktop, web. Just make sure that you know how to deploy what you're building. And then deploy your work early and often, every day if you can.&lt;/p&gt;

&lt;p&gt;You will drastically reduce the risk of releasing and, while it looks like slowing down at the beginning, it will make you move faster. Some platforms have hard constraints on what you can ship, and you want to figure that out right from the start instead of having to refactor your code down the line.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ship early, get more feedback
&lt;/h2&gt;

&lt;p&gt;Now here comes the real benefit. We tend to vastly overestimate how finished our work has to be before we can show it to others. So we keep adding features after features. And then at some point, we judge it ready and put it somewhere where others can play with it.&lt;/p&gt;

&lt;p&gt;Having your application being accessible early will help a lot to fight that tendency. Of course, it's best to keep things private until you can safely onboard people, and there are many ways to do it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Private URLs&lt;/li&gt;
&lt;li&gt;Password protection&lt;/li&gt;
&lt;li&gt;Unlist your app on marketplaces&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the point is that you want to be able to pull out your phone or your laptop at any moment and show what you're working on. The more feedback we get, the better we can make our products. And this is also a great way to get early adopters.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
    </item>
    <item>
      <title>Build stories, not features</title>
      <dc:creator>Sten</dc:creator>
      <pubDate>Wed, 15 Aug 2018 20:18:31 +0000</pubDate>
      <link>https://forem.com/tability/build-stories-not-features-2cjl</link>
      <guid>https://forem.com/tability/build-stories-not-features-2cjl</guid>
      <description>&lt;p&gt;We all want our data to be protected. And one way to solve that problem is to have a password-protected account, but no one gets excited at the idea of having another set of credentials to manage. Being safe is the &lt;em&gt;story&lt;/em&gt;, and having a password is the &lt;em&gt;feature&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stories vs. Features
&lt;/h2&gt;

&lt;p&gt;Almost every capability in applications can be described as a feature. You create an account, add content, connect with your friends, etc. Apps are made of dozens, hundreds, or even thousands of pieces that interact with each other to help users achieve particular goals.&lt;/p&gt;

&lt;p&gt;Yet, it is important to think at an abstract level if we want to be successful at delivering great experiences. We need to frame our vision high enough that there can be many possible answers to the problems we're trying to solve. And those answers will end up being the features that we implement.&lt;/p&gt;

&lt;p&gt;If we look at &lt;a href="https://www.shopify.com/" rel="noopener noreferrer"&gt;Shopify&lt;/a&gt; for instance, they do an excellent job on their website of emphasizing their stories, and then listing the related features beneath.&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%2Fblog.squadlytics.com%2Fcontent%2Fimages%2F2018%2F08%2Fstory_vs_features.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%2Fblog.squadlytics.com%2Fcontent%2Fimages%2F2018%2F08%2Fstory_vs_features.png" alt="story_vs_features"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The story:&lt;/strong&gt; you can control your brand&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The features:&lt;/strong&gt; custom domains, themes, customizable CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A simple way to move up the ladder when you have a feature in mind is to use the &lt;a href="https://en.wikipedia.org/wiki/5_Whys" rel="noopener noreferrer"&gt;5 Whys&lt;/a&gt;. It'll naturally force you to go back to the root issue that you need to address. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why it matters
&lt;/h2&gt;

&lt;p&gt;We always have a plan. But many things can delay or halt projects. It might be poor management, some unforeseen technical constraint, or difficulties in syncing multiple streams of work. So, you'll need flexibility if you want to keep delivering value to your users. If you're using agile methodologies, it will help you realize faster when you're off-track. But that's only helpful if you can then act on that information.&lt;/p&gt;

&lt;p&gt;Having an overarching story guiding your roadmap will make it easier to change scope or switch priorities. In the case of Shopify one goal is to help customers bring their brand with them. There's plenty to chose from if one particular feature happens to be more complicated than expected. You can still fulfill the original goal while changing the set of capabilities delivered to the users.&lt;/p&gt;

&lt;p&gt;Thinking in terms of stories will also help you be more creative in your solutions. Today we can just look at our phones to unlock them - we use our faces as passwords, and there's no need to type things in anymore. Of course, we had to wait for the right technology to be available. But it is also because someone took a higher perspective to look at the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stories are powerful
&lt;/h2&gt;

&lt;p&gt;At Squadlytics we spent a lot of time early on to define what our purpose was: &lt;strong&gt;&lt;em&gt;to help teams keep the pulse on their projects&lt;/em&gt;&lt;/strong&gt;. We shipped some pretty cool things while going through our first iteration. But we soon realized that it was not going in the right direction.&lt;/p&gt;

&lt;p&gt;I'm quite sure that without that vision we would have been stuck with our heads down, shipping features after features, and creating a solution in search of a problem. Instead, we were able to go back to the drawing board and &lt;a href="https://blog.squadlytics.com/tag/beta/" rel="noopener noreferrer"&gt;design a much better platform&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Stories will clarify your message, and narratives are far more persuasive and inspiring than a long list of capabilities.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Local development with HTTPS on OSX</title>
      <dc:creator>Sten</dc:creator>
      <pubDate>Sun, 15 Jul 2018 14:50:48 +0000</pubDate>
      <link>https://forem.com/tability/local-development-with-https-on-osx-1jpb</link>
      <guid>https://forem.com/tability/local-development-with-https-on-osx-1jpb</guid>
      <description>&lt;p&gt;A good rule of thumb in software development is that you should try to be as close as possible from your production environment. Doing so helps you avoid common mistakes due to discrepancies between your local dev setup and your prod configuration. Containers are really helpful to mitigate some of the dependencies issues, but one thing that has always been a PITA for me is using HTTPS for local development.&lt;/p&gt;

&lt;p&gt;At Squadlytics we have a React app for our UI and a Rails API backend where we force the use of SSL. We've tried many things to find an easy way to use HTTPS for local development, and we finally found a solution using a proxy and dnsmasq. I'll share here how we're doing things, but first, let me present you the alternatives that we explored.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 1: Generating certificates ourselves
&lt;/h2&gt;

&lt;p&gt;We started by looking at generating our own certificates for local development.  First, you need to create your own Certificate Authority. Then you use that entity to build your development certificates.&lt;/p&gt;

&lt;p&gt;There's a &lt;a href="https://deliciousbrains.com/ssl-certificate-authority-for-local-https-development/"&gt;great tutorial&lt;/a&gt; written by Brad Touesnard that you can read if you want to go down that path. It looked great at the beginning, but it started to become cumbersome when we had to figure out custom starting scripts for the backend and the frontend to use the right certificates.&lt;/p&gt;

&lt;p&gt;We had to do a few different takes to get it right, and we ended up looking for a simpler solution where we wouldn't have to manage the certificates ourselves.&lt;/p&gt;

&lt;p&gt;Pros: Once it's done it just works.&lt;br&gt;
Cons: A bit hard to setup and manage.&lt;/p&gt;
&lt;h2&gt;
  
  
  Option 2: Using &lt;a href="https://ngrok.com"&gt;ngrok&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;If you're not yet using ngrok chances are that you'll need it sooner or later. It's a neat tool that allows you to create tunnels to expose your local dev machine to the web. The typical use case is to test webhooks, but you can also reserve your domains and generate SSL tunnels to your dev environment with either a subdomain (&lt;a href="https://subdomain.ngrok.io"&gt;https://subdomain.ngrok.io&lt;/a&gt;) or use your own dev domain for it (&lt;a href="https://api.squadlytics.dev"&gt;https://api.squadlytics.dev&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;It minimized the configuration on our side. You only need to install ngrok to get it working - and you won't be getting certificate errors in your browser.&lt;/p&gt;

&lt;p&gt;But problems start if you need to share dedicated URLs. For instance, if your backend API is accessible at &lt;a href="https://api.ngrok.io"&gt;https://api.ngrok.io&lt;/a&gt;, you can only tunnel this URL to one local dev machine. To my knowledge, you'd have to reserve custom domains for each developer to solve that problem (&lt;a href="https://api.john.ngrok.io"&gt;https://api.john.ngrok.io&lt;/a&gt;, &lt;a href="https://api.jane.ngrok.io"&gt;https://api.jane.ngrok.io&lt;/a&gt;) and probably do some tricks in your code to support that. On top of that, every request needs to go through ngrok which slows down development and prevents you to code while being offline.&lt;/p&gt;

&lt;p&gt;So we ditched ngrok as it would not scale for our local SSL dev issue. I want to emphasize here that it's a great tool, and it's mostly our fault for trying to stretch it too far.&lt;/p&gt;

&lt;p&gt;Pros: easy to get started, great for testing webhooks&lt;br&gt;
Cons: slow for development, doesn't scale for continuous use&lt;/p&gt;
&lt;h2&gt;
  
  
  Option 3: local-ssl-proxy + dnsmasq
&lt;/h2&gt;

&lt;p&gt;We looked back at the constraints we had for local development to simplify our problem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We needed to be able to hit specific domains for the API and authentication.&lt;/li&gt;
&lt;li&gt;We were using subdomains for workspaces (à la Slack) and therefore required to access a wide range of subdomains locally.&lt;/li&gt;
&lt;li&gt;We needed all the requests to be done via HTTPS.&lt;/li&gt;
&lt;li&gt;We wanted to have something quick to set up for extra services, and easy to install for new developers.&lt;/li&gt;
&lt;li&gt;Being able to code offline would have been a big plus.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With these goals in mind, we settled for a simple solution using a proxy server and a custom local DNS server.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;a href="https://github.com/cameronhunter/local-ssl-proxy"&gt;local-ssl-proxy&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;local-ssl-proxy is a npm package that starts a simple SSL HTTP proxy using a self-signed certificate. We created a small configuration file to map the Rails backend and the React frontend to different ports for SSL.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "Rails backend": {
    "source": 3001,
    "target": 3000
  },
  "React UI": {
    "source": 8090,
    "target": 8080
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With that configuration, we could use &lt;a href="https://api.squadlytics.dev:3001"&gt;https://api.squadlytics.dev:3001&lt;/a&gt; and &lt;a href="https://acme.squadlytics.dev:8090"&gt;https://acme.squadlytics.dev:8090&lt;/a&gt; to have access to use the platform via HTTPS. No need to create a custom starting script for Rails or figuring out how to pass a certificate to the React app.&lt;/p&gt;

&lt;p&gt;Adding new services would be as simple as adding a new entry in that configuration file.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="http://www.thekelleys.org.uk/dnsmasq/doc.html"&gt;dnsmasq&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;The other problem we needed to solve was to support a wildcard domain to avoid having to create multiple entries in /etc/hosts. Thankfully you can use dnsmasq for that and create a local DNS server with your own rule.&lt;/p&gt;

&lt;p&gt;You can follow the instructions in &lt;a href="https://gist.github.com/ogrrd/5831371"&gt;this Gist&lt;/a&gt; to see how you can set it up on your machine. In our case, we created a bash script to do it all at once.&lt;/p&gt;

&lt;p&gt;You should be careful not to set a wildcard domain for all &lt;code&gt;.dev&lt;/code&gt; domains as this is a real TLD. This is why we've restricted our config to only map &lt;code&gt;.squadlytics.dev&lt;/code&gt; domains to localhost instead of supporting all URLs using &lt;code&gt;.dev&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#!/bin/bash
echo "1. Installing dnsmasq"
brew install dnsmasq
echo "2. Configuring *.squadlytics.dev local domains"
mkdir -pv $(brew --prefix)/etc/
echo 'address=/squadlytics.dev/127.0.0.1' &amp;gt; $(brew --prefix)/etc/dnsmasq.conf
sudo cp -v $(brew --prefix dnsmasq)/homebrew.mxcl.dnsmasq.plist /Library/LaunchDaemons
sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
sudo mkdir -v /etc/resolver
sudo bash -c 'echo "nameserver 127.0.0.1" &amp;gt; /etc/resolver/dev'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Some people recommend using a fake TLD (like .test), but services like Google require real TLDs for OAuth.&lt;/p&gt;

&lt;p&gt;Don't forget to add your localhost as a DNS server in your network settings otherwise it will not work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bypassing the SSL certificate errors
&lt;/h3&gt;

&lt;p&gt;The last step for us is to bypass the certificate errors that will be inevitably thrown by your browsers.&lt;/p&gt;

&lt;p&gt;If you're using Safari, you can just accept to visit the site in the error screen. Just make sure that you do that not only for your UI but also for any API that is used by the client.&lt;/p&gt;

&lt;p&gt;Chrome seems to be much more strict, and to this day I've only managed to bypass the errors by launching Chrome with the &lt;code&gt;--ignore-certificate-errors&lt;/code&gt; flag.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --ignore-certificate-errors &amp;amp;&amp;gt; /dev/null &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I hope this will be helpful to some of you. You can check our config scripts in our repo at &lt;a href="https://github.com/squadlytics/local-ssl-development"&gt;https://github.com/squadlytics/local-ssl-development&lt;/a&gt;. If you have questions or suggestions, please don't hesitate to write a comment.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Photo by &lt;a href="https://unsplash.com/photos/cVMaxt672ss"&gt;Liam Tucker&lt;/a&gt; on Unsplash&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>security</category>
    </item>
  </channel>
</rss>
