<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Mike Carter</title>
  <link>https://mcarter.me</link>
  <description>Feed of Mike Carter, A software developer, company founder and technical leader from the UK.</description>
  <image>
    <url>https://mcarter.me/assets/images/me.webp</url>
    <title>Mike Carter</title>
    <link>https://mcarter.me</link>
  </image>
  <atom:link href="https://mcarter.me/rss.xml" rel="self" type="application/rss+xml" />
  <item>
    <title>Reflecting on my first failed product</title>
    <pubDate>Wed, 8 Feb 2023 12:00:00 GMT</pubDate>
    <link>https://mcarter.me/posts/my-first-failed-product</link>
    <guid>https://mcarter.me/posts/my-first-failed-product</guid>
    <description>A year after launch, I’m declaring my first product a failure. Here’s why it didn’t work out, and what I plan to do differently next time.</description>
    <content:encoded><![CDATA[
      <p>I spent my unbooked time in 2022 building <a href="https://useparable.com" rel="nopener" target="_blank">Parable</a>, an indie analytics platform for blog posts and articles. Parable intelligently tracks how many people actually read your content, and focuses on providing analytics useful to writers trying to grow an audience.</p><section class="gallery"><figure class="gallery__item"><a class="gallery__image-link" href="/assets/images/posts/my-first-failed-product/screenshot-1.webp" target="_blank" rel="noopener"><img class="gallery__image" src="/assets/images/posts/my-first-failed-product/screenshot-1-thumb.webp" alt="The Parable homepage."></a><figcaption class="gallery__caption">The Parable homepage.</figcaption></figure><figure class="gallery__item"><a class="gallery__image-link" href="/assets/images/posts/my-first-failed-product/screenshot-2.webp" target="_blank" rel="noopener"><img class="gallery__image" src="/assets/images/posts/my-first-failed-product/screenshot-2-thumb.webp" alt="The main Parable dashboard."></a><figcaption class="gallery__caption">The main Parable dashboard.</figcaption></figure><figure class="gallery__item"><a class="gallery__image-link" href="/assets/images/posts/my-first-failed-product/screenshot-3.webp" target="_blank" rel="noopener"><img class="gallery__image" src="/assets/images/posts/my-first-failed-product/screenshot-3-thumb.webp" alt="An individual Parable page report."></a><figcaption class="gallery__caption">An individual Parable page report.</figcaption></figure></section><p>A year after launch, I’m winding down Parable to build something new. Life has taught me that repeated failure is often the price you pay for eventual success with anything, so I expected to be writing this post sooner or later. While I’ll admit it stings a bit, there were numerous reasons for me to call it quits. I’ve detailed the big 3 below.</p><h2>The reasons</h2><h3>Real reads weren’t all that useful</h3><p>Parable’s headline feature was that it could show you how many people were <em>reading</em> your content, rather than just how many visits your content was receiving. It also included tools tailored for content analysis - traffic sources, scroll depths, reading times, focus break frequency, and browser stats (to name but a few!).</p><p>The information Parable surfaced was useful to have, but it was <em>just</em> information. Parable couldn’t automatically get you more readers, and it couldn’t even tell you how to get more readers. Its usefulness relied entirely on you finding value the information it surfaced, and I overestimated how much that was worth to people.</p><p>As an example, knowing how many real reads your posts has isn’t useful in isolation. It only becomes useful when you measure its change over time to see that your continued efforts to improve your writing are resulting in more reads. However, this change can just as easily measured using a less granular metric like visits, available from any general purpose web analytics product.</p><figure class="captioned-image"><img class="article-image article-image--bordered article-image--captioned" src="/assets/images/posts/my-first-failed-product/real-read-graph.webp" alt="A screenshot of Parable’s real read graph. It shows visits, visitors, and real reads, as well as a read conversion metric."><figcaption class="article-image-caption">Parable’s real read graph.</figcaption></figure><h3>Deeper insight wasn’t always necessary</h3><p>I spent a few thousand pounds on various marketing exercises for Parable with little payoff, and so I decided to do what I should have done to begin with, and talk to writers about the product. Messages were mixed, but two things became clear.</p><p>The first was that new bloggers don’t look for standalone analytics products for their writing. They’ll use the built-in analytics on their blogging platform, or Google Analytics if they need something more complex. They’ll check these every once in a while as they work to get their visitor numbers up, and this will be enough for them.</p><p>The second was that professional writers were much more likely to use a range of analytics products, but they were also much more concerned with being able to sell the performance of their content. A product that tells them the 10,000 visits their post had actually only yielded 100 real reads wasn’t going to impress the people paying them, even if it represented a more honest analysis of the content.</p><figure class="captioned-image"><img class="article-image article-image--bordered article-image--captioned" src="/assets/images/posts/my-first-failed-product/site-stats.webp" alt="A screenshot of Parable's high level post site statistics. It shows average focus breaks, average active time, average scroll depths, and average bounce percentages."><figcaption class="article-image-caption">Parable’s site statistics page.</figcaption></figure><h3>Different needs for amateurs and professionals</h3><p>Following on from talking to writers, I talked to Parable’s users directly. In doing this, I learned amateur bloggers repeatedly failed to understand graphs, heatmaps, distributions and other reports essential to getting value from the product. The information surfaced in Parable wasn’t accessible to them, and so wasn’t actionable, and therefore wasn’t valuable.</p><p>Conversely, when I talked to professional writers using the product, they’d frequently ask if it could do <em>more</em>. They’d want to cross reference, break down, export data, and generally visualise things in a number of different ways that weren’t currently supported and would take a lot of rework to implement.</p><p>Parable wasn’t simple enough to be accessible to new bloggers, and wasn’t full-featured enough to provide value to professionals. I should have done more market research at the beginning, avoided wasted time, and focussed on a product for the better market (professional writers).</p><figure class="captioned-image"><img class="article-image article-image--bordered article-image--captioned" src="/assets/images/posts/my-first-failed-product/distribution-chart.webp" alt="A screenshot of Parable’s scroll depth and average time on page distribution charts."><figcaption class="article-image-caption">Parable’s scroll depth and time on page distribution charts</figcaption></figure><h2>The lessons</h2><p>While I’m disappointed to be shutting Parable down, I have no regrets about the time I spent working on it. There are plenty of common mistakes I’d theoretically understood around market validation, time management, and solo product development that I still managed to make while launching the product. However, having experienced this pain, I now feel experienced enough to spot earlier and with more clarity next time. Here’s what I’ll do differently in future:</p><ul><li>Spend more time understanding problems before even thinking about technical solutions.</li><li>Seek feedback on solutions early and continuously from potential customers.</li><li>Sell solutions early, even if it means doing things manually to begin with.</li><li>Establish productive marketing channels early, and nurture them continuously.</li></ul><p>What I’m not going to do next time is worry so much about developing software. Even with an analytics product, writing Parable’s software and scaling it to handle thousands of requests per minute was by far the easiest part of the journey - sorry technical founders!</p><hr><p>If you’re interested in reading more about Parable, I’ve <a href="https://useparable.com" target="_blank" rel="noopener">left the marketing website up</a>. I make a living by helping companies bring digital products to market with solid foundations, room to scale, and costs under control. If it sounds like I could help you, have a look over <a href="/">my services</a>. If you'd like to hear more from me, you should follow me on <a href="https://twitter.com/mcarterj" target="_blank" rel="noopener">Twitter</a>, for more product development content in future.</p>
    ]]></content:encoded>
  </item>
  <item>
    <title>Mistakes from 6 months of freelancing</title>
    <pubDate>Fri, 29 Oct 2021 09:00:00 GMT</pubDate>
    <link>https://mcarter.me/posts/mistakes-from-6-months-of-freelancing</link>
    <guid>https://mcarter.me/posts/mistakes-from-6-months-of-freelancing</guid>
    <description>I started working as a freelance development consultant in April 2021. 6 months and almost £50,000 later, here are a few of my biggest mistakes.</description>
    <content:encoded><![CDATA[
      <h2>Not specialising enough</h2><p>I’m currently marketing myself as a developer who helps “bring digital products to market”. This has resulted in some solid enquiries, and I’m fortunate to be in a position where I’m turning good opportunities away, but casting such a wide net has caused problems.</p><p>At the moment, I’m doing a wide range of work for different clients. There’s back-end development, front-end development, architecture, documentation, product planning, and more. All of this happens using a variety of different languages, frameworks, platforms, and industries. </p><p>From a business development perspective, the knowledge and experience I’m garnering today rarely dovetails cleanly from work I did for previous clients. I’m not developing a true expertise in any one area as quickly as I’d like, and my value proposition isn't as strong as it could be.</p><div class="tip"><h4 class="tip__title">The lesson:</h4><p class="tip__text">I should have specialised more. Rather than being a good all-round option for many clients, I would have been the obvious option for very specific clients. By repeatedly building upon this specialisation, I’d be developing a better depth of expertise more quickly, and would be able to command a higher price for my work.</p></div><h2>Taking on too many problems</h2><p>Throughout my first 6 months of freelancing I’ve been a bit of a “yes person” to the clients I work with. I’ve tried to help with every problem they’ve had in order to remain as useful as possible.</p><p>Unfortunately, this has led to a frantic style of working where progress towards important major goals is slowed by unimportant, but urgent “could you just” tasks. This has hurt me in several ways: </p><ol><li>It promotes frequent costly context switching.</li><li>It builds an unhealthy dependence on me in my clients.</li><li>It pulls me away from important long-term problems, diluting my value.</li><li>It encourages more of the same behaviour in future.</li></ol><div class="tip"><h4 class="tip__title">The lesson:</h4><p class="tip__text">By saying no to a few more unimportant requests from my clients, I’d have been able to solve their large important problems quickly, and would have encouraged them to maintain a healthy independence from me for smaller issues. Rather than enabling a chaotic working environment, I could have provided a stable, undistracted means for getting big, difficult and valuable problems solved.</p></div><h2>Charging too little</h2><p>I’ve tried to use value-based pricing as much as possible over the past 6 months. This means that rather than charging based on how long something will take me, I try to charge based on how much value the work will generate for the client. The idea here is that the amount I charge can be disconnected from the time the work takes to complete. For a large client, this could mean I'm able to comfortably charge a much larger price.</p><p>On the small projects value based pricing has worked on, it has resulted in strong win-win outcomes for me and my clients. However, more often than not, I’ve vastly underestimated the amount of my time a project will take, and have felt obliged to complete it at the price I’d quoted. Whenever this has happened I’ve ended up demotivated and resentful over having to work on those projects while turning down other interesting opportunities due to lack of availability. </p><div class="tip"><h4 class="tip__title">The lesson:</h4><p class="tip__text">To avoid this, I should have pushed for more clarity on the scope of my value-based work before offering a price. When that wasn’t possible, I should have sold an hourly rate to ensure I was being paid properly for my time.</p></div><h2>Being a poor self promoter</h2><p>It’s easy to let marketing activities slip when you’re barely getting through your client workload each week. I knew this before I started freelancing, and so I worked hard to keep up with regular content creation, social media posting, and light networking in the first few months.</p><p>This served me well, but making the time and thinking of valuable things to share became increasingly difficult as summer progressed, and my marketing activity eventually dropped off a cliff at month three. My weeks were already full of client work, and rather than sacrificing some of that to ensure I could continue to attract new business, I buried myself in my work.</p><div class="tip"><h4 class="tip__title">The lesson:</h4><p class="tip__text">I should have made more effort to identify opportunities to market my business as I took on new projects. For example, I could have ensured that each new project provided some interesting visual content to share. A tighter specialism would have further helped with this, as the content I shared would follow a common theme, building an audience for my business.</p></div><h2>Not finding a healthy balance</h2><p>If you’ve been reading any of my monthly updates from the past 6 months, you’ll know I’ve been struggling with burnout. I thought I’d been burnt out before, but I can safely say now this was very clearly my first time. It’s an utterly pernicious condition, and unchecked I can absolutely see how it could being catastrophic to a career. </p><p>I’m not sure on the root cause of my burnout as I work a fairly regular 40 hour work week, but before September this year I hadn’t really taken meaningful time off in 18 months, and a lot of my non-work time has been spent locked down at home not seeing people. I’m choosing to believe these factors, set against a backdrop of existential climate dread and economic uncertainty, contributed to its development. </p><div class="tip"><h4 class="tip__title">The lesson:</h4><p class="tip__text">I took 3 weeks off in September, and during that time I completely cut myself off from work, and spent barely any time on the web. This was transformative, and with hindsight, I should have done this before I started freelancing at the end of March. A month off then might have given me the mental energy I needed to grind through those difficult first few months with a little more gusto. </p></div><h2>Wrapping up</h2><p>When I started freelancing, I privately set myself a goal of invoicing £100,000 in my first year. 6 months in, that goal still seems achieveable for me, but to grow I’ll need to do more than just take on more work. </p><p>With that in mind, my plan for the next 6 months is to learn from the mistakes I’ve highlighted above and make the changes required to better position myself in the market, market my services, service my clients, and maintain my mental health.</p><p>If you’d like to see how this goes for me, you should <a href="https://twitter.com/mcarterj" rel="noopener" target="_blank">follow me on Twitter</a> where I’ll be posting smaller short-form updates on my freelancing between larger 6 month blog posts from now on. I also have a <a href="https://mcarter.me/rss.xml" rel="noopener" target="_blank">RSS feed</a> on this site if you’d just like to keep track of new posts on this blog.</p>
    ]]></content:encoded>
  </item>
  <item>
    <title>Freelancing update - August 2021</title>
    <pubDate>Tue, 14 Sep 2021 10:00:00 GMT</pubDate>
    <link>https://mcarter.me/posts/update-august-2021</link>
    <guid>https://mcarter.me/posts/update-august-2021</guid>
    <description>Revenue and reflections on my fifth month of working as a freelance development consultant.</description>
    <content:encoded><![CDATA[
      <p>August was a mixed bag. I failed to achieve one of my goals, and the feelings of burnout continued. However, I felt like I did good work in spite of this, and I’m proactively taking steps to address my burnout and get back to feeling normal.  </p><h2>Stats for August</h2><div class="table__container"><table class="table"><tbody><tr><th>Month</th><th>Site views</th><th>Post views</th><th>Twitter profile views</th><th>Enquiries</th><th>Days off</th><th>Revenue</th></tr><tr><th>April 2021</th><td>1,137</td><td>749</td><td>4,800</td><td>2</td><td>0</td><td>£7,800</td></tr><tr><th>May 2021</th><td>1,263</td><td>3,144</td><td>4,660</td><td>1</td><td>5</td><td>£4,200</td></tr><tr><th>June 2021</th><td>1,192</td><td>549</td><td>6,620</td><td>1</td><td>0</td><td>£6,700</td></tr><tr><th>July 2021</th><td>1,160</td><td>596</td><td>3,330</td><td>1</td><td>2</td><td>£11,800</td></tr><tr><th>August 2021</th><td>1,042</td><td>493</td><td>1,511</td><td>3</td><td>4</td><td>£6,200</td></tr></tbody></table></div><h3>Revenue</h3><p>I issued invoices for <strong>£6,200</strong> (~$8,579) excluding <a href="https://www.gov.uk/vat-businesses" rel="noopener" target="_blank">VAT</a> in August. These came from a mixture of consulting and development work for two different clients, all of this work was billed on an hourly basis.</p><h3>Enquiries</h3><p>I received <strong>3 new work enquiries</strong> in August: </p><ul><li>My first enquiry came from a business in the Netherlands looking for development assistance. I didn’t have the availability to take this on, but after sharing some speculative pricing with them they indicated that I would have been too expensive for them anyway.</li><li>My second enquiry came from a former colleage who was looking for a trustworthy developer to potentially help with a development project later this year. I indicated that I probably wouldn’t have availability, but otherwise this is still open.</li><li> My third enquiry was from a former client looking for some technical consulting on their rapidly growing startup. It looks like we’ve managed to work out a good arrangement here, and so I’ll be spending whatever spare time I have each week helping them from early October.</li></ul><h3>Marketing</h3><p>I put together a small blog post about software <a href="https://mcarter.me/assets/posts/testing-and-tradeoffs">testing and tradeoffs</a> in August which did <em>ok</em>, with about 100 views from a social sharing on Twitter and LinkedIn alone.</p><p>I prioritised paid work over a social media presence in August to help avoid the feelings of burnout I’ve been experiencing recently. Due to this, my Twitter stats for the month were poor. </p><img class="article-image article-image--bordered" src="https://mcarter.me/assets/images/posts/update-august-2021/twitter-stats.webp" alt="A screenshot of my Twitter analytics for August 2021. It shows 41 tweets, 12,300 tweet impressions, 1,511 profile visits, 30 mentions, and 393 followers."><p>I need to do better with my marketing efforts if I’m to see meaningful improvements in these numbers. However, while I have work to do and enquiries coming in for more work than I can take on, I’m not too worried.</p><h2>Avoiding burnout</h2><p>The feeling of creeping burnout I mentioned in <a href="https://mcarter.me/assets/posts/update-july-2021">July’s update</a> was still there in August. I’ve been tired, slightly brain fogged, and have struggled to concentrate. I’m still motivated to do work, but staying focussed enough to do it is proving difficult, and the sense of purpose isn’t there like it has been. </p><p>As a freelancer, clients dependend on me being available and consistent. Knowing this creates a strong temptation to work longer hours in order to make up for my own inefficiencies. However, if I were to do this, I’d be left with a vicious cycle of work followed by burnout, followed by more work, followed by more burnout. It wouldn’t fix anything.</p><p>Instead, I’ve been reducing my work quantity to preserve work quality. I’m taking less on than I normally would each day, but I’m using a full normal working day to do it. This means invoicing less than I otherwise might, but it preserves client expectations of quality, and puts me on a positive track to get back to normal.</p><p>In addition to reducing my daily workload, I’ll also be using a holiday I’ve booked for the second half of September to take a break from technology, trying to keep my screen time (across all devices) to under an hour a day. I’ve no idea if this will make a difference, but it feels like it might.</p><h2>Goals for September</h2><p>My goals for September are fairly simple and focussed on avoiding burning out.</p><ol><li>Maintain work quality over quantity.</li><li>Use my holiday time to rest up and avoid the Internet as much as possible.</li></ol><p>That’s all for August! You should <a href="https://twitter.com/mcarterj" rel="noopener" target="_blank">follow me on Twitter</a> if you want to see how this freelancing adventure develops for me. I also have a <a href="https://mcarter.me/rss.xml" rel="noopener" target="_blank">RSS feed</a> on this site if you’d just like to keep track of new posts on this blog.</p>
    ]]></content:encoded>
  </item>
  <item>
    <title>Testing and tradeoffs</title>
    <pubDate>Tue, 31 Aug 2021 10:00:00 GMT</pubDate>
    <link>https://mcarter.me/posts/testing-and-tradeoffs</link>
    <guid>https://mcarter.me/posts/testing-and-tradeoffs</guid>
    <description>More tests aren't always better. In this post, we explore testing tradeoffs and the importance of using a mix of tools to control software quality.</description>
    <content:encoded><![CDATA[
      <p><em>“I've finished the feature, I'm just updating tests now”</em>. I hear this several times a week from developers I work with, usually a long while before their feature actually goes live. </p><p>Automated tests are an extremely effective practice in software quality control. They can be written once, maintained as the codebase evolves, and be effortlessly re-run an infinite number of times. Tests can automate the equivalent of hours of manual testing in minutes, and I'm a strong supporter of them, but they have their drawbacks. </p><p>Tests cost money to write, money to maintain, and can be painfully slow to run at scale. In many teams, intermittent test failures can also hold up deployments for hours while frustrated developers figure out what's wrong.</p><figure><img class="article-image article-image--subtitled" src="https://mcarter.me/assets/images/posts/testing-and-tradeoffs/first-try.webp" alt="Lego batman throws knives at a button trying to press it. After several attempts he hits the button, and shouts 'First try!'" loading="lazy"><figcaption><p class="article-image-subtitle">The average test suite</p></figcaption></figure><p>We often forget that tests don't actually guarantee anything. When they pass, they're just telling us that our potentially buggy test code has determined our potentially buggy application code is behaving as expected under the conditions we thought to check. There's a lot of room for false positives (and negatives) there.</p><p>Unfortunately, relying on poorly maintained test suites as the only means of quality control means many teams suffer through 50% or more of their developer's code time being lost to test maintenance. To improve the situation, we need to recognise our tests are just one of many tools we have available. </p><h2>Making tradeoffs</h2><p>In order for a test to be worth having, the ongoing cost of development and maintainance needs to be significantly lower than the ongoing cost of not having it at all. This tradeoff isn't always worth making.</p><p>Rather than defaulting to tests for everything, we should look at how our application is going to be developed and used, and think broadly about the various tools we have available to maintain quality. We can then compliment lean, valuable test suites with tools and processes that allow us to maintain quality while keeping the tradeoffs working very much in our favour. </p><p>An example could be needing to support Internet Explorer (IE) on a single-page JavaScript web application. It would be tempting to make the tests run against IE in addition to modern browsers, but in doing so we'd increase the test suite runtime, and we'd force developers to cater to the quirks involved in automating multiple browsers going forwards.</p><p>Since only a small number of our customers are likely to still use IE in 2021, a better approach might be to use an error tracking service to alert us to any IE errors raised in the live environment. This way, the occasional IE user might stumble on an error, but they can be quickly identified and fixed around other work. It's a much more sensible tradeoff between application quality and ongoing cost.</p><h2>Tools and processes for code quality</h2><p>Looking beyond tests, there are many tools and processes available to us that we can use to maintain software quality. Many of them are things we do already, but don't use to their full potential. Here are a few I regularly encourage teams to do more of:</p><ul><li>Improving developer documentation.</li><li>Spending time planning new features.</li><li>Spending time on architectural discussions.</li><li>Frequent pair programming.</li><li>Improved code linting.</li><li>Introducing code typing.</li><li>Better code review.</li><li>Targeted manual testing.</li><li>Periodic accessibility and user experience reviews.</li><li>Improving application logging.</li><li>Using an automated error tracking service.</li><li>Using an application metrics monitoring service.</li><li>Using (or understanding) a product analytics service.</li><li>Developer experience improvements.</li><li>Proactively removing old/unused features.</li><li>Proactively collecting customer feedback.</li></ul><p>None of these are a complete solution to quality, and each of these have their own tradeoffs to consider. Rather than replace tests, they can be used <em>together</em> with tests to provide a more complete approach to maintaining quality software. They can help to restore a healthy tradeoff between feature development and quality control, enabling developers to iterate quickly and ship with less frustration.</p><p>So, next time you find yourself spending the majority of your development time tending to a  test suite, consider what other tools and processes you have at your disposal to improve software quality, and make some better tradeoffs.</p><hr><p>I make a living by helping companies bring digital products to market with solid foundations, room to scale, and costs under control. If it sounds like I could help you, have a look over <a href="https://mcarter.me/">my services</a>. If you'd like to hear more from me, you should follow me on <a href="https://twitter.com/mcarterj" target="_blank" rel="noopener">Twitter</a>, for more product development content in future.</p>
    ]]></content:encoded>
  </item>
  <item>
    <title>Freelancing update - July 2021</title>
    <pubDate>Thu, 12 Aug 2021 13:00:00 GMT</pubDate>
    <link>https://mcarter.me/posts/update-july-2021</link>
    <guid>https://mcarter.me/posts/update-july-2021</guid>
    <description>Revenue and reflections on my fourth month of working as a freelance development consultant.</description>
    <content:encoded><![CDATA[
      <p>July was difficult. I failed several of my goals, changed my mind on the product I want to build, and neglected my social media activity. July was also my most profitable month to date, invoicing almost double my average revenue for April, May and June.  </p><h2>Stats for July</h2><div class="table__container"><table class="table"><tbody><tr><th>Month</th><th>Site views</th><th>Post views</th><th>Twitter profile views</th><th>Enquiries</th><th>Days off</th><th>Revenue</th></tr><tr><th>April 2021</th><td>1,137</td><td>749</td><td>4,800</td><td>2</td><td>0</td><td>£7,800</td></tr><tr><th>May 2021</th><td>1,263</td><td>3,144</td><td>4,660</td><td>1</td><td>5</td><td>£4,200</td></tr><tr><th>June 2021</th><td>1,192</td><td>549</td><td>6,620</td><td>1</td><td>0</td><td>£6,700</td></tr><tr><th>July 2021</th><td>1,160</td><td>596</td><td>3,330</td><td>1</td><td>2</td><td>£11,800</td></tr></tbody></table></div><h3>Revenue</h3><p>I issued invoices for <strong>£11,800</strong> (~$15,575) excluding <a href="https://www.gov.uk/vat-businesses" rel="noopener" target="_blank">VAT</a> in July. These came from a mixture of consulting and development work for two different clients. My revenue was so much higher in July because I was finally able to invoice for a long-running piece of fixed cost work I'd been doing part-time since April. This single invoice accounted for about 50% of the total revenue for July.</p><h3>Enquiries</h3><p>I received <strong>1 new work enquiry</strong> in July from a semi-local company looking for some straight-forward React development help. I had to turn them down due to lack of availability, but it's important I keep these enquiries coming in as knowing the opportunity is there gives me the confidence to say no to things I don't want to do, and a peace of mind that's hard to come by for the self-employed!</p><h3>Marketing</h3><p>One of my goals for July was to write a blog post focussed on product engineering. I'm disappointed to say I failed to make the time to write anything, and so unsurprisingly my site and blog posts received about the same number of views as they did in previous months - <strong>1,160 views</strong> for the website, and <strong>596</strong> for blog posts. </p><p>I also neglected my social media activity in July. On Twitter, my tweets, impressions, profile visits and mentions were all between 50-80% lower than June - eek!</p><img class="article-image article-image--bordered" src="https://mcarter.me/assets/images/posts/update-july-2021/twitter-stats.webp" alt="A screenshot of my Twitter analytics for July 2021. It shows 41 tweets, 17,500 tweet impressions, 3,329 profile visits, 12 mentions, and 392 followers (3 more than last month)."><h2>Building a different product</h2><p>In June's update I wrote an entire section on a product idea I wanted to pursue. The product was going to allow people to sell online events or content in an auction-style setup, with customers bidding for access.</p><p>After reflecting on this, I've changed my mind, and am instead going to look at building a small indie analytics platform that helps writers monitor and build an audience by providing some deep insight into who's reading their posts. This was my runner-up idea in June, but I've decided it's actually the best option for me personally: </p><ul><li>Analytics is a proven market.</li><li>The idea excites me more.</li><li>The idea is easier to explain.</li><li>It's a product I would use myself.</li><li>It's more visual, and so easier to share progress on.</li></ul><p>I intend to break ground on this in August, defining a tight scope for a first launch, and making some technology choices.</p><h2>Flirting with burnout</h2><p>I felt a little like I was flirting with burnout for much of July. Trying to wrap up old projects, continue ongoing work, move forward a product idea, write blog posts, and think of insightful things to Tweet about all got a little much at times.</p><p>Rather than trying to keep up with it all, I made the sensible call and let my writing and Twitter activity slide in order to keep working hours normal. Although this is probably good for me, it often doesn't <em>feel</em> good. I'm someone who gets job satisfaction from completing tasks, so accepting I won't finish something I set out to achieve can often be stressful in itself.</p><h2>Goals for August</h2><p>With that in mind, I've decided I'm only going to set goals each month that contribute towards my long term objectives of building an audience for my consulting work, and growing a successful digital product. This way, I can put something off for a month without it being perceived as a failure, because the goals will always be relevant. Here are my goals for August:</p><ol><li>Write a blog post focused on product engineering.</li><li>Scope out a first release and make technology choices for my analytics product.</li></ol><p>That's all for July! You should <a href="https://twitter.com/mcarterj" rel="noopener" target="_blank">follow me on Twitter</a> if you want to see how this freelancing adventure develops for me. I also have a <a href="https://mcarter.me/rss.xml" rel="noopener" target="_blank">RSS feed</a> on this site if you'd just like to keep track of new posts on this blog.</p>
    ]]></content:encoded>
  </item>
  <item>
    <title>Freelancing update - June 2021</title>
    <pubDate>Mon, 12 Jul 2021 13:00:00 GMT</pubDate>
    <link>https://mcarter.me/posts/update-june-2021</link>
    <guid>https://mcarter.me/posts/update-june-2021</guid>
    <description>Revenue and reflections on my third month of working as a freelance development consultant.</description>
    <content:encoded><![CDATA[
      <p>Working hours were a problem for me in April and May, but I managed to keep time under control in June with a few polite-but-firm refusals. The result was a month mainly focussed on work, with some wavering progress on the content&nbsp;and product front, but a renewed feeling of control.</p><h2>The stats</h2><div class="table__container"><table class="table"><tbody><tr><th>Month</th><th>Site views</th><th>Post views</th><th>Twitter profile views</th><th>Enquiries</th><th>Days off</th><th>Revenue</th></tr><tr><th>April 2021</th><td>1,137</td><td>749</td><td>4,800</td><td>2</td><td>0</td><td>£7,800</td></tr><tr><th>May 2021</th><td>1,263</td><td>3,144</td><td>4,660</td><td>1</td><td>5</td><td>£4,200</td></tr><tr><th>June 2021</th><td>1,192</td><td>549</td><td>6,620</td><td>1</td><td>0</td><td>£6,700</td></tr></tbody></table></div><h3>Revenue</h3><p>I issued invoices for <strong>£6,700</strong> (~$9,200) excluding <a href="https://www.gov.uk/vat-businesses" rel="noopener" target="_blank">VAT</a> in June. These came from a mixture of consulting and development work for two different clients. As with previous months, this covers my household expenses and savings goals just fine, so no problems there.</p><p>As in May, June's revenue figure represents only the work I billed on an hourly basis. A lot of the other work I did in June is being billed on fixed-cost basis, meaning I won't be able to invoice for it until it's finished later in July or early August.</p><h3>Enquiries</h3><p>I received <strong>1 new work enquiry</strong> in June. It was from a London-based company looking for some help developing new software for a commercial IoT (Internet of Things) device. It seemed like&nbsp;it would be an interesting project, but unfortunately I had to turn it down due to a lack of availability.</p><h3>Website visits</h3><p>My site homepage received <strong>1,192 page views</strong> in June. Like last month, there's been no significant change here. I'm fine with this, as building any sort of traffic there is going to be a really slow burner, and it's currently just a brochure site for prospective clients.</p><h3>Posts visits</h3><p>My blog posts received a combined total of <strong>549 views</strong> in June, which is rather poor. Although some of those views came from traffic to older posts, which is always a good sign that people are actually reading things, the two posts I wrote in June flunked a bit.</p><p>My most recent post, <a href="https://mcarter.me/posts/how-much-does-it-cost-to-make-an-app">"How much does it cost to make an app?"</a> answers a commonly googled (and asked) question. It's really targeted at prospective clients, but has so far only been shared with co-workers and Twitter followers, and so hasn't been read much. I'm going to see if I can change this by sharing it on LinkedIn, and perhaps some Q&amp;A sites where it might find a more receptive audience.</p><p>Earlier in June, I completely screwed up by sharing <a href="https://mcarter.me/posts/update-may-2021">May's freelancing update</a> right before Apple's Worldwide Developer Conference kicked off:</p><img class="article-image article-image--bordered" src="https://mcarter.me/assets/images/posts/update-june-2021/update-tweet.webp" alt="A screenshot showing a Tweet about my May freelancing update. The Tweet reads 'Don't care about #WWDC? Luckily for you, my next freelancing update is out!'."><p>It turns out perhaps people <em>do</em> care about the WWDC. That Tweet got missed almost entirely, and just 13 people looked at that post in the entire month.</p><h3>Twitter</h3><p>Twitter stats were up across the board in June, although just 5 new followers this month:</p><img class="article-image article-image--bordered" src="https://mcarter.me/assets/images/posts/update-june-2021/twitter-stats.webp" alt="A screenshot of my Twitter analytics for June 2021. It shows 81 tweets, 75,400 tweet impressions, 6,620 profile visits, 63 mentions, and 391 followers (5 more than last month)."><p>If I'm honest, trying to figure out what strikes a chord with anyone on Twitter is one of the least favourite parts of my work. I'm struggling to find valuable things to share because a lot of the work I do just isn't particularly visual or interesting. I'll keep on trying though, as this is something I'm determined to figure out.</p><h2>Choosing a product idea</h2><p>One of the goals I set for myself for June was to choose a product idea to build. After much deliberation, I've settled on something I think could succeed, and which I could reasonably develop, launch, and maintain by myself.</p><p>The product would allow people to sell online events or content in an auction-style setup, with the public bidding for access. Targeted at those with a high demand for their time and knowledge, the platform would essentially give them an easy way to generate revenue by simply sharing a link with their audience and waiting for bids to roll in.</p><p>For example, if I were a well known expert on a particular technology and I wanted to run a video workshop, I could quickly configure a link with 10 seats for auction on it and tweet a link to my followers. They could then bid on access to the event, with the top 10 highest bids being invited to participate.</p><p>The use cases I envisage this working for are various permutations of <strong>[in-demand person]</strong> selling access to <strong>[scarce resource]</strong> online. For example:</p><ul> <li><strong>A tech influencer</strong> selling <strong>10 seats to a video workshop</strong> on some new framework.</li><li><strong>A famous band</strong> selling <strong>a series of one-on-one Q&amp;As</strong> with the band members.</li><li><strong>A well known game developer</strong> selling <strong>50 early-access invites</strong> to their title.</li><li><strong>A highly sought-after consultant</strong> selling <strong>a spare half-day</strong> of their expertise.</li></ul><p>I've no idea if this is a good idea or not yet, so my next steps are to hone the pitch, and then make contact with some potential sellers on the service. I'm going to ask them directly if they'd use it if I were to build it, and if this goes well, I'll begin planning in earnest.</p><h2>Reflections and goals for July</h2><p>Overall I was pleased with how June went, but everything was <em>ok</em> without anything being <em>great</em>. I'd like to have a win on the content creation or audience building front sooner or later, as this takes up a huge amount of time and energy. To get there though, I may just need to keep experimenting and see what works for a little while longer.</p><p>I have a busy July ahead of me with a few days booked off for various activities now that Covid restrictions are loosening in the UK, so I'm keeping my goals fairly simple to ensure I have enough time for work:</p><ol><li>Get 10 responses to a “Would you use this?” question from well known tech influencers who sell educational content online.</li><li>Write another blog post focused on product engineering.</li><li>Outsource or stop doing 3 low value, time consuming activities.</li><li>Finish my fixed-cost development project and invoice for it.</li></ol><p>That's all for June! You should <a href="https://twitter.com/mcarterj" rel="noopener" target="_blank">follow me on Twitter</a> if you want to see how this freelancing adventure develops for me. I also have a <a href="https://mcarter.me/rss.xml" rel="noopener" target="_blank">RSS feed</a> on this site if you'd just like to keep track of new posts on this blog.</p>
    ]]></content:encoded>
  </item>
  <item>
    <title>Freelancing update - May 2021</title>
    <pubDate>Mon, 7 Jun 2021 13:00:00 GMT</pubDate>
    <link>https://mcarter.me/posts/update-may-2021</link>
    <guid>https://mcarter.me/posts/update-may-2021</guid>
    <description>I started working as a freelance development consultant full time in April 2021. Here are the numbers and reflections on my second month.</description>
    <content:encoded><![CDATA[
      <p>Time was a major theme in May. Between handling client work, content production, legal to-dos, and various other admin tasks, it's becoming clear that successful freelancing is going to need me to be deliberate (and a bit ruthless) about where I give my time.</p><p>I mentioned in April's update that I was working more than full time hours in order to keep up with everything. That was still the case in May, but I was able to spot a few low value requests early, and either delegate or refuse them. Progress!</p><p>Despite working more hours than I'd like, May was still enjoyable. Getting comfortable with the idea that I'm no longer tied to a 9-5 schedule has lead to some nice spontaneous dog walks, early starts, late starts, and outdoor lunches. I even took a week off!</p><h2>The stats</h2><div class="table__container"><table class="table"><tbody><tr><th>Month</th><th>Site views</th><th>Post views</th><th>Twitter profile views</th><th>Enquiries</th><th>Days off</th><th>Revenue</th></tr><tr><th>April 2021</th><td>1,137</td><td>749</td><td>4,800</td><td>2</td><td>0</td><td>£7,800</td></tr><tr><th>May 2021</th><td>1,263</td><td>3,144</td><td>4,660</td><td>1</td><td>5</td><td>£4,200</td></tr></tbody></table></div><h3>Revenue</h3><p>I issued invoices for <strong>£4,200</strong> (~$5,950) excluding <a href="https://www.gov.uk/vat-businesses" rel="noopener" target="_blank">VAT</a> in May. These came from a mixture of consulting and development work for three different clients. If you read the <a href="https://mcarter.me/posts/update-may-2021">April update</a>, you'll probably have noticed this is a £3,600 drop from last month. There are a couple of reasons for this:</p><ol><li><strong>Time off:</strong> I took a week off in May, and when your income relies on you being at your computer, weeks off are <em>expensive</em>. I only took 5 days, but the time lost travelling, catching up on emails, and other small non-billable tasks in addition to those days really put a dent in my billable hours.</li><li><strong>Fixed cost work:</strong> One of the projects I'm working on is priced on a fixed-cost basis. I put many hours into it in May, but I won't be paid for it until later this year. My other work is invoiced on an hourly basis, and so I invoice whatever time I've spent on it at the end of each month. It's this that you see invoiced for May above.</li></ol><p>Despite the lower number, I'm happy with revenue for May. It's enough to cover my saving and investment goals, and the drop was entirely expected and normal.</p><h3>Enquiries</h3><p>I received <strong>1 new work enquiry</strong> in May. It was a respectable lead, and one that I was incredibly well positioned to help. However, there was a direct conflict of interest with my largest client, and so I turned them down gently in order to avoid a situation I'd feel morally uneasy about.</p><p>The consulting enquiry that I previously mentioned I was keen to move forward with in April's update seems to have lost its momentum in May. Knowing the company, I suspect this is them just being busy with other things rather than changing their mind, so I'm going to reach back out to them in June to see if they're ready to move forwards.</p><h3>Website visits</h3><p>My site homepage received <strong>1263 page views</strong> in May. This is a few more eyeballs than last month, but nothing significant. I expect driving this number up in a significant way will take months and years of effort.</p><h3>Posts visits</h3><p>My blog posts received a combined total of <strong>3144 views</strong> in May. This is a huge 2.8x improvement on my April numbers, and largely comes down to some lucky retweets:</p><img class="article-image article-image--bordered" src="https://mcarter.me/assets/images/posts/update-may-2021/blog-post-tweet.webp" alt="A screenshot of a Tweet I wrote about a blog blog post on this website, showing 13 retweets, 1 quote tweet, and 20 likes."><p>I'm obviously pleased with this, but it's important for me to remember these people aren't <em>my</em> readers. I need to keep my head down and keep producing valuable things to build an audience of my own.</p><h3>Twitter</h3><p>I managed to tweet every working day in May. It continues to feel like hard work, but I did manage to gain <strong>26 new followers</strong> this month, so maybe that's progress:</p><img class="article-image article-image--bordered" src="https://mcarter.me/assets/images/posts/update-may-2021/twitter-stats.webp" alt="A screenshot of my Twitter analytics for April 2021. It shows 66 tweets, 45,600 tweet impressions, 4,660 profile visits, 55 mentions, and 385 followers (26 more than last month)."><p>My new followers seem to have come early in the month as a result of some well received Tweets, plus a some chance retweets from 2020. Apart from the new followers though, my stats are down across the board for May due to the week off.</p><p>All things considered, I'm pleased with my Twitter progress for May, I'll keep at it throughout June and see where I end up!</p><h2>Goals from last month</h2><p>I set myself 5 goals for May based on my reflections from April. I'm pleased to say that I managed to complete all 5:</p><ol><li>Take a week off.</li><li>Write a blog post focused on product engineering.</li><li>Tweet every working day, trying to be insightful.</li><li>Generating 3 product ideas that I think could work, and analyse the viability of each.</li><li>Generate enough revenue to cover living expenses and investment goals again.</li></ol><p>There's no need to go into detail on most of these, but I thought you might be interested in my week off and product ideas.</p><h3>Taking a week off</h3><p>After living indoors since November, we spent a week in Cornwall eating pasties, drinking cider, and doing big clifftop walks. It was <em>beautiful</em>:</p><section class="gallery"><figure class="gallery__item"><a class="gallery__image-link" href="https://mcarter.me/assets/images/posts/update-may-2021/trip-1.webp" target="_blank" rel="noopener"><img class="gallery__image" src="https://mcarter.me/assets/images/posts/update-may-2021/trip-1-thumb.webp" alt="The woods were in bloom."></a><figcaption class="gallery__caption">The woods were in bloom.</figcaption></figure><figure class="gallery__item"><a class="gallery__image-link" href="https://mcarter.me/assets/images/posts/update-may-2021/trip-2.webp" target="_blank" rel="noopener"><img class="gallery__image" src="https://mcarter.me/assets/images/posts/update-may-2021/trip-2-thumb.webp" alt="There were some stunning houses."></a><figcaption class="gallery__caption">There were some stunning houses.</figcaption></figure><figure class="gallery__item"><a class="gallery__image-link" href="https://mcarter.me/assets/images/posts/update-may-2021/trip-3.webp" target="_blank" rel="noopener"><img class="gallery__image" src="https://mcarter.me/assets/images/posts/update-may-2021/trip-3-thumb.webp" alt="A coastal path atop cliffs near St. Ives."></a><figcaption class="gallery__caption">A coastal path atop cliffs near St. Ives.</figcaption></figure><figure class="gallery__item"><a class="gallery__image-link" href="https://mcarter.me/assets/images/posts/update-may-2021/trip-4.webp" target="_blank" rel="noopener"><img class="gallery__image" src="https://mcarter.me/assets/images/posts/update-may-2021/trip-4-thumb.webp" alt="A lighthouse and cliffs near St. Ives."></a><figcaption class="gallery__caption">A lighthouse and cliffs near St. Ives.</figcaption></figure><figure class="gallery__item"><a class="gallery__image-link" href="https://mcarter.me/assets/images/posts/update-may-2021/trip-5.webp" target="_blank" rel="noopener"><img class="gallery__image" src="https://mcarter.me/assets/images/posts/update-may-2021/trip-5-thumb.webp" alt="Bramley monitoring the situation in Fowey harbour."></a><figcaption class="gallery__caption">Bramley monitoring the situation in Fowey harbour.</figcaption></figure><figure class="gallery__item"><a class="gallery__image-link" href="https://mcarter.me/assets/images/posts/update-may-2021/trip-6.webp" target="_blank" rel="noopener"><img class="gallery__image" src="https://mcarter.me/assets/images/posts/update-may-2021/trip-6-thumb.webp" alt="Things got a bit treacherous here. Worth it!"></a><figcaption class="gallery__caption">Things got a bit treacherous here. Worth it!</figcaption></figure></section><p>If you're feeling a spot of burnout from the past 18 months, I'd highly recommend doing something like this to get perspective and clarity. It always takes me a few days to get out of work mode, but once I do, I can really begin to decompress. Within days, my brain begins to make sense of things that have been bothering me, and the way forward becomes much clearer on various fronts.</p><h3>Generating 3 viable product ideas</h3><p>I really struggled with this goal. Ideas come to me easily, but I usually convince myself they're not worth pursuing for one reason or another. To ovecome this, I introduced some constraints to act as a filter for ideas that could work well for someone like me - a technical solo founder looking to build an additional revenue stream:</p><ul><li><strong>Simple but growable:</strong> The product needs to be simple enough that I can launch and develop it on my own, but have some trajectory for growth.</li><li><strong>Clear value:</strong> The product's value needs to be clear to see so it can be effectively marketed.</li><li><strong>Low support needs:</strong> The product needs to have low support needs, or support that I could easily outsource.</li><li><strong>In a proven market:</strong> Finding product-market fit is hard, better to build a fresh take on an existing product which has done that work already.</li><li><strong>That I will use:</strong> I'd like to solve a problem that I have myself so I can spot bugs, issues, and opportunities in the product.</li></ul><p>With those constraints in mind, here are the 3 front-runners from a series of ideas I had this month:</p><ul><li><strong>A simple, private analytics platform for long-form content.</strong> This would allow content marketers and bloggers to see how much people are actually reading their content, and where readers drop off, skip sections, etc.</li><li><strong>A blogging platform that allows you to own your content.</strong> Too many popular blogging platforms don't allow users to truly own their content. I'd like to see a compelling product solve that, and a few other common blogging platform issues.</li><li><strong>A product that lets people to put together online events that can be bid upon.</strong> For example, to let a consultant sell an hour of their time to the highest bidder, or let an tech influencer run a workshop for the 10 highest bidders.</li></ul><p>I've not made a decision on any of these yet, I'm going to do more thinking and investigation over June with a view to comitting to giving one a try.</p><h2>Goals for June</h2><p>I'm feeling fairly refreshed and motivated at the moment, but have a busy couple of months ahead with client work. With that in mind, I've given myself just 4 goals for June:</p><ol><li>Write another blog post focused on product engineering.</li><li>Tweet every working day, trying to be insightful.</li><li>Choose a product idea to build.</li><li>Outsource or stop doing 3 low value, time consuming activities.</li></ol><p>That's all for May! You should <a href="https://twitter.com/mcarterj" rel="noopener" target="_blank">follow me on Twitter</a> if you want to see how this freelancing adventure develops for me. I also have a <a href="https://mcarter.me/rss.xml" rel="noopener" target="_blank">RSS feed</a> on this site if you'd just like to keep track of new posts on this blog.</p>
    ]]></content:encoded>
  </item>
  <item>
    <title>For a better web, let developers learn</title>
    <pubDate>Mon, 31 May 2021 13:00:00 GMT</pubDate>
    <link>https://mcarter.me/posts/for-a-better-web-let-developers-learn</link>
    <guid>https://mcarter.me/posts/for-a-better-web-let-developers-learn</guid>
    <description>Systemic demands on developers prevent them from building deep expertise, and it's holding back the web on an industry-wide scale. Here&#39;s why.</description>
    <content:encoded><![CDATA[
      <h2>A software revolution</h2><p>When I started working on the web in the mid-noughties, we lived in a world of separate applications and technology stacks. The web was widely accessible on desktop computers, but the mobile web wasn't really a thing yet, and other Internet connected devices like tablets and smart speakers were still years away from becoming mainstream.</p><p>In the noughties, web developers were expected to have good HTML and CSS knowledge, and with a back-end language and some light JavaScript and SQL thrown into the mix, you could comfortably build quality web applications. You still can, in fact, but building in directly in these languages was much more common back then.</p><p>From 2008 to now, mobile devices have become the default way the web is used, and the Internet has become a sort of “extension of consciousness” for many people. The proliferation of the web has led to new performance, UX, and accessibility concerns, as well as expectations of instant handoffs between devices and seamless integrations between the complementary products.</p><p>Changing expectations and advances in technology have meant the past 13 years has seen a tremendous surge in demand for web application development, but also for technologies that allow us to build digital products that do more, run across multiple platforms, and connect seamlessly with everything else. Boundaries have become increasingly blurred, and the demands on the web as a platform and the developers building for it have grown significantly.</p><h2>Changing priorities</h2><p>New languages, tools, frameworks, services, platforms, architectures and development approaches have quickly gained widespread traction to make building for the modern web easier. Many of the most well known of these have grown out of large tech companies, who develop them to solve their own problems and then nurture them into the mainstream where they become de-facto industry standards.</p><p>These technologies abstract away from low-level detail so developers can build more efficiently across a wider range of devices in a connected way. They protect developers from solved problems, and integrate seamlessly with pre-packaged solutions for common problems. This lets developers spend more time writing code that tells systems what to do, and less time writing code that tells systems how it should be done.</p><p>This abstraction has, in turn, led to a subtle change in skills valued by organisations hiring new developers. Nowadays, breadth of experience in shipping solutions is generally valued over depth of expertise in specific areas of technology. In short, knowing that a solution works is seen as more useful than understanding why a solution works.</p><p>On the web, I've seen this change in values reflected most strikingly in junior developers. When I started working in the industry, I'd see other junior developers like me starting work with decent programming language experience, but little framework or tooling experience. In 2021, it's more common to see a specific set of platform and framework experience, with little, or sometimes no experience in the underlying languages involved.</p><h2>The quality problem</h2><p>Most would agree that having a chef who can reliably produce a tasty meal is more useful than a chef who understands the chemistry of cooking but produces inedible food. In the same way, we're right to value developers who can produce working software, but I believe we've crossed a line into a “too much of a good thing” situation with the tools we use.</p><p>Today, many developers are consistently working several automated abstractions removed from the code they're actually shipping, and doing so without the knowledge required to diagnose and resolve quality at lower levels when they inevitably do occur. I see this causing the following major problems all over the web:</p><ul><li><strong>Poor application performance:</strong> Nested webs of dependencies, transpilation and bundling steps mean many megabytes of unnecessary assets end up in production where they need to be downloaded and processed on connections and devices much slower than the ones they were developed on.</li><li><strong>Poor user experience and accessibility:</strong> UI frameworks and component libraries allow developers to build user interfaces without knowledge of HTML and CSS, leading to div soup, inaccessible markup, and unmaintainable stylesheets. This is done without any consideration given to UX or accessibility.</li><li><strong>Persistent bugs that linger without a fix:</strong> A lack of low level knowledge means that often nobody in a team is able to competently dig into their stack to figure out what's going wrong. It's less costly to just ignore the bugs until they become a bigger issue.</li><li><strong>Gaping holes in application security:</strong> A lack of awareness of the underlying technologies leaves applications and APIs littered with security vulnerabilities that put confidential data at risk.</li></ul><p>The interesting thing about these issues is that organisations are generally aware of them, but blame them on individual laziness or limitations in capability. Ironically though, this conclusion is itself the result of lazy thinking.</p><p>The reality is most developers have areas they'd love to build deep expertise in, but for many teams, the constant pressure to ship combined with the routine demands of of their personal lives means they're forced to work in a feature factory, only ever picking up tidbits of “how to do x” knowledge here and there as they go, and leaving a trail of unfortunate quality issues in their wake.</p><h2>Improving the situation</h2><p>It's common to see purist influencers advocate for a back to basics approach to solving quality problems. They encourage developers to build applications using clean hand-crafted code and few external dependencies that really get them working close to the browser or some server-side environment - “Look how far you can get with just the basics!”.</p><p>Back to basics is a great way to learn, but it's an uneconomical approach for building larger applications in most businesses. The frameworks and libraries people bemoan for their wastefulness are so popular because they're actually not wasteful at all. They're highly efficient on developer time, which is usually a much more significant cost than an inaccessible or slow web application in your average-sized company.</p><p>With time in mind, we need to approach the quality problem in a way that preserves the flexibility and bang-for-buck efficiency of modern development, while enabling developers to steadily grow the lower level expertise they're missing within work hours. In my experience, this works well through a combination of <strong>automated monitoring</strong>, <strong>deep learning time</strong> and <strong>personalised learning areas</strong>.</p><h3>Automated monitoring</h3><p>Automated monitoring tools are fantastic for detecting and alerting developers to quality issues with their web applications. User acceptance testing, cross-browser compatibility, performance monitoring, bug tracking, accessibility and UX regressions can all be automatically monitored to varying degrees.</p><p>When the pressure is on, automated tooling helps to keep everyone aware of the overall health of a suite of applications, and enables teams to focus on shipping with their favourite high level frameworks while being alerted to many major quality issues ahead of time.</p><h3>Deep learning time</h3><p>Many companies make nominal gestures towards supporting employee learning, but it usually comes second to everything else.</p><p>Learning is important, and to build deep expertise, developers need dedicated time and support from employers to build their knowledge within work hours. This dedicated learning time can be combined with a small budget for books, courses, workshops, and conference presentations for even greater effect.</p><p>Lastly, the importance of this learning time needs to be elevated to a position whereby it isn't skipped the moment a minor issue occurs, or the team falls slightly behind on their sprint.</p><h3>Personalised learning areas</h3><p>Rather than encouraging everyone to learn everything, speak to your team members and figure out what interests them on an individual basis. From there, you can set goals for building deep expertise in specific technical areas that align with quality issues the team is struggling with.</p><p>This way, even a small team can build real expertise in areas like performance, user experience, accessibility and security. They can begin to keep on top of quality issues while still shipping features quickly.</p><h2>Wrapping up</h2><p>By fostering an environment that promotes developing deep expertise alongside higher level productivity, you're creating a team that's better equipped to efficiently build modern, highly integrated applications across a diverse range of technologies and high level frameworks that shine as examples of quality software.</p><p>What's more, you're also taking an active role in aligning your developer's interests and desire for mastery of their craft with benefits to your organisation. This is a major motivator for employees in an industry where impostor syndrome or a general feeling of falling behind are very real fears for many.</p><p>If you're still not convinced, just remember that these benefits compound over time. Individual learning builds into very real expertise that spreads to others in the organisation, and happier, more fulfilled employees will attract higher quality applicants to your business who will in turn do the same to others. It's a virtuous cycle that starts by giving people room to learn.</p><hr><p>I make a living by helping companies bring digital products to market with solid foundations, room to scale, and costs under control. If you enjoyed this blog post, you should follow me on <a href="https://twitter.com/mcarterj" target="_blank" rel="noopener">Twitter</a>, for more product development content in future.</p>
    ]]></content:encoded>
  </item>
  <item>
    <title>My first month of freelancing</title>
    <pubDate>Tue, 4 May 2021 13:00:00 GMT</pubDate>
    <link>https://mcarter.me/posts/update-april-2021</link>
    <guid>https://mcarter.me/posts/update-april-2021</guid>
    <description>I started working as a freelance development consultant full time in April 2021. Here are the numbers and reflections on my first month.</description>
    <content:encoded><![CDATA[
      <h2>Revenue</h2><p>In my first month of freelancing, I issued invoices for <strong>£7,800</strong> (~$10,775) excluding <a href="https://www.gov.uk/vat-businesses" rel="noopener" target="_blank">VAT</a>. This has come from a mixture of consulting and development work for <strong>three different clients</strong>. I'll be tracking this figure each month so you can see how it changes over time.</p><p>I'm pleased with my first month's revenue. It's is enough for me to comfortably cover my household expenses and monthly investment contributions with some cash left over for saving and spending.</p><p>Although this is a good start, it's important to remember that not all of this is take-home pay. There are a lot of additional costs to account for as a self-employed person:</p><ul><li>Service subscriptions</li><li>Accountancy fees</li><li>Service fees (other freelancers, agencies etc.)</li><li>Equipment</li><li>Business taxes</li><li>Personal taxes</li><li>Pension contributions</li><li>Sick pay</li><li>Holiday pay</li></ul><p>Lastly, for anyone else looking to start freelancing, I should stress that all the client work I did this month was already lined up before my freelance switch. If April were a complete cold start for me I'd probably have invoiced nothing, and would be using savings to cover household expenses.</p><h2>Enquiries</h2><p>I received <strong>2 new work enquiries</strong> in April. A lovely surprise! I think they were probably triggered by me announcing myself going freelance, and in doing so, hinting at some sort of availability to the world.</p><p>One of the enquries was a referral from a former colleague. The prospect was looking for consultancy and development for a new digital product for their mid-sized national organisation. Unfortunately I had to politely turn this down, due to lack of my own availability over the coming months.</p><p>The second enquiry was for some light strategic consulting work from a company I've worked with previously. This looks like it will go somewhere, as the work is a good fit for me, the trust with the client exists already, and the time commitment isn't huge. Happy days!</p><h2>Audience building</h2><h3>Website</h3><p>My site homepage received <strong>1137 page views</strong> in April. I'm not too bothered about numbers here right now, I'm just trying to grow organic traffic to the site, and the number of prospective client visits through good SEO and targeted content creation.</p><h3>Blog posts</h3><p>My blog posts received a combined total of <strong>749 views</strong>. Again, it's the first month, so the numbers don't mean much yet. I'm more concerned about blog post views than website views though, as building a collection of valuable and regular content is a long term goal of mine.</p><p>At some point, I want to set up some sort of time-on-page analytics for blog posts, so I can tell if people are actually sticking around to read things in their entirety. If they are, this signals to me that I'm publishing things that are worth their time, and generating some sort of value.</p><h3>Twitter</h3><p>I'm not a natural self promoter, so I find any sort of regular Twitter presence very difficult to stick to. However, it's proven to be a great tool for audience building for a lot of people, so I've made a real effort to Tweet more in April.</p><p>I've tweeted at least once almost every day, and have tried to focus on sharing relevant, useful content with a bit of non-work content mixed in to humanise things. It feels like a lot of hard work for not much return right now. I've had a few likes here, the odd reply there, and a massively impressive… 2 new followers.</p><p>Rather than let very mediocre performance deter me, I've been using <a href="https://analytics.twitter.com" target="_blank" rel="noopener">Twitter analytics</a> to focus on <strong>impressions</strong>, <strong>engagements</strong> and <strong>profile views</strong> from the content I share, rather than followers, which are a bit of a vanity metric. My thinking is that if I can drive engagement up with non-grifty content, the numbers will eventually begin to compound upwards. Let's see.</p><h2>Reflections</h2><p>I took on too much in my first month of freelancing. I was able to keep all of my <em>client</em> work inside a 40 hour work week, but anyone who's worked for themselves knows there's much more other work to be done too. Admin, finances, marketing, sales and content creation all take significant time, and these ended up running into evenings and weekends in April. I need to make sure these tasks are being completed within work hours rather than being squeezed around already full days.</p><p>One of my goals for this year is to release a digital product of my own too. Besides dismissing a few half-baked ideas, I didn't make any progress on this in April. I need to take concrete steps towards making a digital product a reality in May.</p><p>I also realised in April that I need some time off. The UK has been in some sort of lockdown throughout 2021 so far, and as a result there's not been too much to do other than work since November last year. This has left me feeling tired, easily distracted, and uninterested in my work. Now that the lockdown is easing slightly, and the weather is better, I think it's probably a good time for me to get away from my computer for a week and do something different.</p><h2>Goals</h2><p>I have 5 goals for May. All but the last item in this list are things I have direct control over, and so this should be achieveable:</p><ol><li>Take a week off.</li><li>Write a blog post focused on product engineering.</li><li>Tweet every working day, trying to be insightful.</li><li>Put together 3 product ideas that I think could work, and analyse viability of each.</li><li>Generate enough revenue to cover living expenses and investment goals again.</li></ol><p>That's all for April! You should <a href="https://twitter.com/mcarterj" rel="noopener" target="_blank">follow me on Twitter</a> if you want to see how this freelancing adventure develops for me. I also have a <a href="https://mcarter.me/rss.xml" rel="noopener" target="_blank">RSS feed</a> on this site if you'd just like to keep track of new posts on this blog.</p>
    ]]></content:encoded>
  </item>
  <item>
    <title>Moving on from Leaf</title>
    <pubDate>Fri, 19 Mar 2021 13:00:00 GMT</pubDate>
    <link>https://mcarter.me/posts/moving-on-from-leaf</link>
    <guid>https://mcarter.me/posts/moving-on-from-leaf</guid>
    <description>Leaf is closing its doors in April 2021. Here's why we're winding down a profitable agency business, and what I plan to do next.</description>
    <content:encoded><![CDATA[
      <p>In 2015, <a href="http://chrisannetts.com" target="_blank" rel="noopener">Chris Annetts</a> and I set up our small remote digital agency, <a href="https://weareleaf.com" target="_blank" rel="noopener">Leaf</a>, while we were still employed at our previous jobs. We went full time with Leaf in 2016, and have enjoyed a great deal of success over the last 5 years thanks to a combination of amazing clients, a smart and hard-working team, and loyal friends within the industry. However, a short while ago I approached Chris about wanting to wind the company down and my desires to pursue a solo development career.</p><h2>Why I'm going solo</h2><p>I did a lot of introspection at the start of 2021, and decided I'd like to change my work in three big ways that weren't compatible with running an agency full time.</p><h3>Control over my time</h3><p>My 20s were a bit of a blur. Much of that time was spent working hard to do grown-up things like buy a house, get experience in your chosen career, and save/invest any spare money&nbsp;I had for the future. I did a lot outside of work too, but I was always going with the flow, rather than making deliberate decisions about how I lived.</p><p>I'm now 32, and while I love my work, I want to be more careful with how I spend my time. Going solo will give me more flexibility to arrange my work around my life, rather than my life around my work. This doesn't necessarily mean I'll work fewer hours overall, but it does mean waving goodbye to the restrictions of a standard 9 to 5.</p><h3>Trying new things</h3><p>Throughout my career I've found it difficult to make time to experiment with new technologies, ideas, and directions, despite having a strong desire to do so. Commitments to organisations, clients, and employees have always come first.</p><p>Going solo allows me to make quick decisions around my work and take bigger risks knowing I'm not going to impact negatively on others. If I want to spend hours a week on a digital product, I can just decide to do so. If I want to try a different approach to anything, I can just do that too.</p><h3>Playing to my strengths</h3><p>I like to work closely with people on code and product problems, and I'm naturally suited to long periods of singularly-focused effort. I'm good at this, and it's always made me happy, so it seems wrong not to work in this way as much as I can.</p><p>Unfortunately, running an agency demands a lot of shallow work time that just doesn't gel with my particular brain chemistry. The more Leaf grew, the more it became apparent I was heading in a direction that took me away from the work I loved.</p><h2>What I'll be doing next</h2><h3>Consulting</h3><p>From April 2021 I'll be working as a freelance development consultant with a focus on helping organisations get digital products to market. I love all the new technologies available on the web today, but I believe we've over-complicated web application development to an absurd degree as an industry. I'd like to work against that trend by helping organisations get their digital products off to the best start with solid foundations, room to scale, and costs under control.</p><h3>Product development</h3><p>Alongside my freelancing, I'll be taking time each week to begin building my own digital product. This will dovetail nicely in with my client work, showing I practice what I preach, but will also help contribute towards growing my streams of income over the next few years.</p><h3>Writing</h3><p>Lastly, I'm going to be blogging about my journey as a solo developer and consultant. I'll keep things open by sharing details on the financials of the endeavour as I go, as well as other juicy insights as I build in public.</p><p>If you'd like to follow me on my journey, I'll be sharing everything on <a href="https://twitter.com/mcarterj" target="_blank" rel="noopener">Twitter</a>. I also have a RSS feed on this site if you're cool like that. There'll be more tweets than blog posts, but I aim to keep it valuable and non-grifty on both fronts.</p>
    ]]></content:encoded>
  </item>
  <item>
    <title>The economics of JavaScript web apps</title>
    <pubDate>Sun, 23 Feb 2020 13:00:00 GMT</pubDate>
    <link>https://mcarter.me/posts/the-economics-of-javascript</link>
    <guid>https://mcarter.me/posts/the-economics-of-javascript</guid>
    <description>Your single page JavaScript web app probably doesn't make you as much money as its old-school alternative. Sorry.</description>
    <content:encoded><![CDATA[
      <p>A good portion of my career has been spent building single page JavaScript web applications, or otherwise using JavaScript to build for the web. I was playing with Digg's API back when Web 2.0 was a thing, picked up jQuery when that got big, did my CoffeeScript phase, spent a few years with Backbone, and now 6 years using React.</p><p>In all this time, I've learned that while incredibly powerful, <strong>doing JavaScript properly on the front end can be very expensive.</strong></p><h2>Diminishing gains</h2><p>With web applications, value gained vs. money spent isn't exponential, or even linear - the gains are often diminishing. Getting from 80% valuable to 100% valuable doesn't require an extra 20% of development spend, it often requires an extra 100% or more.</p><p>Our industry is lead by hyper-profitable tech giants, for whom spending this additional money makes sense. A good example is Facebook, where React is used to build advanced front-ends, delivering maximum revenue for the company.</p><p>For Facebook, maximising revenue might mean hundreds of millions of additional dollars on their bottom line. The sheer scale of their operation means it's a no-brainer to spend the money required to go full JavaScript, handling all of the following pitfalls:</p><ul><li>What if the JavaScript is slow to arrive?</li><li>What if the JavaScript doesn't load at all?</li><li>What if the JavaScript isn't interpreted as intended by my browser?</li><li>What if a cached version of the JavaScript is loaded that isn't compatible with a new API?</li><li>What if the user has JavaScript disabled?</li><li>What if the user's connection is really slow, and data requests initiated by the JavaScript fail to respond?</li><li>What if the user is using a very underpowered device that can't handle the JavaScript?</li><li>What if the user has a browser extension installed that interferes with the JavaScript?</li></ul><p>A lot of us aren't like Facebook though. We work with much smaller businesses where the cost of handling JavaScript's pitfalls is proportionally much higher. The economics don't work the same way, and a JavaScript web application is comparitively expensive to implement properly. So expensive, in fact, that instead of handling the pitfalls, we often just accept that some customers will be unable to use our app.</p><h2>Round trips and progressive enhancement</h2><p>Most small and medium sized organisations are better off building with <strong>plain old HTML and CSS</strong>, using <strong>round trips to the server</strong>, and a <em>sprinkling</em> of JavaScript that <strong><a href="https://www.smashingmagazine.com/2009/04/progressive-enhancement-what-it-is-and-how-to-use-it/" rel="noopener" target="_blank">progressively enhances</a></strong> a solid, economical foundation.</p><p>This old-school approach yields a nice binary page load; either the HTML loads and can be interacted with, or it doesn't and can't. Rather than having to negotiate JavaScript's pitfalls, this approach makes it cheap to build a working web application for all of your users - users who you can bet will have lower-powered devices, on slower connections, running older software than your development team.</p><p>In the vast majority of cases the quality of the web application doesn't suffer from this approach, it gets better instead. Pages still load quickly, elements are still styled nicely, and JavaScript is still there doing its thing. The only difference is you're building from stable foundations by default, and putting in the extra time to progressively enhance where it makes sense.</p><h2>Keeping JavaScript in its place</h2><p>This isn't to say single page JavaScript web applications never make sense, because they sometimes do. It's just that most web applications being built today are simply user interfaces that store and retrieve information from a database. They're not putting a dent in the universe, but they do need to deliver value in organisations where a developer's salary is a pretty significant source of cost.</p><p>We developers need to be more cognizant of the economics of our work, and build our apps accordingly. Most development teams starting JavaScript web applications today won't consider the pitfalls listed above <strong>at all</strong>. They'll just start building, and assume their experience is everyone else's experience too. As a result, some of their customers won't get to use their application, and their business misses out. I am definitely guilty of making this mistake.</p><p>So, next time you're building a new web application, consider the economics of your approach and then proceed accordingly. More often than not, you'll find you can create a high quality production-ready product using just HTML &amp; CSS. From there you can progressively enhance with something like React where there's clear value in doing so, safe in the knowledge you're not going to be turning customers away, or spending more of your company's money than necessary to deliver a great product.</p>
    ]]></content:encoded>
  </item>
  <item>
    <title>Fix the right problems in your code</title>
    <pubDate>Sun, 02 Feb 2020 13:00:00 GMT</pubDate>
    <description>We spend too much time making vanity improvements to our code, while failing to make refactors that affect the long-term quality of our software. We need to do better.</description>
    <link>https://mcarter.me/posts/fix-the-right-problems</link>
    <guid>https://mcarter.me/posts/fix-the-right-problems</guid>
    <content:encoded><![CDATA[
      <p>When we save for the future, we tend to start by cutting out small and unnecessary expenses. Not buying $5 lattes, avoiding branded items at the supermarket, or getting in a couple of drinks at home before going out. These all seem like sensible ways to claw back a bit of cash at the end of each month.</p><p>However, most of us fail to take action on longer term opportunities for wealth creation. We pay compounding interest on bad debt, our savings get eroded by inflation, and we purchase liabilities rather than assets.</p><p>We mean well, but we struggle to save $100 per month while missing opportunities that could grow to $1,000,000 over a lifetime. We fix the wrong problems.</p><h2>The wrong problems in code</h2><p>As developers, we tend to fix the wrong problems in our code too. Take the following basic example:</p><img class="code-sample" src="https://mcarter.me/assets/images/posts/fix-the-right-problems/badcode.webp" alt="getsBigger - a slightly verbose, slightly hard to read function"><p>This function returns <span class="code">true</span> if each number in a given array increments by one from the number that preceeded it (e.g. 1, 2, 3), and <span class="code">false</span> if not (e.g. 1, 3, 2). It's a little verbose, but with 15 minutes of refactoring we could transform it into something more clear and concise.</p><p>If we did refactor for clarity and brevity, it'd be tempting to think we'd spent our time well. However, taking into account the wider context of a whole codebase, we'd see the biggest issue isn't how the function is written, it's actually the function name. <span class="code">getsBigger</span> is both misleading and ambiguous.</p><p>Any developer seeing <span class="code">getsBigger</span> in use is likely to mininterpret its operation from its name alone. This wastes time, reduces the readability of the codebase, and increases the likelihood of accidental bugs through misuse. By contrast, the code within <span class="code">getsBigger</span> is actually a non-issue. It works, it's reasonably efficient, and it's unlikely to need to change.</p><p>Most developers will opt to rewrite the function, but the best value improvement we could make to <span class="code">getsBigger</span> would probably be to rename it to clearly convey its purpose. Something as quick as a find and replace across the codebase would mean every future developer could confidently use the function without needing to see how it's implemented. We'd be making a small change that pays off big over the long term, and we'd be fixing the right problem.</p><p><strong>This is not laziness!</strong> Refactoring <i>without</i> considering value is the lazy way to go. Taking time to think about improvements that deliver long term compounding benefits takes effort, and the right refactor to make isn't always the obvious or large one.</p><p>Software development is very expensive. As an industry, we need to be better at recognising this, and making pragmatic tradeoffs between time invested, and value delivered. We need to resist the vanity improvements, and look at the larger context to see where the value lies.</p><h2>How to choose what to refactor</h2><p>How best to improve a codebase is highly subjective, but I've found a good way to keep myself improving the right things is to regularly ask myself these sorts of questions:</p><ul><li>How does this software affect the bottom line of the business?</li><li>What's the roadmap for this software?</li><li>How will the demands on this software change?</li><li>How will the number of people using this software change?</li><li>Based on its current trajectory, what will this codebase be like in 6, 12, and 24 months time?</li><li>Which parts of this codebase churn, and which don't?</li><li>What's the development team like that work on this project?</li><li>What aspects of this codebase make it difficult to get work shipped?</li><li>What parts of this codebase confuse developers?</li><li>Which parts of this codebase require esoteric knowledge?</li></ul><p>Thinking about these for your own work will help you identify better refactors to make, and more effectively fight the never-ending battle against pernicious technical debt on your software projects. Good luck, and happy refactoring!</p>
    ]]></content:encoded>
  </item>
  <item>
    <title>Twitter makes me feel bad</title>
    <pubDate>Sat, 04 Jan 2020 13:00:00 GMT</pubDate>
    <description>Twitter has some great web development chatter. However, it also makes me feel like a fake and a failure. Here's why, and what I intend to do about it.</description>
    <link>https://mcarter.me/posts/twitter-makes-me-feel-bad</link>
    <guid>https://mcarter.me/posts/twitter-makes-me-feel-bad</guid>
    <content:encoded><![CDATA[
      <h2>Not achieving enough</h2><p>Twitter feeds me a constant highight reel of work and life achievements. New code library releases, new app releases, new product features, new blog posts, new videos, new interviews, and most frequently of all - hot new takes.</p><p>When you've spent the entire week solving problems that aren't world changing, Twitter can leave you feeling like you've achieved nothing at all. The sad part is, this can even happen when you know you've done lots of valuable work.</p><h2>Not talented enough</h2><p>The basic premise of Twitter is that you follow people you're interested in, and share content you think others might find interesting. This can create a healthy platform for learning, socialising, and sharing your work.</p><p>However, if like me, you use Twitter to follow the best and brightest in your industry, your perspective quickly becomes skewed towards feeling distinctly average about yourself. It's very easy for this to happen when your view of your industry is the content shared from the top 1% of talent on the planet.</p><h2>Not social enough</h2><p>Twitter makes me feel like a shy kid at a party. I'm constantly wanting to say things, but I don't in case something bad happens. What if I've misunderstood something? What if people don't find my joke funny? What if nobody cares about the thing I think is cool? Worst of all, what if I accidentally say something un-woke and have my career ruined over a misunderstanding?</p><p>Twitter rewards confidence, extroversion, clear communicators, and quick-wittedness. If you're none of these things, using Twitter can actually be a tiring, even emotionally draining experience. You feel bad about not Tweeting enough, feel bad about Tweeting and getting no engagement, or feel bad when someone takes something you've said the wrong way.</p><hr><h2>What can I do about this?</h2><p>Despite everything I've said above. I actually enjoy using Twitter on the whole. It feels like the right format for a social network to me. I also believe that as a company owner, having some sort of social media presence is important.</p><p>When I really get introspective, I also realise the issues I've highlighted aren't actually problems with Twitter at all. What I'm experiencing are my own insecurities, Twitter is just surfacing them. In response, I've decided to remind myself of the following when using Twitter.</p><h3>Comparison is the thief of joy</h3><p>The only person I should be comparing myself to is my past self. Also, I need to remember that I've chosen to follow high achievers on Twitter because I want to learn and improve. I shouldn't feel bad that they're outperforming me.</p><h3>Work doesn't need to be shared to be valuable</h3><p>Some of the most valuable work I've done in my career is unbelieveably mundane. I should seek a sense of achievement from working on projects I care about, and not feel I have to make a show of things to be worthwhile.</p><h3>Stop worrying so much about what people think</h3><p>People will disagree with me, that's fine. People won't find what I have to share interesting, that's fine too. Nobody is dwelling on my Twitter activity, or lack thereof, I shouldn't either.</p><h3>Nobody can define success for you</h3><p>Success isn't money in the bank, code written, content shared, a follower count, travelling for conferences, or hours worked per week. Success is achieving what I set out to do, nothing more, nothing less.</p>
    ]]></content:encoded>
  </item>
  <item>
    <title>Things I wish I understood before starting an agency</title>
    <pubDate>Sat, 26 Oct 2019 13:00:00 GMT</pubDate>
    <description>In 2015 I started a digital agency. As an employee who made the switch to running a business, here are some things I wish I'd understood before starting.</description>
    <link>https://mcarter.me/posts/before-you-start-an-agency</link>
    <guid>https://mcarter.me/posts/before-you-start-an-agency</guid>
    <content:encoded><![CDATA[
      <h2>Keep learning</h2><p>You'll find yourself needing to know a little on a broad range of subjects like finance, marketing, sales, management, business, economics, and law. You can learn these on an ad-hoc basis, but it's a time consuming process.</p><p>Podcasts and audiobooks are very helpful for building this knowledge. They allow dog walks, gym sessions, or long drives to double up as learning opportunities.</p><h2>Sell your head</h2><p>Some clients see you as a pair of hands, there to implement their ideas. Others will see you as a true expert in your field, there to guide their thinking.</p><p>Selling your expertise is where your true value lies, but it's hard to do if you're not seen as an expert from the beginning. Establish an expert position early on in each client relationship, and make sure your value is driven primarily from your ideas.</p><h2>Work is not your product</h2><p>Your agency may spend a lot of time writing code, but you're not paid for code. You may even build beautiful software products, but you're not paid for software either.</p><p>You are paid for delivering a desired outcome for each client you work with. Make sure there's no confusion about what this outcome is, keep it front and centre, and let it guide your decision making.</p><h2>Value is subjective</h2><p>The exact same work may worth £5,000, and £50,000 to two different clients. Take steps to figure out what value you're delivering, and charge an amount that keeps the exchange worthwhile for both parties.</p><p>This isn't greed, it's professionalism. By ensuring everyone involved benefits from a good work, you incentivise everyone to work together efficiently, effectively, and to the best of their ability.</p><h2>People skills matter</h2><p>You probably decided to start a business because you posess a set of valuable technical skills that you thought could be better put to use if you were your own boss.</p><p>While your technical knowledge is key, actually getting the opportunity to use it to deliver successful change to your clients will depend on your ability to understand, emphathise, translate, explain, teach, and lead.</p><p>Don't underestimate ths importance of developing these softer skills. Most technical employees are very shielded from the people side of the organisation they work in. As your own boss, you won't be.</p><h2>Keep marketing</h2><p>When you're busy, marketing can feel a bit like handing out flyers for a sold out gig. However, being constantly a little oversubscribed provides income stability, keeps you aware of new opportunities, increases the amount you can charge for your work, and lets you choose who to work with.</p><p>A good marketing funnel takes time to develop. You don't want to be scrambling to build one once you're already in a quiet period. Make time for marketing from the beginning, and improve as you go.</p><h2>Pick a niche</h2><p>You're probably able to use your skills to solve a broad range of problems for clients reasonably well. Unfortunately, so can loads of people.</p><p>Aim to be one of a few businesses with true expertise in doing what you do. This will make you an obvious choice for anyone looking for help with your niche. You'll also likely be solving the similar problems for each new client you work with, perpetuating a virtuous cycle of learning, experience, efficiency, and expertise.</p><h2>Size matters</h2><p>For an engagement with a lot of implementation work, clients will sometimes choose a larger, technically mediocre agency over your smaller technically brilliant one. This will seem like a lack of confidence in your technical abilities, but it's not.</p><p>From a business point of view, the deep bench and established nature of a larger agency just make them a safer bet when there's a lot of implementation work to be done.</p><p>When you're starting out, you can make yourself more attractive by building a bench of your own, developing specific expertise that makes you the obvious choice in spite of your size, and selling your knowledge rather than your implementation.</p><h2>Build some runway</h2><p>When you land your first big client, it can be tempting to feel like you've made it, and start spending. Resist this urge.</p><p>Before you're established, losing a client or having unexpected costs to deal with can easily topple your business. Having several months of payroll in the bank will give you room to manoeuvre, and peace of mind to make clear-headed decisions about how to move forward.</p><p>When you have employees, cash becomes even more important. Don't rely on luck. Know your burn rate, and give yourself a generous runway.</p><h2>You can fire your clients</h2><p>Sometimes a client relationship will degrade to the point of being unsalvageable. In those cases it can be appropriate to fire your client, and it's sometimes the best way forward for everyone involved.</p><p>A firing needn't be abrupt. You can wind things down over a month or two for a clean and easy break, or seamlessly transition the client over to someone else who's a better fit for their needs.</p><h2>Grow without hiring</h2><p>Hiring is not the only way to grow your business. You can stay physically small, but do more valuable work with larger clients as your expertise develops. Alternatively, you can build a bench freelancers while keeping your core team small, like a tap of expertise you can turn on or off as required.</p><p>At <a href='https://weareleaf.com' target='_blank' rel='noopener'>Leaf</a>, we've found a mix of hiring, and working with known and trusted freelance subject matter experts has helped to smooth out heavy workloads, and improved the quality of our output.</p><h2>Anything can be a mentor</h2><p>Mentorship will be incredibly valuable for helping you learn and make good decisions, but it doesn't need to be a one-on-one activity, or even come from a person.</p><p>A relevant blog post, podcast, audiobook, presentation, or online discussion group can all be forms of mentorship. Don't feel like if you're not constantly able to travel meet people you can't be mentored.</p><h2>You can't outwork busy</h2><p>If you've got too much on your plate, you need to work less, not more, to get on top of it. Trying to outwork busy doesn't work, because if you're doing your job right, each piece of work will result in even more work being offered back to you in return.</p><p>Like a throttle on a car, your pace of work needs to be consciously controlled to avoid a runaway acceleration and you repeatedly butting up against your physical and mental limits.</p><h2>Remain dispassionate</h2><p>Too much passion for your business will make your life an unbearable emotional rollercoaster. Your business isn't a success if it's making you miserable, and a lot of what happens will be outside of your circle of direct control.</p><p>From a certain perspective, your business is just a game. Treat it as such. Do your best, but don't expect to win every time, and don't get too emotionally invested.</p>
    ]]></content:encoded>
  </item>
  <item>
    <link>https://weareleaf.com/blog/putting-amazon-textract-to-the-test</link>
    <guid>https://weareleaf.com/blog/putting-amazon-textract-to-the-test</guid>
    <title>Putting Amazon Textract to the test</title>
    <pubDate>Tue, 17 Sep 2019 13:00:00 GMT</pubDate>
    <description>Amazon Textract extracts text and structured data from scanned or photographed documents, but how reliably can it be used for business process automation? We put it to the test.</description>
  </item>
  <item>
    <link>https://weareleaf.com/blog/how-to-thrive-in-an-automated-business-world</link>
    <guid>https://weareleaf.com/blog/how-to-thrive-in-an-automated-business-world</guid>
    <title>How to thrive in an automated business world</title>
    <pubDate>Tue, 20 Aug 2019 13:00:00 GMT</pubDate>
    <description>How can your business thrive when you're constantly being disrupted by leaner, faster, more automated competition on a global scale?</description>
  </item>
  <item>
    <link>https://weareleaf.com/blog/automate-where-it-matters-with-process-maps</link>
    <guid>https://weareleaf.com/blog/automate-where-it-matters-with-process-maps</guid>
    <title>Automate where it matters with process maps</title>
    <pubDate>Tue, 16 Jul 2019 13:00:00 GMT</pubDate>
    <description>We've experienced how competing stakeholders, unclear ROIs, and uncertainty can make committing to business automation difficult. Process maps provide a powerful way to clear the fog.</description>
  </item>
  <item>
    <link>https://weareleaf.com/blog/goals-matter</link>
    <guid>https://weareleaf.com/blog/goals-matter</guid>
    <title>Goals matter</title>
    <pubDate>Tue, 18 Jun 2019 13:00:00 GMT</pubDate>
    <description>Without a clear definition of success, it's hard to know which direction to take, or whether you're making any progress. Goals provide direction and clarity for your teams.</description>
  </item>
  <item>
    <link>https://weareleaf.com/blog/the-power-of-small-development-phases</link>
    <guid>https://weareleaf.com/blog/the-power-of-small-development-phases</guid>
    <title>The power of small development phases</title>
    <pubDate>Mon, 17 Dec 2018 13:00:00 GMT</pubDate>
    <description>Imagine this scenario - someone in your company proposes a new software feature with the potential to save the business ...</description>
  </item>
  <item>
    <link>https://weareleaf.com/blog/a-home-office-for-productivity</link>
    <guid>https://weareleaf.com/blog/a-home-office-for-productivity</guid>
    <title>A home office for productivity</title>
    <pubDate>Thu, 02 Aug 2018 13:00:00 GMT</pubDate>
    <description>At Leaf, we embrace remote work to get a productive edge. However, it's easy for a remote environment to work against you.</description>
  </item>
  <item>
    <link>https://weareleaf.com/blog/behavioural-traps-in-software-teams</link>
    <guid>https://weareleaf.com/blog/behavioural-traps-in-software-teams</guid>
    <title>Behavioural traps in software teams</title>
    <pubDate>Mon, 21 May 2018 13:00:00 GMT</pubDate>
    <description>In my experience of software teams, there are a few behavioural traps that leaders (senior stakeholders ...</description>
  </item>
  <item>
    <link>https://weareleaf.com/blog/working-too-much-please-stop</link>
    <guid>https://weareleaf.com/blog/working-too-much-please-stop</guid>
    <title>Working too much? Please stop</title>
    <pubDate>Mon, 20 Nov 2017 13:00:00 GMT</pubDate>
    <description>These days, people in most organisations are encouraged to work in their personal time ...</description>
  </item>
  <item>
    <link>https://weareleaf.com/blog/5-tips-for-actually-shipping-a-side-project</link>
    <guid>https://weareleaf.com/blog/5-tips-for-actually-shipping-a-side-project</guid>
    <title>5 tips for actually shipping a side project</title>
    <pubDate>Wed, 29 Mar 2017 13:00:00 GMT</pubDate>
    <description>We took Howdy, our own little app, from an idea to a fully published SaaS application entirely in our spare time. During its development...</description>
  </item>
  <item>
    <link>https://weareleaf.com/blog/there-are-no-excuses-for-poor-engineering-in-2017</link>
    <guid>https://weareleaf.com/blog/there-are-no-excuses-for-poor-engineering-in-2017</guid>
    <title>There are no excuses for poor engineering in 2017</title>
    <pubDate>Thu, 02 Mar 2017 13:00:00 GMT</pubDate>
    <description>Writing great code is easier than ever, and yet we act like it doesn't matter.</description>
  </item>
  <item>
    <link>http://tech.holidayextras.co.uk/2015/03/18/5-tips-for-a-smoother-code-review-process/</link>
    <guid>http://tech.holidayextras.co.uk/2015/03/18/5-tips-for-a-smoother-code-review-process/</guid>
    <title>5 tips for a smoother code review process</title>
    <pubDate>Wed, 18 Mar 2015 13:00:00 GMT</pubDate>
    <description>Some tips for a better code review process based on my experiences working at Holiday Extras.</description>
  </item>
  <item>
    <link>http://tech.holidayextras.co.uk/misc/2014/03/09/taming-technical-debt/</link>
    <guid>http://tech.holidayextras.co.uk/misc/2014/03/09/taming-technical-debt/</guid>
    <title>Taming your Technical Debt</title>
    <pubDate>Sun, 9 Mar 2014 13:00:00 GMT</pubDate>
    <description>What I learned about getting technical debt within a large team under control while working at Holiday Extras.</description>
  </item>
  <item>
    <link>http://tech.holidayextras.co.uk/mobile/2014/01/20/getting-performance-cordova-based-application/</link>
    <guid>http://tech.holidayextras.co.uk/mobile/2014/01/20/getting-performance-cordova-based-application/</guid>
    <title>5 tips for great performance from your Cordova app</title>
    <pubDate>Mon, 20 Jan 2014 13:00:00 GMT</pubDate>
    <description>Back from the days before React Native, some tips for getting the best performance possible from a Cordova based mobile app.</description>
  </item>
</channel>
</rss>
