<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Scott Kitchell on Medium]]></title>
        <description><![CDATA[Stories by Scott Kitchell on Medium]]></description>
        <link>https://medium.com/@scott-kitchell?source=rss-7ddf0fafbea6------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*3BDzVwWwO8IQz-cQ0n_eLw.jpeg</url>
            <title>Stories by Scott Kitchell on Medium</title>
            <link>https://medium.com/@scott-kitchell?source=rss-7ddf0fafbea6------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 17 May 2026 04:05:30 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@scott-kitchell/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Overachieving Low-level Goals leads to Underachieving Higher-level Goals]]></title>
            <link>https://scott-kitchell.medium.com/overachieving-low-level-goals-leads-to-underachieving-higher-level-goals-7137c1f1753f?source=rss-7ddf0fafbea6------2</link>
            <guid isPermaLink="false">https://medium.com/p/7137c1f1753f</guid>
            <category><![CDATA[personal-development]]></category>
            <category><![CDATA[goals]]></category>
            <category><![CDATA[product-development]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[startup-lessons]]></category>
            <dc:creator><![CDATA[Scott Kitchell]]></dc:creator>
            <pubDate>Wed, 20 Jan 2021 08:51:03 GMT</pubDate>
            <atom:updated>2021-01-20T08:54:35.391Z</atom:updated>
            <content:encoded><![CDATA[<p>Remember the high-achievers at school or university, they’d be stressing and over-studying for a test in a class that they didn’t even need! (I remember, I was one of them).</p><blockquote>“Whatever is worth doing at all, is worth doing well.” — Philip Stanhope, 4th Earl of Chesterfield</blockquote><p>In the workplace however, and especially in software development, this can lead to opportunity costs, over-engineering, complexity, and tech-debt!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oyEEAx1t-pdzP-HEl9cXVQ.jpeg" /><figcaption>One step at a time... Oh there’s an elevator! <a href="https://unsplash.com/photos/bJhT_8nbUA0">Photo by Jukan Tateisi on Unsplash</a></figcaption></figure><p>I witnessed this first hand when a task given to a new team member (let’s call him John) to fix a Xero to Slack integration workflow. Slack notifications were sent to our customer team based on certain invoice conditions in Xero. We previously had it setup running through out backend system — but it had stopped working, so the task was to investigate and fit it.</p><p>John was quick to realise Xero had deprecated an old API and webhooks which we had been using. The new API however wasn’t as easy to get the data we needed. Ideas on how to get around the new API were discussed with other team members — it was an interesting and challenging problem after all. The only solution John and the team could come to was implementing a headless browser, where a scheduled task would programmatically login to Xero through the web UI, navigate to the data, and parse it into a usable format. He did it, and it almost worked! But the time on the task had blown out to almost a week now.</p><p>And here’s the thing. Everyone’s eyes were on the challenge of achieving this one low-level goal, but no one stopped to even ask if the higher-level goal of the Slack messages were even worth it given the cost, or if other solutions could be implemented instead.</p><p>After talking with the customer team, they were happy with a mix of Slack messages through Zapier (a simple integration tool), and emails direct from Xero.</p><blockquote>The lesson I learnt is that overachieving a low-level goal at all cost can lead to underachieving higher-level goals.</blockquote><p>I’m not sure why over-achieving low-level goals is so easy... Maybe we want to be seen doing the best we can in our part? Maybe the parent goal isn’t always well known? Maybe the goal/task is coming from a manager that we don’t want to question? Maybe we are scared of setting back a project to reevaluate the solution? I don’t know.</p><p>I do know what the solution is however. Be more lazy!</p><blockquote>“I choose a lazy person to do a hard job. Because a lazy person will find an easy way to do it.” — Bill Gates</blockquote><p>When something seems hard, look for the bigger picture goal, and see if there’s another way to achieve it, or if it’s even worth achieving at all given the cost. That’s it.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7137c1f1753f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Smart Code sucks, write Dumb Code instead]]></title>
            <link>https://scott-kitchell.medium.com/smart-code-sucks-write-dumb-code-instead-c36d69f33f31?source=rss-7ddf0fafbea6------2</link>
            <guid isPermaLink="false">https://medium.com/p/c36d69f33f31</guid>
            <category><![CDATA[clean-code]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software]]></category>
            <category><![CDATA[mental-models]]></category>
            <dc:creator><![CDATA[Scott Kitchell]]></dc:creator>
            <pubDate>Sun, 25 Oct 2020 23:04:14 GMT</pubDate>
            <atom:updated>2020-10-25T23:25:48.774Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>“Smart Code”</strong> are the lines of code that try and save you or your users time and effort by doing more work than is expected.</p><p>As a hypothetical example, imagine an Article class that has a method named publish(), and it works like this: First it autocorrects any spelling mistakes, and then sets the status to &quot;published&quot;. This ensues writers always appear professional. Cool, right?</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/5006605acff42da65141d7dcfc549f8e/href">https://medium.com/media/5006605acff42da65141d7dcfc549f8e/href</a></iframe><p>Not so fast. Imagine you’re the one writing an article for other developers. After hours you’re happy with it, and you click publish. Suddenly the published version shows all the camelCase variable names you wrote with spaces and in a different case. What a pain! You quickly go back to the editor, fix the errors, and hit publish again. But it autocorrects it again! Mildly fuming, you hit unpublish, and spend the next three months building your own blogging platform.</p><figure><img alt="Split screen showing minified source code." src="https://cdn-images-1.medium.com/max/1024/1*uJ0hRRJMtUYV1h-FV3L2Dw.jpeg" /><figcaption>Do you also like to look super smart showing unreadable minified source code? Photo by <a href="https://www.pexels.com/@markusspiske?utm_content=attributionCopyText&amp;utm_medium=referral&amp;utm_source=pexels">Markus Spiske</a> from Pexels (dw Markus, we’ve all done it).</figcaption></figure><p><strong>“Dumb Code”</strong> on the other hand are the lines of code that do exactly what you expect them to do, nothing more.</p><p>If our publish() method, was Dumb Code it would simply set the status to &quot;published&quot;. Nothing more.</p><p>This example may seem obvious, but I see issues just like this all the time in my own codebases and in others. Whether we write it to flex our computer science knowledge, save time, save lines, impress our colleagues, or to accommodate that future unspec’d feature that’s just sure to be needed, we’re addicted to writing Smart Code.</p><p>But here’s the thing, Smart Code by definition is unusual code. It’s doing things that were unexpected, or in an unexpected way. This can make it hard to read, to understand, to maintain, and to optimize. It’s also a safe haven for ill-intentioned bugs to hide out.</p><p>You don’t need to write Smart Code to prove yourself. Writing and promoting Dumb Code can show far more wisdom.</p><p>In another example, how about when viewing articles — should we filter out any articles that have empty bodies? Surly the writer doesn’t actually want their unfinished article to be visible by accident? (We’ll get back to this).</p><p>The solution is not just about just having pure functions with no side effects. It’s also not about creating more work for you, or your users. <strong>It’s all about providing control.</strong></p><h3>To write Dumb Code, you have to provide control</h3><p>Dumb code does the exact amount of work that you’d expect it to do.</p><p>If I flick the light switch, it won’t try and adjust the brightness and color to match the room — the light will instantly just turn on, or off. It’s boring, it makes no assumptions, and most importantly I never have to worry about it (Hey Google, you might want to listen in).</p><p>So how do you stop being so damn smart?</p><h4>Live up to your naming</h4><p>To write Dumb Code, start by thinking about the name you’re giving your class or function. If the name is publish, then what would you expect it to do? Would you expect it to autocorrect your work? Remember, <a href="https://levelup.gitconnected.com/the-only-rule-you-need-for-writing-clean-code-532a64df0eff">the only rule you need for writing clean code</a> is to always be referencing a mental model.</p><p>If the function was instead called autocorrectAndPublish, what would you expect it to do? I’d argue you may still have a terrible user experience because the control provided just isn’t granular enough, but it would be Dumb Code because it does exactly what is expected.</p><h4>Don’t make assumptions</h4><p>Being able to realize when you truly know something, and when you’re just assuming something because it’s logical is an incredibly underrated skill to have (in coding and in life). While coding, if you can notice the times when you’re slightly unsure of what to set a value, or whether or not to call some function, it likely indicates you’re about to make an assumption.</p><p>In times like this, you might also think you can infer the value, or figure it out by doing some automated work — but the thing is, you’ll be wrong. Not always, but there will be times where your assumptions won’t be valid, and you’ll be wrong. This will not only produce an annoying UX, but can also cause some of the sneakiest bugs you’ll ever have to deal with.</p><p>Think about a company signup form. We may think it’s a good idea to ask for their web address, so we can scrape their website, determine their industry, and then show relevant content as soon as they enter like magic (it lowers the barrier to entry, and there’s never an initial empty state!) But now imagine what happens if they mistype their address, don’t want to provide one, or just input a fake address to trial your app.</p><p>Stop creating work for yourself and just dumb it down.</p><h4>Prevent problems, rather than intelligently fixing them</h4><p>So you’ve stopped making assumptions in your code — but now you have people complaining because you didn’t assume how to fix their mistakes — and they make a ton of mistakes.</p><p>Let’s go back to the example of adding logic to filter out articles that have an empty unfinished body text. You say, ok I know this is just an assumption that people will want this, so I won’t filter them out. But what if they do want that? How do you fix this without making assumptions?</p><p>You don’t fix it, you prevent it. You can provide control at the root cause of the issue.</p><p>In this case it might be a confirmation box that appears when you go to publish a blank article, or publishing is prevented altogether until some body text exists. That’s Dumb Code, and it prevents you from having to write Smart Code.</p><p>Dumb Code doesn’t make assumptions, it doesn’t do more work than it’s expected to, and it puts control in the hands of the user. <strong>Dumb Code just does exactly what you think it does.</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c36d69f33f31" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why Designers & Developers Frustrate One-Another]]></title>
            <link>https://scott-kitchell.medium.com/why-designers-and-developers-frustrate-one-another-395fd25092ee?source=rss-7ddf0fafbea6------2</link>
            <guid isPermaLink="false">https://medium.com/p/395fd25092ee</guid>
            <category><![CDATA[collaboration]]></category>
            <category><![CDATA[design-systems]]></category>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[ux-design]]></category>
            <dc:creator><![CDATA[Scott Kitchell]]></dc:creator>
            <pubDate>Fri, 09 Oct 2020 02:51:01 GMT</pubDate>
            <atom:updated>2020-10-09T02:51:01.777Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>Why isn’t it easier!?</strong></p><p>Product Designers and Developers both share the same responsibility for creating and maintaining products. We both love to solve people’s problems, and dream of providing that perfect experience to end users. So why can working together seem so frustrating at times. And how can we fix it?</p><blockquote>In the spirit of collaboration I teamed up with my friend <a href="https://medium.com/u/95c14f6c3a15">Lisa Jacquiot</a>, a talented Product Designer to co-write this article!</blockquote><h3>If your product development workflow from research, through design to development looks like an assembly line, you’re going to have a bad time</h3><p>Assembly lines are great for making repeated processes really efficient. The problem is that when we’re developing new things, nothing is a repeated process. Thinking and decision making are not suited to an assembly line robot.</p><p>Doing things like a developer handoff where sketch/figma/pdf/paint files are thrown over the fence from designer to developer indicates you might just have an assembly line on your hands.</p><p>Here’s why. If your researchers pass data and insights to product managers, who pass specs to designers, who pass designs to developers, then you have a system like the game <a href="https://en.wikipedia.org/wiki/Chinese_whispers">Telephone</a>.</p><figure><img alt="Person drawing a picture on someone&#39;s back, which they are replicating on another person&#39;s back. The results are not great." src="https://cdn-images-1.medium.com/max/640/1*fu2IeOvsDfptaQ6csA5IEw.gif" /><figcaption><em>Here’s us doing our best work — </em>Originally seen in <a href="https://twitter.com/riferrei/status/1306915448382984192?s=20">Ricardo Ferreiras Tweet</a></figcaption></figure><p>What’s worse is that you’re also not utilising everyone’s respective skills. Product managers, Designers, and Engineers are all expert problem solvers, but we all come with different perspectives, and think in different ways.</p><figure><img alt="Venn diagram showing the overlap of Design Thinking, Systems Thinking, and Computational Thinking." src="https://cdn-images-1.medium.com/max/820/0*D_ZAjDTY_g9QUSWF" /></figure><p>As soon as any one of us start to think we have all the answers, we’re likely going to miss something.</p><p>The remedy is as expected: Involve each other at the various stages of the product development process.</p><p>Not everyone needs to be a decision maker at every stage — they just need to be involved enough to offer their unique insights, and provide feedback.</p><p>Asking for feedback can be hard because it’s time consuming and our solution is obviously the best anyway, so why even bother, right? Also don’t hurt my feelings please.</p><p>But realistically feedback can save you from going down the wrong path early, and provide insights and constraints that can spark new, vastly better ideas.</p><p>When starting a new project or task, schedule a design-dev (plus anyone relevant with knowledge) meeting, and work on the high level details for what’s possible. Then as a designer, instead of just escaping into that distraction-free, creative, design-utopia, and reappearing with completed designs, organise a few ~30 minute catch ups at different stages of the process.</p><p>Explain the thought-process behind your design decisions, and ask where the difficulties in implementing them might be.</p><p>As a developer, clarify when there’s unknowns, or when a design is far harder than anticipated and why. There might be an easy design solution.</p><p>This helps reduce the discrepancy between designs and the final product and it can build knowledge, and respect for each other’s skillset.</p><h3><strong>Our tools promote pixel perfection — but in different ways</strong></h3><p>It’s not just that designers and developers have different methods of thinking, we also have different tools that don’t always play nicely together.</p><p>Think about a standard login screen. From a designers perspective this is a single view. From an engineers perspective this is a dynamic assembly of individual components.</p><figure><img alt="A designer sees a login screen. A developer sees all the login screen components separately." src="https://cdn-images-1.medium.com/max/1024/1*6pHvJRV-bh9aie-yRMfUHA.png" /><figcaption>Created by Scott, don’t judge Lisa for this one.</figcaption></figure><p>Once coded, the screen to designers might look out of alignment, have the wrong font color, or wrong spacing. And you scream in your head — why can’t you just align the text, and make the colors match my designs. It’s so easy!</p><p>Designers think in terms of pixel distances between elements, while developers think in terms of margins and padding. That’s the way our tools work.</p><p>To the devs, they can look at the design and think: Oh god no, I need to vertically center a div (ok, it’s easy now with flexbox, but just from habit). But what happens when a bigger screen size is used? How about when it’s rotated, or half screen? And there’s an error state missing.</p><p>Let’s say as a designer, you want the page to be responsive to screen sizes. If the tool offers a responsive grid to use. It might just be setting you up to fail since it might not be possible to be coded that way. For example…</p><figure><img alt="Login screen overlayed with responsive grid lines." src="https://cdn-images-1.medium.com/max/414/1*I6PB2EXt9kee7BzQ0d3ORg.png" /></figure><p>And here’s how the UserAvatar in the design above might be created using the popular UI library <a href="https://reactjs.org">React</a>.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/e27fc7d67bdcee15b427a8b6ace499ba/href">https://medium.com/media/e27fc7d67bdcee15b427a8b6ace499ba/href</a></iframe><p>The problem is, although the UserAvatar is inside the LoginScreen component, it doesn’t have access to the grid used by the LoginScreen.</p><p>There’s a mismatch in how our tooling makes us think.</p><p><strong>The solution?</strong> User flows, prototypes, and (again) two-way feedback!</p><p>Design for different screen sizes and orientations: create a list of the most common screen cut-off points based on the device breakdown for your product.</p><p>And don’t leave it up to the dev to connect the dots between still screens. It takes up their time and is error-prone. Provide them with clear flows mapping and connecting the different screens. For interactions — create a quick prototype showing how a page is supposed to load, or how to navigate your app.</p><p>Make a list of different states and produce designs for each state: empty states, first time user states, error states, logged in/out, loading states, partial content.</p><p>And for best results, sprinkle more feedback throughout.</p><h3><strong>Design Systems</strong></h3><p>The “Design System” is the perfect middle ground. Right? Well…</p><p>Yes! If it’s implemented in code. The reason why design systems are great is because it breaks up a product’s interface design into fundamental components, similar to how developers already work. It constrains design components to be consistent</p><p>When this system is implemented in code, for example in a UI component library, designers and developers are talking the same language!</p><p>Designers can use the fundamental components in their designs knowing the features and constraints of doing so. And developers can use the components directly from their prebuilt UI library in the components they build.</p><p>There is a drawback of design systems however. They are a ton of work to create and maintain for both the designers and developers. Seriously, a lot!</p><p>However, if you don’t mind not having a fully custom design system, there are a number of open source design systems such as <a href="https://material.io/">Material Design</a> or <a href="https://bumbag.style/">Bumbag</a> that have accompanying UI component libraries that promote great design practices and accessibility by default.</p><p>That’s it, go forth and build cool stuff together!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=395fd25092ee" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What makes intuitive products intuitive?]]></title>
            <link>https://uxdesign.cc/what-makes-intuitive-products-intuitive-52f52f12c3b5?source=rss-7ddf0fafbea6------2</link>
            <guid isPermaLink="false">https://medium.com/p/52f52f12c3b5</guid>
            <category><![CDATA[ux]]></category>
            <category><![CDATA[design]]></category>
            <category><![CDATA[product-design]]></category>
            <category><![CDATA[user-experience]]></category>
            <category><![CDATA[mental-models]]></category>
            <dc:creator><![CDATA[Scott Kitchell]]></dc:creator>
            <pubDate>Mon, 07 Sep 2020 11:36:33 GMT</pubDate>
            <atom:updated>2020-09-08T12:18:38.125Z</atom:updated>
            <content:encoded><![CDATA[<h4>Who wouldn’t want an intuitive product?</h4><p>Something that is simple to grasp, and easy to use. Something you can pick up with no prior knowledge and be able to utilise to help do whatever you’re trying to get done. Surely everyone wants that! So why on earth are there so few intuitive products?</p><p>The answer I’ve come to is this: <br><strong>I don’t think it’s clear how to design for intuitiveness.</strong></p><p>How do you create intuitiveness? Do you just have to remove features? Can only simple products achieve it? Is it just all about a good onboarding? How about a clean UI? And (after creating some monstrosity<em>),</em> is intuitiveness just overrated — users will learn eventually, right?</p><p>First let me say, intuitiveness is worth it. In a world of seemingly infinite product choices, the first minute of trial usage is probably the most important for the product’s success. If someone understands <em>how</em> they can solve their immediate problem with it, they’ll continue using it until they have a reason not to.</p><figure><img alt="The straightforward UI of a first generation iPhone compared to the impressive but complex UI of a HTC of the same era." src="https://cdn-images-1.medium.com/max/1000/1*Z5LjxeMAR6OhI0mcDqzqIA.jpeg" /><figcaption>The hype around the iPhone baffled me. People talked about the multi-touch display, on-screen keyboard, email, maps, camera, and the sleek casing. But my HTC Touch Diamond already had these things, plus more. So what was the difference? Intuitiveness.</figcaption></figure><p>One thought on intuitiveness is that it equates to minimalism (largely by removing any non-essential features). This might work, but it’s kind of cheating — of course you can stumble upon intuitiveness if there’s only one thing it can do. Too bad it’s also then useless for solving anything but the most simple problems.</p><p><a href="https://uxdesign.cc/@fabriciot">Fabricio Teixeira</a> does go further, breaking intuitiveness down into a foundational set of design principles in his practical article <a href="https://uxdesign.cc/what-intuitive-really-means-12e474722ce8">What “intuitive” really means</a>. But somehow I still felt like I was missing the underlying <em>why?</em>.</p><p>Instead, to answer the question of <em>what makes intuitive products intuitive</em>, you can look to how our brains actually process new things.</p><h3>What happens in our brains when we come across something new?</h3><p><em>If you’ve already read my previous article </em><a href="https://levelup.gitconnected.com/the-only-rule-you-need-for-writing-clean-code-532a64df0eff"><em>Clean Code Is All In The Mind</em></a><em>, you can skip ahead as I’m just copy-pasting this section.</em></p><p>Let’s say you come across a book on a table written by an author you’ve never heard of before. Do you know how to use the book? Of course you do! If the cover looks interesting you’ll pick it up, and you know if you turn it over to the back side (that you have never seen in your life), there will likely be a blurb for you to read. You know that you can open it and there will be paper pages inside. You know you should start from the first outermost page, and read through it, page by page.</p><figure><img alt="A book, with pages flicking over." src="https://cdn-images-1.medium.com/max/1024/1*RHk32VaWB5kVdLxBtkDJOA.jpeg" /></figure><p>So how do you know so much about how to interact with something that you’ve never even seen before? The answer is Mental Models.</p><p>Our brains are exceptionally good at pattern matching, and so when we come across a book, our brains can access an existing mental model based on all the previous experiences we’ve had with books in the past. And it’s this mental model that provides us with a theory on how to interact with the very book in front of us.</p><p>It’s this ability for humans to store, pattern match, and retrieving complex mental models better than any other animal, which gives us our relative super intelligence.</p><h3>Ok, but what is a Mental Model?</h3><p>We can’t store every detail about every single thing we come across in the world as discrete memories inside our little heads. Plus it wouldn’t help much if every time we came across something slightly new and different (for example a new book) we didn’t know how to interact with it.</p><p>Instead, we use mental models. (<em>In the brain these are just a connected set of neurons, and in machine learning these are like a layer of nodes in a neural network — but this isn’t really important</em>). Think of a mental model like a block of knowledge. A theory representing how something in the world works. A small piece of logic.</p><figure><img alt="A rectangular block with the word “Book” labeled on it. Arrows point to it from an annotation labeled  “Single mental model”." src="https://cdn-images-1.medium.com/max/1024/1*J5mkxBtFXTOkx7ee5Qdb7A.png" /></figure><p>Here we can identify the mental model by its shape, but in reality, we can identify our mental models not just by how it looks, but by a sound, smell, or any other combination of senses that make it distinctive. When we see a book, or hear the word “book”, our minds immediately go to the index for the mental model we have for books.</p><p>On closer inspection, a mental model also contains the related knowledge on each part making it up — mental models within mental models!</p><p>If it helps, you can also think of them like folders in your computer, or like Lego bricks stacked into small models.</p><figure><img alt="The rectangular block with “book” labeled on it is broken up into peices such as “title”, “contents”, and “pages”." src="https://cdn-images-1.medium.com/max/1024/1*yPRdM7T93h6pyoJCrEZKgw.png" /></figure><p>However, the power of mental models isn’t in how they store our knowledge, but rather how they help us to solve problems. When we have a job to be done, it’s as if we have a hole in our understanding of how to move forward. The job needs to be filled with the knowledge of how we can get it done.</p><p>To fill this hole, we can experiment through stacking mental models together in our mind like Lego bricks, until we get something that fills it in an effective way.</p><figure><img alt="A row of blocks fill a hole labeled “serve dessert”, each representing parts of a recipe book needed to help make a dessert." src="https://cdn-images-1.medium.com/max/1024/1*4kdy0zfhFNhGGvq7-LVZWQ.png" /></figure><p>Keep in mind, people’s ability to experiment with their mental models varies person to person. If you’re a creative problem solver, this may be easy, but many people may need solutions to be more obvious.</p><blockquote>A side note here is the role of marketing. If potential users don’t have a mental model representing your product, then how can they experiment with it in their mind to work out how it could help them solve their problems. Their existing ideas (mental models) on how to complete a job have to be pretty bad for them to realise that maybe they don’t yet know the best solution and to commit to doing more work searching for a better one.</blockquote><blockquote>Marketing promoting an accurate mental model for your product can give people an alternative solution to experiment with, and could save them time and effort in finding you or your competitors. Creative, entertaining, and high quality marketing material likely have little to do with it though.</blockquote><h3>Back to intuitiveness</h3><p>The thing to remember about mental models is that they’re just your theories on how things work, and they’re often wrong.</p><p>Magic, jokes, and optical illusions often play on this in a lighthearted way to trick your brain into initially using the wrong mental model, so that the punchline can surprise you. This can be fun, but since we need to use mental models to solve problems, using the wrong mental models can also breed confusion, and a lack of confidence in using a product.</p><p>Because of this, products that either promote an inaccurate mental model, or require a complex set of mental models to fully comprehend will be unintuitive to use.</p><blockquote>Intuitiveness can be created by designing every part of a product in reference to a mental model, and then promoting the mental model through the UI and marketing.</blockquote><p>In other words, keep the complexity of the mental models required to a minimum, and add affordances in the UI<strong> </strong>and you’ll have an intuitive product.</p><p>For example, if you think of the pre-iPhone smartphones (like the HTC shown above), they required a multitude of mental models to understand. There were various menus, sliding tabs that all had different “fancy” UI, and worst of all, the same functionality was often duplicated in different places with different UI (Windows Mobile contacts, or HTC TouchFLO 3D contacts tab).</p><p>I loved the HTC as it was something to explore, but most people don’t like to explore their tech, they just want it to help them.</p><p>The iPhone changed this. It didn’t require you to have a mental model for each menu, each UI, and for various similar programs.</p><p>It’s was simply a menu of apps — each with their own functionality contained within it. Want to do something, anything at all? It’s always the same. Look for the app that does it, and open that. Even the settings was just an app. Because of this anyone, not just the tech-savvy, could understand <em>how</em> the device could be used to help solve their problems.</p><p>All the apps had a similar UI too, and (if you remember skeuomorphic design) they often even looked like how they do in the real world. This helped users retrieve their existing mental models so they could predict how to use the new device.</p><figure><img alt="The original iOS notepad UI similar to real lined paper, compared to a more recent minimalistic flat design." src="https://cdn-images-1.medium.com/max/512/1*bcwCTT2Yuzyo2CVGrKpB4Q.png" /><figcaption>Image from Jim McKeeth’s article <a href="http://delphi.org/2014/01/skeuomorphic-no-more/">Skeuomorphic No More</a>. If the OG iPhone used flat design, would people have known where to tap to start writing a note?</figcaption></figure><blockquote>Another side note. Interesting to see the use of widgets on the iPhone home screen now. Android have had them for a long time with mild success. Just apps no more.</blockquote><h3>But existing users find it intuitive…</h3><p>Once you know the mental model for a particular product or feature, no matter how unintuitive it was at first, you’ll believe it’s logical. This can be a problem if you’re familiar with your product.</p><p>For example most idioms like “<em>happily ever after</em>” don’t have an intuitive meaning anymore, and so you likely have a mental model just for this phrase (does <em>sadly ever before </em>make much sense?). Those learning english might say it’s unintuitive.</p><p>Mental models are literally the logic within our heads, so if it’s in there, you’ll see the logic in it. From the outside however, others will not. Unintuitive mental models are like irregular looking blocks — They don’t fit well with other mental models which makes them harder to remember, and problem-solve with.</p><figure><img alt="A block labeled “book”, but with one of its parts labeled “Method of purchase” extruding awkwardly from the side of it." src="https://cdn-images-1.medium.com/max/1024/1*5bXftoos8xHrje3w1Z_n-g.png" /><figcaption>If this were Lego, it wouldn’t be too easy to build with.</figcaption></figure><p>If you can recognise the mental models your users require to understand your product, you’re on the right track. If you find that they’re complex, or they’re not consistent with the mental models your UI and marketing promote, you have an opportunity to increase the intuitiveness. Another easy way to know — just ask your <strong>new</strong> users what they think.</p><p>Recognising the complexity of the mental models people require to understand a product is the path to understanding intuitiveness.</p><p>Intuitiveness can be created by designing every part of a product in reference to a mental model, and then promoting the mental model throughout the UI and marketing.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=52f52f12c3b5" width="1" height="1" alt=""><hr><p><a href="https://uxdesign.cc/what-makes-intuitive-products-intuitive-52f52f12c3b5">What makes intuitive products intuitive?</a> was originally published in <a href="https://uxdesign.cc">UX Collective</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Upside-Down Org Chart]]></title>
            <link>https://scott-kitchell.medium.com/the-upside-down-org-chart-a3c95b7c7a7b?source=rss-7ddf0fafbea6------2</link>
            <guid isPermaLink="false">https://medium.com/p/a3c95b7c7a7b</guid>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[management]]></category>
            <category><![CDATA[management-and-leadership]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Scott Kitchell]]></dc:creator>
            <pubDate>Mon, 17 Aug 2020 05:40:09 GMT</pubDate>
            <atom:updated>2022-10-09T09:23:43.927Z</atom:updated>
            <content:encoded><![CDATA[<h3>Great Managers Flip Their Org Chart</h3><p>Org charts are hierarchical diagrams usually showing “upper management” at the top and then branching down to their direct reports, and so on. The CEO/boss makes the decisions and the control flows down. Does this sound accurate to you?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RoI7E5Qzquzs6274Q3OGNQ.jpeg" /><figcaption>Classic org chart</figcaption></figure><p>While this is accurate, it doesn’t promote a healthy frame of thinking for employees at any level. <strong>It promotes the idea that to progress you have to <em>climb</em> on top of others, rather than to <em>support</em> others.</strong></p><p>This is where the upside-down organisational chart comes in. It flips the frame of reference. All employees sit above the CEO/boss! With this view it’s also possible to add customers (who sit at the very top), and products into the chart to show the full hierarchy of support.</p><blockquote>The upside-down organisation chart promotes the idea of <strong>growing strong</strong> enough to get behind and support others, rather than climbing up over them.</blockquote><p>An example of this in practice is the Australian supermarket giant Coles, that instead of having a ‘<em>Headquarters’</em>, have a ‘<em>Store Support Center’</em>. Everyone’s job in the support center isn’t to control and direct the hundreds of stores, but rather to support the stores, so that each can then better support customers in their grocery shopping.</p><h3>So, how does it work?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tnBzf4qvnDRevwSD4M6ZSQ.jpeg" /><figcaption>Am I doing it right?</figcaption></figure><p>Let’s use a hypothetical. Suppose you’re launching an exciting new company. First there is just you, but you work hard work and you get your first customers!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/131/1*LydeZzRq_S0YiovleTTnVg.png" /></figure><p>In this view, you are <strong>supporting</strong> your customers directly. You’re not working out how to <em>extract value from them</em>, you are working out how to best<em> support them</em> (and then how to share a portion of the extra money you’re helping them make/save!)</p><h4>Add a Product</h4><p>Some time later your workload has increased and you have a great idea. Use tech to help support even more customers. And so you introduce a product into the market.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/265/1*Imv9SEjXZnJCZqCaaCZd9Q.png" /></figure><p>With the upside-down org chart you can see that your product is now supporting many of your customers, and your job is to support your product. You’ve moved down! 👏</p><h4>Add a Team</h4><p>Ok, so your customers are really appreciating the support they’ve been receiving in helping to get their jobs done, and business is growing. You decide you need to hire a team!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/277/1*LyLlfyK2AuDetKq4W_Y8gg.png" /></figure><p>In this view, you can see that your main concern is not supporting your customers anymore, it’s actually supporting your team! I’ve written about this before in <a href="https://medium.com/@scott.kitchell/what-ive-learnt-after-a-year-founding-a-tech-company-b2ba441abe53">What I’ve learnt after a year founding a tech company</a>.</p><p>While this is overly simplistic, it can go on to contain as much detail about people and various departments as is useful.</p><p>You don’t have to be in “upper management” to gain a fresh perspective from an upside-down org chart, and it doesn’t have to be an official chart as long as you can visualise how it works.</p><p>Great managers at any level are those that support their team, and push them higher! Great contributors also know that it’s their managers responsibility to support them, and communicate how they can be better supported.</p><p>To progress down the chart, release direct control, and become stronger in supporting those above you.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a3c95b7c7a7b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Only Rule You Need for Writing Clean Code]]></title>
            <link>https://levelup.gitconnected.com/the-only-rule-you-need-for-writing-clean-code-532a64df0eff?source=rss-7ddf0fafbea6------2</link>
            <guid isPermaLink="false">https://medium.com/p/532a64df0eff</guid>
            <category><![CDATA[clean-code]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[mental-models]]></category>
            <dc:creator><![CDATA[Scott Kitchell]]></dc:creator>
            <pubDate>Mon, 20 Jul 2020 06:08:38 GMT</pubDate>
            <atom:updated>2020-08-12T03:15:38.073Z</atom:updated>
            <content:encoded><![CDATA[<h3>Clean Code Is All In The Mind</h3><p>Clean Code is code that is easy to understand, easy to use, and easy to modify.</p><p>You know when you see clean code because it’s a pleasure to work with, it seems intuitive and straightforward, bugs are easy to spot, and it allows you to develop new features at a fast pace even in a large codebase.</p><p>So how can you achieve this holy grail?</p><p>There are many books and articles that spew out a whole number of rules to follow to achieve “clean code”. These rules include guidelines for declarative variable naming, small pure functions, DRY (don’t repeat yourself), class length, one class per file, and more. But often these rules can be contradictory, not to mention controversial, and there’s so many that forgetting them is almost inevitable.</p><p>So here’s the 1 Rule to rule them all:</p><blockquote><strong>Always write code in reference to a mental model.</strong></blockquote><p>Awesome, but what’s a mental model?</p><p>Let’s say you come across a book on a table written by an author you’ve never heard of before. Do you know how to use the book? Of course you do! If the cover looks interesting you’ll pick it up, and you know if you turn it over to the back side (that you have never seen in your life), there will likely be a blurb for you to read. You know that you can open it and there will be paper pages inside. You know you should start from the first outermost page, and read through it, page by page.</p><p>So how do you know so much about how to interact with something that you’ve never even seen before? The answer is Mental Models.</p><p>Our brains are exceptionally good at pattern matching, and so when we come across a book, our brains can access an existing mental model based on all the previous experiences we’ve had with books in the past. And it’s this mental model that provides us with a theory on how to interact with the very book in front of us.</p><p>It’s this ability for humans to store, pattern match, and retrieving complex mental models better than any other animal, which gives us our relative super intelligence. However this can also lead us astray both in our lives and in our code.</p><h3>So how does this help in writing clean code?</h3><p>Bare with me as first we need to take another step back so we can set up the correct mental model for what a mental model is. So meta.</p><p>Think of a mental model as a block of knowledge about something. It has a shape, and a name. Both the shape and the name are what we use to index the model directly when we come across it in the world. (In reality the shape may be a sight, sound, smell, or some other sense, but for this model just think of it as a container).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*J5mkxBtFXTOkx7ee5Qdb7A.png" /></figure><p>So what is on the inside of the mental model container then? Well, it contains all the knowledge about the parts that make up your understanding of the thing. And since our brain use mental models to represent knowledge, this means each part inside the mental model is also a mental model!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yPRdM7T93h6pyoJCrEZKgw.png" /></figure><p>When we come across something new, we take this model and use it as a template for the specific thing in front of us, modifying it as needed.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rb3g5PTZ2Lj3vhzVFS1Y_Q.png" /></figure><p>And when we need to complete a task, we can string these mental models together to produce a new mental model on how to solve it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xZQgCpUZi2XDigSeZ1zNBQ.png" /></figure><h4>There’s two really important points to note however:</h4><p><em>1. You can initially be wrong in identifying the right mental model as a template, and you won’t know it until you’re utterly confused by some interaction.</em></p><p>Magic, jokes, and optical illusions often play on this in a lighthearted way to trick your brain into initially using the wrong mental model, so that the punchline can surprise you. This can be fun, but since we need to use mental models to solve problems, using the wrong mental models can also breed confusion, failures, and a lack of confidence when writing code.</p><p>2.<em> Once you know the mental model for a particular thing or piece of code, no matter how unintuitive it was at first, you’ll believe it’s logical.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*md0Ls5UOvUWKIfwFkM0sew.png" /></figure><p>Mental models are literally the logic within out heads, so if it’s in there, you’ll see the logic in it. From the outside however, others will not. Not only are irregular looking shapes unintuitive, they also don’t fit well with other mental models making them harder to remember and problem solve with.</p><h3>Please just tell me how this relates to my code!?</h3><p>Ok let’s go back to the rule: <strong>Always write code in reference to a mental model</strong>. So how do you do that?</p><p>Did the mental models shown above seem somewhat familiar? Does this help?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cuhuMyXjrixjOyLIc4l3-A.png" /></figure><p>As you can see variables, classes, and functions are mental models! So the idea is to write these as close as we can to our pre-existing mental models.</p><p>To kick start you’re thinking, here’s some examples with code!</p><h3>When creating things</h3><p>Following the rule of <strong>always writing code in reference to a mental model</strong>, the first thing to do is decide what mental model to reference. What do you want to represent? A user? A signup? A notification? A book? This inevitably leads to thinking about naming and code structure! Perfect.</p><h4>Naming</h4><p>Naming may be the single most important factor in writing clean code.</p><p>Remember, we can use the shapes and names of things to identify the right mental model to think about. In code the shape of something like an object, function or a class is often hiding in anther file where it’s defined so we have to rely more heavily on the name alone. (Statically typed languages and a good IDE can help identify the shape more broadly however).</p><p>What words encourage the reader to infer what the code is most accurately.</p><p>user, buyer, seller, owner, creator, and admin all might be similar in shape, but the name used conveys a (probably important) difference in what the reader will expect the object to contain and be used for.</p><p>You may notice sometimes it’s hard to name something or you have an and in the name. This indicates that you might actually have two or more mental models mixed.</p><h4>Defining code structure</h4><p>To think about how to structure your code, think about the mental models you want to reference. For example let’s say you’re writing a setupUser function. What would you expect this function to do? Here’s one example.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/54e98feed9d17a948279d50dc9bbcc80/href">https://medium.com/media/54e98feed9d17a948279d50dc9bbcc80/href</a></iframe><p>As you can see, the function creates a user on the server based on some user details, then sets up the browser local storage, sets up notification preferences, and finally returns the user.</p><p>Is this what you expected given the name setupUser? What does “setup” mean? A few things could be improved here but the main thing to highlight is it’s unlikely anyone’s initial mental model for a function named setupUser would include creating a user on the server too.</p><p>One way to improve this would be to name the function createAndSetupUser, however this means the function is referencing two mental models, not one. A better approach would be to separate it.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/886464e905f15c61a6837d5607254504/href">https://medium.com/media/886464e905f15c61a6837d5607254504/href</a></iframe><p>While this still may not be perfect, we can see each part of this code is named and structured in a way that references one mental model at a time and won’t mislead the next person that comes across the code.</p><h3>When Modifying things</h3><p>More often than not, experienced developers will intuitively write new code in reference to their “clean” mental models. It’s instead when modifying code that all kinds of crimes are committed. This is because it’s often another developer adding a tiny part to it, and it may seem logical at the local level.</p><p>To <strong>always write code in reference to a mental mode </strong>while you’re modifying code, you have to take a minute to understand what the initial mental model was and stay true to it! It may make sense to you to add that one line to that function, but from the outside, that function might now contain a hidden bug waiting to happen.</p><p>Here’s an example of a user.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/7a078bdbcad5ff725f796cdc68c5b289/href">https://medium.com/media/7a078bdbcad5ff725f796cdc68c5b289/href</a></iframe><p>Now let’s say during the users onboarding you need to record whether they have seen and agreed to certain permissions. The easiest thing to do (and maybe even the most performant) is to add this directly to the user model.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/8cec6d39118b6a3894d1821689880d8f/href">https://medium.com/media/8cec6d39118b6a3894d1821689880d8f/href</a></iframe><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*lssk3fKryrNk4aLBjkm7Mg.png" /></figure><p>Would you guess these new properties would be part of a user if you didn’t already know it?</p><p>A better approach would be to consider how they might be part of a new mental model. For example UserPermissions.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/89333a7d406dda0f8ab9a8d14d826ab1/href">https://medium.com/media/89333a7d406dda0f8ab9a8d14d826ab1/href</a></iframe><p>Again this can still be improved on depending on the use case, however when you or someone else is looking to find what permissions a user has confirmed, it should be more intuitive where to access the data and code. And if someone were to add more user permissions, there is a clear home for them — no meetings or discussion needed.</p><p><strong>Always write code in reference to a mental model</strong> and you will be amazed how easy it is to determine what Clean Code is and how to write it.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=532a64df0eff" width="1" height="1" alt=""><hr><p><a href="https://levelup.gitconnected.com/the-only-rule-you-need-for-writing-clean-code-532a64df0eff">The Only Rule You Need for Writing Clean Code</a> was originally published in <a href="https://levelup.gitconnected.com">Level Up Coding</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What I’ve learnt after a year founding a tech company]]></title>
            <link>https://scott-kitchell.medium.com/what-ive-learnt-after-a-year-founding-a-tech-company-b2ba441abe53?source=rss-7ddf0fafbea6------2</link>
            <guid isPermaLink="false">https://medium.com/p/b2ba441abe53</guid>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[jobs-to-be-done]]></category>
            <category><![CDATA[entrepreneurship]]></category>
            <category><![CDATA[product-development]]></category>
            <dc:creator><![CDATA[Scott Kitchell]]></dc:creator>
            <pubDate>Sun, 01 Jul 2018 08:14:07 GMT</pubDate>
            <atom:updated>2018-07-01T08:27:50.778Z</atom:updated>
            <content:encoded><![CDATA[<p>“I have a killer app idea that is going to take over the market. The app supports researchers with participant recruitment, which is a huge pain point. It’ll be hard, but I’ll validate it with potential customers and then I’ll build it. Lean of course - Build, measure, learn.”</p><p>That was my thought process when starting the tech startup Rulo a year ago (named Curio at the time). I thought I had the product idea that could change the world, and with sheer determination and laser focus on product development my co-founders and I could make it happen.</p><p>I could not have been more wrong.</p><p>It wasn’t that our idea was bad, or that our product development didn’t meet milestones, the issue was my mindset and where I focused my efforts.</p><blockquote>What I came to realise is, a startup is not about your idea, product, or technology, it’s all about <strong>people</strong>!</blockquote><p>Coming from engineering, it took me a long time to realise this and I believe it’s one of the key reasons second+ time founders are far more successful.</p><p>Looking back, I should have focused my efforts more like this; team first, customers (controversially) second, and product third. Let me explain.</p><h3>Team comes first</h3><p>While most will probably say your customer should come first, I disagree. The reason is subtle but important — Your startups number one focus should be on your customer, but you are not your startup, you are leader within your startup. You should focus on developing the best team environment you can, who together can then focus on your customer.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*83BmCuJ_GM7ieyBbODREqg.jpeg" /></figure><p>I’ve seen first hand, the difference between an aligned team, where everyone loves their day to day work and the journey they’re on together, and a team whose goals were mixed, and had members that were uncommitted. The former is close to reaching $100K monthly recurring revenue, the latter is almost dead.</p><p>Build the culture you want from day one — even if it’s just you as a sole founder! It is incredibly hard to change behaviour later on. This is not about having bean bags and a table tennis table either (although great). Treat yourself and your team to learning, health and regular achievements. And after that, just have as much fun as possible!</p><p><em>As a side note: I also believe if someone doesn’t fit the culture (and isn’t making efforts to fit) it doesn’t matter if they’re your lead developer, they will bring down your other team members. The right thing to do by everyone is asking them to leave. The product is not as important as the team.</em></p><h3>Customers/Market in close second place</h3><p>A close second is to focus your efforts on those in your target market — your customers.</p><p>It’s really easy too! You just have to <strong>shut-up and listen</strong> to them.</p><p>A core human desire is to be understood, as this builds our sense of belonging. When initially talking with customers, you don’t need to try help them or tell about your (probably underwhelming) first solution. You just have to show that you understand them. They will naturally feel a sense of connection and belonging with you and your company and you’ll end up learning a whole lot more about them!</p><p><em>Warning though, to be actively listened to and understood can be so rare that I’ve literally had customers cancel their other meetings to talk on for hours!</em></p><p>When it comes to validating your ideas with customers, the <a href="http://theleanstartup.com/">Lean Startup</a> is a great approach, but it’s largely based on trial and error. I’ve more recently found the <a href="https://jtbd.info/">Jobs-to-be-Done</a> (JTBD) framework can provide a far better, more systematic approach to generating and validating ideas. It can help with framing your user research, identifying holes in the market, pricing, and prioritising user needs. When done right it can also make innovations ridiculously easy to identify.</p><p>In short, understand your customers and have them on-board the journey with you. If they’re not, go back and pick them up.</p><h3>Product/Solution Third</h3><p>Once you have the right people around you and you understand your customer, start building!</p><p>The two most important product development lessons I’ve picked up over the past year are things I had heard and read a thousand times before and yet I still had to fail with before they really sunk in.</p><p>Firstly <strong>keep the scope of work focused</strong> (you’ll never be able to build everything you want), and secondly <strong>moving fast is more important than being perfect</strong>.</p><p>Under the <a href="https://jtbd.info/">JTBD</a> framework, the product is just something your customer hires to help them get a job done. If it doesn’t help, they will just as easily fire it as their solution and find something else.</p><p>This means given limited resources, it’s far more important that you <strong>build something that helps a specific customer group achieve a specific job really well </strong>rather than a just ok general solution that solves all the problems felt by your target market.</p><p>For Rulo that meant helping academic researchers recruit participants for their study, and not trying to solve their problems in report writing and publishing too.</p><p>Focus is harder than you think, especially if you and your team are creative and are constantly sharing new ideas. Be critical of the features you invest time into.</p><p>Lastly, some of the decisions we made early on that we thought were really important, proved not to be when looking back. React or Angular, AWS or GCP, MySQL or MongoDB — We wasted far too much time deciding on these when we could have been building something and getting feedback.</p><p>The reason we all fall into these traps is because they are really important aspects of the product. What we forget however, is that the difference between choices is often small, meaning either choice could suffice.</p><p>Even after all the time we spent deciding, we still made mistakes. It simply would have been better starting and changing later if needed.</p><p><strong>Thanks for reading!</strong> I’m sharing this post as unfortunately this is the end of my journey within Rulo. If only I had known what I do now when I first started things could have been very different. I hope sharing this has triggered some of your own thoughts and will help you and the people around you to grow and have more fun! :)</p><p>If you got something out of this post, please share it around.</p><p>To follow me with whatever’s next, and to (possibly) get more insights like this one, find me on Twitter <a href="https://twitter.com/ScottKitchell">@ScottKitchell</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b2ba441abe53" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>