<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Elliot Blackburn]]></title><description><![CDATA[Musings and essays on software, teams, and organisations.]]></description><link>https://www.elliotblackburn.com/</link><image><url>https://www.elliotblackburn.com/favicon.png</url><title>Elliot Blackburn</title><link>https://www.elliotblackburn.com/</link></image><generator>Ghost 5.75</generator><lastBuildDate>Fri, 23 Feb 2024 08:07:52 GMT</lastBuildDate><atom:link href="https://www.elliotblackburn.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Tailscale vs NordVPN, Mullvad, etc]]></title><description><![CDATA[There's a lot of confusion around the differences between services like Tailscale and ZeroTier (VPN's), and services like NordVPN or Mullvad (Proxies). While these two types of services both technically use VPN technology, they accomplish very different things.]]></description><link>https://www.elliotblackburn.com/tailscale-vs-nordvpn-mullvad-etc/</link><guid isPermaLink="false">65d4d330900ed000013f2b68</guid><dc:creator><![CDATA[Elliot Blackburn]]></dc:creator><pubDate>Tue, 20 Feb 2024 16:37:01 GMT</pubDate><content:encoded><![CDATA[<blockquote>This was originally posted as a <a href="https://www.reddit.com/r/Tailscale/comments/1aurz1a/comment/kr6z3im?ref=elliotblackburn.com" rel="noreferrer">reply to a reddit question</a>. After having written something similar many times, I thought it might be useful to have a blog post which I can point people towards.</blockquote><p>There&apos;s a lot of confusion around the differences between services like Tailscale and ZeroTier (VPN&apos;s), and services like NordVPN or Mullvad (Proxies). While these two types of services both technically use VPN technology, they accomplish very different things.</p><p>This is a topic people seem to trip over all the time, and it&apos;s really unfortunate that proxies have decided to go with the &quot;VPN&quot; language. I will admit, they do use a VPN under the hood, but the the actual functionality they offer is really just proxying traffic.</p><h2 id="virtual-private-networks"><strong>Virtual Private Networks</strong></h2><p>A VPN is a Virtual Private Network. The original use case, and still very much in use, is to create some sort of private network sitting on top of another physical network. The clearest cast for this is the Corporate VPN. You setup a Virtual Private Network ontop of the internet using a tool like Wireguard or OpenVPN. The Corporate VPN lets a remote device connect to one in the physical office, or maybe some cloud server running in AWS or what have you. This VPN service requires you to have a certificate or credentials provided by the corporation. It can give three things, depending on the needs and configuration:</p><ol><li>Authentication that identifies you as an employee of the company</li><li>Authorisation which will determine what you can access</li><li>Encrypted data transport which lets data be transported over physical networks like the internet without being readable by others.</li></ol><p>As a minor implementation note, many of these kinds of VPN&apos;s will only put traffic destined for the private network over the VPN transport. This makes the load on the VPN lower. It basically means your traffic destined for netflix goes over your normal non-VPN connection, but your traffic for database access to an internal application goes via the VPN tunnel.</p><p>Tailscale is this, with a beautiful interface (both command line, and web wise) and some additional features built on top, such as MagicDNS. Tailscale uses Wireguard under the hood which is an open source VPN tunnel which you could use on it&apos;s own if you wished.</p><h2 id="proxies"><strong>Proxies</strong></h2><p>NordVPN, Mullvad, and all the others are more like traffic proxies, which use VPN technology. The goal here isn&apos;t to provide secure access to private resources, if you tried to do this you&apos;d more likely open security flaws in your system than anything. Instead you&apos;re joining a VPN with loads of other users from around the world. Typically these VPN&apos;s take all of your traffic and send it through their servers, before it then exits to the wider world.</p><p>When you have thousands of random people from across the globe accessing services via a cluster of VPN exit points, you get the potential for anonyminity (huge asteriks here). In this case your ISP sees you&apos;re sending encrypted packets (via something like wireguard) to an IP address and nothing else. They don&apos;t know what the traffic is though because the destination is just one of the VPN&apos;s entry points, not a server with an IP owned by netflix.com.</p><p>On top of this, these proxies can then choose where your traffic exists. This gives you the fabled ability to &quot;appear from anywhere in the globe&quot;, and access content that&apos;s region locked.</p><p>NordVPN and Mullvad are there to help you blend into the crowd, and appear as if your data is coming from somewhere you&apos;re not. It&apos;s very much a privacy tool, at least from your ISP. Netflix still know how you are, because you&apos;re logged in with an email and password. The VPN also knows who you are because you&apos;re logged into them, and they know what you&apos;re accessing because you&apos;re sending data via them for netflix. HTTPS and DoH both help you a bit here, but it&apos;s not perfect and outside the scope of this already massive response.</p><h2 id="what-about-tailscales-exit-node-feature">What about Tailscale&apos;s &quot;Exit Node&quot; feature?</h2><p>Tailscale has an exit-node functionality. This is brilliant if you need to have all your traffic appear as if it&apos;s coming from a device you own. An example would be if you&apos;re travelling to a country your bank block access from. If you&apos;ve setup an exit node before hand, you can proxy your traffic over your tailscale network and have it exit at, for example, your home desktop. Now your bank think you&apos;re accessing your account from home, even though you&apos;re in another country. But this exit node is a private one for you, it does not give you any ability to &quot;blend into the crowd&quot;. It also doesn&apos;t hide traffic from your ISP if your exit node is at home of course.</p><h2 id="in-summary">In summary...</h2><p>Tailscale <em>is</em> a VPN, but very much focused on giving you a private network of your own. Mullvad, NordVPN and co are also VPN&apos;s, but you&apos;re joing a giant network with the aim of becoming somewhat anonymous to outside eyes (again, huge asterisks here).</p><p>Both have their uses, they do overlap to some degree, and Tailscale even lets you use Mullvad as an exit node to get all of the above at once. But that said, you may not always want or need them all.</p>]]></content:encoded></item><item><title><![CDATA[Upgrading to Ghost 5 and MySQL 8 with Docker-Compose]]></title><description><![CDATA[<p>I&apos;ve been using Ghost to run this blog for several years now. About 6 months ago I moved away from ghost-cli and started running it through docker-compose as it lined up with everything else I was hosting on my dedicated hetzner server.</p><p>The Ghost 5 upgrade is quite</p>]]></description><link>https://www.elliotblackburn.com/upgrading-to-ghost-5/</link><guid isPermaLink="false">645a2c5b60be320001cedd51</guid><dc:creator><![CDATA[Elliot Blackburn]]></dc:creator><pubDate>Tue, 09 May 2023 12:10:42 GMT</pubDate><content:encoded><![CDATA[<p>I&apos;ve been using Ghost to run this blog for several years now. About 6 months ago I moved away from ghost-cli and started running it through docker-compose as it lined up with everything else I was hosting on my dedicated hetzner server.</p><p>The Ghost 5 upgrade is quite significant as it requires the use of MySQL 8 where as I was still using MySQL 5 &#x1F648;. I posted briefly about my approach on this <a href="https://github.com/docker-library/ghost/issues/309?ref=elliotblackburn.com#issuecomment-1139508338">GitHub Issue</a> but figured it may be useful to go into more detail for anyone who wants a bit more explanation.</p><h2 id="starting-state">Starting state</h2><p>My starting state was pretty simple, I was running Ghost 4.44 and MySQL 5. I was also using file mounts for my data storage, however this guide should work just fine if you&apos;re using volumes.</p><pre><code class="language-yml">version: &apos;3.7&apos;

services:

  ghost:
    image: ghost:4.44-alpine
    restart: always
    depends_on:
      - db
    ports:
      - &quot;127.0.0.1:3400:2368&quot;
    volumes:
      - ./content:/var/lib/ghost/content
      - ./config.json:/var/lib/ghost/config.production.json
    env_file:
      - ./db.env

  db:
    image: mysql:5
    restart: always
    volumes:
      - ./data:/var/lib/mysql
    env_file:
      - ./db.env</code></pre><h2 id="step-1take-a-full-backup">Step 1 - Take a full backup</h2><p>I&apos;m going to be changing database versions as well as a major upgrade of the ghost application. Given the scale of those changes it would be silly to go any further without a full backup. How you do this is up to you and will depend a little on your setup, here are a few approaches.</p><p>First, take an export from the ghost admin interface. This won&apos;t be perfect as it doesn&apos;t export any media but it will give you post content, tags, pages, users, and newsletter members. It&apos;s so quick and easy to do, I&apos;d recommend doing this anyway.</p><p>Second is a database dump. I have been using a mounted directory for the MySQL data, but none the less I ran a full database dump rather than taking a copy of that directory. Having the raw SQL felt like a safer approach for me, this also has the benefit of working nicely if you&apos;re using volumes as well which I&apos;ll likely move to in the future. Here&apos;s an example command for you to tailor to your needs.</p><pre><code class="language-bash"># The following will execute the mysqldump command on your MySQL container. Make sure to adjust the MYSQL_PWD, container name, and database name to fit your needs. If you&apos;ve got those right you&apos;ll get a file called `db_dump.sql`.

$ docker exec -e MYSQL_PWD=root_password_here -i container_name_here mysqldump -u&apos;root&apos; --databases ghost_prod --skip-comments 1&gt; db_dump.sql</code></pre><p>Finally, take a backup of your media and theme as well if appropriate. My media was stored locally with a file mount so the process for this was just copying and zipping the directory. If you&apos;re using something like S3 your approach will differ. This upgrade shouldn&apos;t touch the media files as far as I can tell, but it&apos;s a good idea to make sure your backup is complete in case something does go wrong for you.</p><h2 id="step-2upgrade-your-mysql-version">Step 2 - Upgrade your MySQL version</h2><p>If you&apos;re already on MySQL 8+, you can skip this step. I was on MySQL 5 though so I had to go through this step as well and I suspect many others will also.</p><p>In this step you&apos;re going to want to replace your mysql version in your docker-compose.yml with <code>mysql:8</code>. In my case I used <code>mysql:8.0.29</code> to pin to a specific version, you may wish to do so too but I&apos;d suggest using the latest of the 8.0 release on dockerhub.</p><p>Once I&apos;d made that change, you then need to tear down the compose containers and bring them back up to ensure the new mysql version is used. Here&apos;s a command for doing that and jumping you into the logs straight after:</p><pre><code class="language-bash"># Take down the compose containers, bring them back up, and follow the logs.

$ docker-compose down \
  &amp;&amp; docker-compose up -d \
  &amp;&amp; docker-compose logs -f</code></pre><p>If all goes well you should end up with your old MySQL container getting removed and a new MySQL 8 container replacing it. Once everything has had a chance to process and you&apos;re seeing the logs, check your blog. Have a click around, login, view some posts and make sure everything is ok. If it&apos;s not then this may be the time to look at restoring from your SQL backup. For me this process went just fine and MySQL seemed to handle it&apos;s upgrade pretty quietly and without a fuss.</p><p>If you need to restore from your SQL backup at this point, here&apos;s a command you can tailor to your needs. You&apos;ll need to run this from a blank slate though so you will need to delete the volume or file mount and re-run the commands above to get to that state. I&apos;d recommend doing so with your ghost container commented out temporarily but your needs may vary here.</p><pre><code class="language-bash"># Execute a command on the MySQL container (container_name_here) using your root mysql password. The mysql command will read input from the db_dump.sql file and execute those MySQL commands. You may need to start from a blank slate for this to work properly.

$ docker exec -e MYSQL_PWD=root_password_here -i container_name_here mysql -u&apos;root&apos; &lt; db_dump.sql</code></pre><p>Once you&apos;re using MySQL 8 successfully and your blog content is all there, you&apos;re ready to upgrade Ghost itself.</p><h2 id="step-3get-to-the-latest-version-of-ghost-4">Step 3 - Get to the latest version of Ghost 4</h2><p>The Ghost team only support major version updates from the latest version of your current major. That means you need to upgrade to 4.48.5 before you try and upgrade to 5.</p><p>To do this you&apos;ll need to change your ghost version tag to <code>ghost:4.48.5</code> and run the same command to tear down and re-run the compose containers.</p><pre><code class="language-bash"># Take down the compose containers, bring them back up, and follow the logs.

$ docker-compose down \
  &amp;&amp; docker-compose up -d \
  &amp;&amp; docker-compose logs -f</code></pre><p><strong>It is important to do this restarting step, as ghost will need to run any remaining database migrations before the major version jump.</strong> If you do not do this part, you&apos;re effectively skipping this step and will be outside the version upgrade support path.</p><p>Once again, check your blog is in working order after doing this. I performed an upgrade from 4.44 up to 4.48 which wasn&apos;t a big jump, if your jump is larger your mileage may vary. Ghost do maintain the upgrade path jumping up minor versions so you shouldn&apos;t need to go from 4.44 to 4.45 to 4.46 etc.</p><h2 id="step-4upgrading-to-ghost-5">Step 4 - Upgrading to Ghost 5</h2><p>Now you&apos;re on MySQL 8, and the latest Ghost 4 version you&apos;re ready to upgrade to Ghost 5. I made the jump straight from 4.48.5 to 5.0.2, you should be able to go to the latest version of 5 without any problems but if you&apos;re nervous you may choose to go to 5.0.2 and then upgrade again to the latest version of 5. This should be unnecessary, but I&apos;ve not tested from 4.48.5 to 5.47.0 (the latest at the time of writing).</p><p>The process is much the same as Step 3, update your ghost version tag and reboot the compose containers.</p><p>For me that was setting the ghost image tag to <code>ghost:5.0.2</code> and running the same command we&apos;ve run a few times already.</p><pre><code class="language-bash"># Take down the compose containers, bring them back up, and follow the logs.

$ docker-compose down \
  &amp;&amp; docker-compose up -d \
  &amp;&amp; docker-compose logs -f</code></pre><p>Check your blog once last time and make sure everything is as you&apos;d expect. You&apos;ll more than likely need to make changes to your theme, be that an upgrade or changing the theme yourself. For that you can follow the guides on the official ghost documentation.</p><h2 id="end-result">End result</h2><p>My final <code>docker-compose.yml</code> file ended up looking like the following. Your ports and volume mounts will differ depending on how you configured your instance originally.</p><pre><code class="language-yml">version: &apos;3.7&apos;

services:

  ghost:
    image: ghost:5.0.2-alpine
    restart: always
    depends_on:
      - db
    ports:
      - &quot;127.0.0.1:3400:2368&quot;
    volumes:
      - ./content:/var/lib/ghost/content
      - ./config.json:/var/lib/ghost/config.production.json
    env_file:
      - ./db.env

  db:
    image: mysql:8.0.29
    restart: always
    volumes:
      - ./data:/var/lib/mysql
    env_file:
      - ./db.env</code></pre>]]></content:encoded></item><item><title><![CDATA[Vision, strategy, process, and accountability]]></title><description><![CDATA[Vision, strategy, process, and accountability form the foundation of a healthy product and engineering organisation.]]></description><link>https://www.elliotblackburn.com/vision-strategy-process-accountability/</link><guid isPermaLink="false">642c357556c05000016de58a</guid><category><![CDATA[organisations]]></category><dc:creator><![CDATA[Elliot Blackburn]]></dc:creator><pubDate>Thu, 06 Apr 2023 21:45:44 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1453728013993-6d66e9c9123a?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDR8fHZpc2lvbnxlbnwwfHx8fDE2ODA4MTcxNzY&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1453728013993-6d66e9c9123a?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDR8fHZpc2lvbnxlbnwwfHx8fDE2ODA4MTcxNzY&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Vision, strategy, process, and accountability"><p>In any product lead tech business, your products and platform will evolve over time as a result of having dedicated professionals working on them continually. The tricky part is ensuring that the evolution results in positive value for the business and employees.</p><p>When I say &quot;positive value&quot;, I&apos;m being intentionally hand-wavy. What is &quot;positive&quot; for one company may not be &quot;positive&quot; for another, and what is &quot;value&quot; for your company may not be &quot;value&quot; for mine. That said, I think we can all point to some examples of positive value for a company and it&apos;s employees. If you wrote a list it might include something like:</p><ul><li>Continued growth opportunities for employees.</li><li>Increased revenue for the business.</li><li>Faster delivery of current and future goals.</li><li>Opening of new potential markets to gain custom from.</li><li>New domains for staff to learn and understand.</li></ul><p>These are all things I&apos;m sure we&apos;d love to create for our company, but actually doing so can be really tricky and opens up new questions. We quickly find ourselves moving from this big picture view of &quot;creating positive value&quot; into &#xA0;the weeds of details around hiring, investment, priorities, and the like. Those details are important, but when we try to jump from one to another we end up with more questions than answers. When this dotting between big picture and small details happen, we end up putting our organisation into a reactive mode and this is bad.</p><p>Reactive mode means lack of direction, and control, it means no one knows what&apos;s coming next, or what the end of the week will look like. It&apos;s a one way trip to burn out. What&apos;s more, when you step back and look at the big picture at the end, it&apos;s a huge mess! Specific iniatives may be really beautifully done, but there are just as many with no coherance built on a mountain of compromise. When we&apos;re constantly dotting from big picture to small details with few steps in between, we&apos;re missing some extremely important steps in the process.</p><p>Vision, strategy, process, and accountability form the foundation of a healthy product and engineering organisation. They help you walk from big picture all the way down to the details. They lay out how that happens for the organisation, and ensure decisions are considered in relation to the organisations values, and goals. They ensure an organisation spends most of it&apos;s time operating in a forward looking fashion, rather than in a state of perpetual reaction.</p><h2 id="vision">Vision</h2><p>The vision is where it all starts, this is the big picture but it&apos;s laid out for everyone to see and understand. Your vision should set a clear idea of where you want to be in 3-5 years time. It&apos;s usually made up of broad statements related to your position in the market, how your customers view your business or product, and how you fit into their life.</p><p>Your vision will rarely talk about the &quot;how&quot; you get there, it will be entirely focused on where you want to be at a given time. The more specific you can be about that vision, the better. There&apos;s no prescribed length for a vision, and it&apos;ll greatly depend on what you&apos;re including. If you&apos;re coming up with a vision for the engineering of your platform it may be longer and more specific than a broad vision for your company. That said, everyone who is covered by that vision needs to read it, and that means it needs to be short enough for someone to comfortable consume. What&apos;s more, it needs to be relatable to everyone of every job role covered by it. A Product Manager should be able to read and understand your Engineering Vision just as much as a Senior Engineer.</p><p>To continue forward, we&apos;re going to take a snippet of some language from a potential vision document you might write.</p><blockquote>Our customers confidently use our platform for their largest and most ambitious events, as well as the smaller and more frequent ones. They trust the metrics they see and rarely question whether it can handle the potenetial traffic.</blockquote><h2 id="strategy">Strategy</h2><p>If vision is about the &quot;what&quot; then strategy is the &quot;how&quot;. Strategy specifies goals, and what you&apos;re going to do to achieve them. This is often where things like Objective Key Results (OKRs) come in. It will seek to identify the major issues in the way of you achieving it, and what you&apos;re going to do about it.</p><p>Continuing on from our vision example, lets look at what some language might be for a strategy to get us there.</p><blockquote>Area of improvement: Currently our average monthly uptime (over a 3 month rolling period) is 90%. We know from customer and market research that this is not enough for customers to fully trust us. We want to increase this number to 99.95%.<br><br>Guiding principals:<br>1. Alot an additional 5% of our time towards reliability improvements starting from the next quarter. We will track this as a separate allocation in teams roadmaps to ensure they have the space to do this. <br>2. Continue to prioritise active production incidents as the automatic top priority work for the team.<br>3. Begin reporting total monthly up time as part of our company all hands. This will highlight the improvements we make to the rest of the business, so we can celebrate our wins with everyone. It will keep our commitment clear to all other teams and will help keep the sales and customer support teams informed of progress.</blockquote><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F4A1;</div><div class="kg-callout-text"><em>As an aside, the above example is intentionally quite thin, but I wanted to demonstrate the sort of language that would be used. For more complete examples, checkout <a href="https://lethain.com/eng-strategies/?ref=elliotblackburn.com">Writing Engineering Strategy by Will Larson</a>, it&apos;s a fantastic article!</em></div></div><p>This example clearly links back to our vision, we may not get the whole way there by the end of the given timeframe, but it puts us in a place where we&apos;re sure to make progress. It&apos;s prescriptive of the approach we want to take, but not so prescriptive that it specifies exactly what each team or individual needs to do. Teams can take this strategy and figure out how they can fall in line to deliver to the goals.</p><p>Our strategy is specific enough that teams can understand both the current focus, and the path we&apos;re going to take, but it&apos;s open enough that they can figure out what they need to do to make it happen. This gives us a great springboard to start forming OKRs or similar, if that&apos;s something your organisation is into.</p><p>Because strategy is specific, it can often be easier to write than a vision. It can often be useful to write several strategies and use those to inform your vision. That approach allows you pick out the themes of what you&apos;re doing based on the more short to medium term business needs, and then project forward.</p><h2 id="process">Process</h2><p>Clear and appropriate process makes it easy to deliver on strategy. If vision is the destination, and strategy is the path we choose, process is about the mode of transport. The two heavily depend on each other, and a change in one will often have a knock on effect on the other.</p><p>If your process lines up poorly with your strategy, it can often make you feel like you&apos;re stuck in the mud and that your strategies too optimistic. When the two align well you can see continued delivery towards the strategy. This therefore means it is often necessary to consider changes to your processes when your strategy changes.</p><p>Processes are measured against their effectiveness at delivering to your strategy. It doesn&apos;t matter what your processes are, or how similar they are to others in your industry as long as they move you further along on your strategy at the pace your organisation needs.</p><p>Unfortunately, the term &quot;process&quot; often comes with baggage. In fact in many organisations people push against having processes at all. Whether you like it or not, everything you do in your organisation has a process behind it. The question many teams face is whether the process is well defined and understood by everyone, or whether everyone&apos;s process is unique and different. Even those in the most creative fields will tell you, they have a strong process for what they do, just look at <a href="https://vimeo.com/44956998?ref=elliotblackburn.com">Tom Sachs video on How To Sweep</a>.</p><figure class="kg-card kg-embed-card"><iframe src="https://player.vimeo.com/video/44956998?h=0db7404d57&amp;app_id=122963" width="480" height="270" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen title="How to Sweep. By Tom Sachs"></iframe></figure><p>Oddly, this is the least specific section in this article, but one of the most specific building blocks. Your processes will be unique to your organisation, even if they are similar to that of others. The most important part of a process is that everyone involved knows it, understands it, and follows it. A typical way of achieving this is by writing it down in a place everyone can find it and access it, making sure it is as simple and clear as possible, and following up with accountability.</p><h2 id="accountability">Accountability</h2><p>Process and strategy are both moot if you&apos;re not going to hold yourself and those in your organisation accountable. This isn&apos;t about managing underperformance, although that is one aspect, or creating an extremely high bar for everyone. It&apos;s about ensuring you follow through.</p><p>Individuals in the organisation need to be held accountable for following process and maintaing base standards of deliverables. Leaders need to be held accountable for creating and sticking to their strategy and vision. Without accountability, you can have all the vision, strategy, and process you want but any delivery that happens will be accidental.</p><p>When processes are not followed we need to practice accountability, that doesn&apos;t mean playing the blame game when someone makes a mistake but it does mean recognising patterns of recurring mistakes. If you see a pattern from an individual or an organisation at large your first question should take you back to the principals above. Is your process making it easy for someone to make a mistake, is it over complicated or not well defined, maybe it&apos;s not easy to find so people &quot;wing it&quot;? After you&apos;ve gone through all of those questions and more, you can start asking yourself if it&apos;s an issue with the individual / team, and if so what should be done about that. Does the team need more training, does the person need to slow down and take more breaks, maybe they&apos;ve picked up a habbit from a previous job and need some training and support? And yes, maybe they need to go on a PIP or be moved elsewhere in the business.</p><p>This is also true for leaders. If on the 1st January you&apos;ve decided to dedicate 5% of all teams time to reliability improvements, and by the 10th January you&apos;ve told teams to drop that work in favour of something else, you&apos;re not following your strategy. Those under your leadership must be able to hold you accountable and question what went wrong in this situation. Maybe the strategy was too ambitious, maybe it was set too early without all the necessary information, maybe you didn&apos;t properly challenge a request from your leaders.</p><h2 id="the-building-blocks-of-a-successful-organisation">The building blocks of a successful organisation</h2><p>Vision, strategy, process, and accountability are not a guarantee that you&apos;ll get to your destination on time. Nor is it a guarantee you&apos;re aiming for the right place. But when each is done well it is a guarantee you&apos;ll make progress in a specific chosen direction.</p>]]></content:encoded></item><item><title><![CDATA[Tips and troubleshooting for self-hosting Mastodon]]></title><description><![CDATA[<p>I&apos;ve been running a mastodon instance for a little while now (<a href="https://toot.sh/?ref=elliotblackburn.com">https://toot.sh</a>). I&apos;ve come across quite a few issues which have caused me a reasonable amount of pain, so I thought I&apos;d document some of them here.</p><p>As a general note, the</p>]]></description><link>https://www.elliotblackburn.com/additional-troubleshooting-for-mastodon-admins/</link><guid isPermaLink="false">636beb70ce39180001d28d1c</guid><dc:creator><![CDATA[Elliot Blackburn]]></dc:creator><pubDate>Wed, 09 Nov 2022 18:21:25 GMT</pubDate><media:content url="https://www.elliotblackburn.com/content/images/2022/11/preview-5df98290371ead9a70bc3cd4733bbfa7.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://www.elliotblackburn.com/content/images/2022/11/preview-5df98290371ead9a70bc3cd4733bbfa7.jpg" alt="Tips and troubleshooting for self-hosting Mastodon"><p>I&apos;ve been running a mastodon instance for a little while now (<a href="https://toot.sh/?ref=elliotblackburn.com">https://toot.sh</a>). I&apos;ve come across quite a few issues which have caused me a reasonable amount of pain, so I thought I&apos;d document some of them here.</p><p>As a general note, the mastodon docs seem to assume you&apos;ll use a raw install on the server, despite providing a docker-compose.yml file. Because of this it&apos;ll be worth considering your choice of installation carefully. So far I&apos;ve not had any issues using a container based approach, although I can&apos;t say it won&apos;t happen in the future. If you do go with the docker-compose install, be aware that various commands (`tootctl` and <code>rails</code> commands in particlular) in the docs will need to be run inside the web container. You can do this by prefixing the command with the docker-compose run command. For example:</p><pre><code class="language-sh">docker-compose run --rm web tootctl feeds build</code></pre><h2 id="mastodon-docs-assume-a-raw-install">Mastodon docs assume a raw install</h2><p>The mastodon repo provides a docker-compose file but none of the documentation assumes you&apos;ll run the instance this way. Think twice before you go down this path, I&apos;ve not had any issues caused by using containers themselves but it does mean you need to modify your commands on the regular.</p><h2 id="dont-use-cloudflare-minification">Don&apos;t use Cloudflare Minification</h2><p>Mastodon inserts integrity checks of the html, css, and js content. As a result it&apos;s not compatible with any kind of CDN/Reverse proxy doing it. If you&apos;re using cloudflare, make sure to turn <em>off</em> Auto Minify in the Speed -&gt; Optimizations page.</p><p>If you don&apos;t do this, you could unexpectedly end up in a situation where your pages have broken styles, or none at all. For me this happened after a few weeks of everything running just fine, so it&apos;s not a problem exclusively for new-installs.</p><h2 id="empty-timeline-after-a-restore-re-install-migration">Empty timeline after a restore / re-install / migration</h2><p>Users timelines are stored in Redis, as such any loss of Redis data means this will need rebulding. You can do this with the <a href="https://docs.joinmastodon.org/admin/tootctl/?ref=elliotblackburn.com#feeds">tootctl feeds build</a> command.</p><pre><code class="language-sh"># For non-docker based installs
tootctl feeds build

# For docker-compose installs
docker-compose run --rm web bin/tootctl feeds build</code></pre><p>This command will rebuild all users feeds, if you have a lot of users this could take a while to run. There are various options available to tweak the concurrency.</p><h2 id="elasticsearch-complains-about-storage-space">Elasticsearch complains about storage space</h2><p>I&apos;m not entirely sure why, as I haven&apos;t dug into it deeply, but <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html?ref=elliotblackburn.com">Elasticsearch may require more storage space than your OS will allow it by default</a>. This requires a change on the host OS rather than the container so proceed with caution.</p><p>To test the change you can run <code>sysctl -w vm.max_map_count=262144</code> (this may require sudo). Then you can restart the container. To make &#xA0;that persist add the line <code>vm.max_map_count=262144</code> at the bottom of the <code>/etc/sysctl.conf</code> file. This will be read at boot time so if you do elect to do this, you&apos;re probably best off running the command and then adding it into the sysctl.conf file. This change may impact other systems although as I say I&apos;ve not dug into much yet so you may wish to check it out yourself.</p>]]></content:encoded></item><item><title><![CDATA[Ten Bullets]]></title><description><![CDATA[<p>I recently came across the Ten Bullets of Tom Sachs&apos; workshop. The ten bullets are the rules of the workshop, everyone knows them and everyone abides by them while working there. Their ten bullets are:</p><ul><li>Creativity is the enemy: work to code - The ten bullets are the code.</li></ul>]]></description><link>https://www.elliotblackburn.com/10-bullets/</link><guid isPermaLink="false">633c31e9040d6f000187e905</guid><dc:creator><![CDATA[Elliot Blackburn]]></dc:creator><pubDate>Tue, 04 Oct 2022 14:24:46 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1597960194599-22929afc25b1?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDEwfHx3b3Jrc2hvcHxlbnwwfHx8fDE2NjQ4OTQwMzY&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1597960194599-22929afc25b1?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDEwfHx3b3Jrc2hvcHxlbnwwfHx8fDE2NjQ4OTQwMzY&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Ten Bullets"><p>I recently came across the Ten Bullets of Tom Sachs&apos; workshop. The ten bullets are the rules of the workshop, everyone knows them and everyone abides by them while working there. Their ten bullets are:</p><ul><li>Creativity is the enemy: work to code - The ten bullets are the code. Anything new introduced to the workshop must build on top of the code.</li><li>Sacred space - Respect the studios space and the people who are working in it. The work everyone is doing is their top priority while they are doing it.</li><li>Be on time - Ensure you&apos;re arriving on time but also maintain the mentality of &quot;on-the-clock&quot;. People should be focused on the work and ensure they&apos;re prepared to do just that. That includes getting enough sleep and remaining healthy.</li><li>Thoroughness counts - Don&apos;t cut corners, the job is done when all tasks relating to the job are done. If you notice the workshop is low on something, notifying the workshop manager of that is part of the job. Clean up after yourself, reset workstations, etc.</li><li>&quot;I understand&quot; - When given instruction it&apos;s important to reply with &quot;I understand&quot; to indicate as such. If you have questions or need more help you can say &quot;I don&apos;t understand&quot; but this ensures efficient and correct communication.</li><li>Sent does not mean received - Always confirm someone has received something that you&apos;ve sent them. This could be a physical thing or some kind of communication but just because you sent it doesn&apos;t mean it was received by the other person.</li><li>Keep a list - Everyone should maintain a list to ensure all tasks are done properly to full completion. This goes along with being thorough further up.</li><li>Always be knolling - Arrange objects in parallel or with 90 degree angles to help keep &#xA0;the space organised. Everything has somewhere it belongs and while not there knolling helps keep some order.</li><li>Sacrifice to leatherface - If a mistake is made or a rule is broken a small monetary fine is due to a box with a model of leatherface on it. This is to make sure people take responsibility and own mistakes. The money is later used for fun and parties. Each time a mistake is repeated by someone the fine doubles.</li><li>Persistence - &#x201C;Nothing in the world can take place of persistence. Talent will not; nothing is more common than unsuccessful men with talent. Genius will not; unrewarded genius is almost a proverb. Education will not; the world is full of educated derelicts. Persistence and determination alone are omnipotent.&#x201D; Ray Kroc, Founder of Mc&#x2019;Donalds.</li></ul><figure class="kg-card kg-embed-card"><iframe src="https://player.vimeo.com/video/34901903?h=a1b3cf7c37&amp;app_id=122963" width="480" height="270" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen title="Ten Bullets, By Tom Sachs"></iframe></figure><p>It&apos;s well worth watching the video to understand each point in depth. My above explanation is both short and crude.</p><p>These ten bullets piqued my interest because of how simple they are. Each rule can easily apply to anything and everything you do in the workshop. They just become an agreed way of doing things. There&apos;s no need for a bespoke rule of &quot;this area is for quiet working&quot; because of the global rule that you should be respectful of the space and those doing work. Likewise there&apos;s no need for a complex workflow to be put together because you have those around &quot;I understand&quot; and &quot;Sent does not mean received&quot;. In that world, even adhoc out of the normal requests or issues can be dealt with easily.</p><p>I work remotely in a software job, so some of these rules would be less useful to my physical space but I could see them applying to a virtual space as well. If slack is your workshop, how do you go about treating that as a sacred space?</p><p>When you think about it, many software companies culture and processes are a very informal version of their own bullets. However because they&apos;re never documented or explained we rely on intution to figure them out and to navigate the boundaries. I wonder whether software companies, especially startups, would benefit from defining their ten bullets early on?</p><p>It&apos;s something I&apos;ll be thinking about for the next few days I think.</p>]]></content:encoded></item><item><title><![CDATA[DKIM, SPF, MX, and other email DNS records]]></title><description><![CDATA[This article acts as a short reference piece for all of the major email DNS records you might come across.]]></description><link>https://www.elliotblackburn.com/email-dns-records/</link><guid isPermaLink="false">630dea97cd40a20001638732</guid><category><![CDATA[devops]]></category><dc:creator><![CDATA[Elliot Blackburn]]></dc:creator><pubDate>Wed, 31 Aug 2022 16:05:09 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1522096823084-2d1aa8411c13?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDE0fHxlbWFpbHxlbnwwfHx8fDE2NjQ4OTM5Nzg&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1522096823084-2d1aa8411c13?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDE0fHxlbWFpbHxlbnwwfHx8fDE2NjQ4OTM5Nzg&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="DKIM, SPF, MX, and other email DNS records"><p>At face value email seems pretty simple I write an email and address it to your email address. My provider then talks to your provider and the email I wrote ends up in your inbox. If you want to reply you just hit the &quot;reply&quot; button and the same thing happens to me. Simple, right?</p><p>It&apos;s not until you want to use a custom domain, self-host, or change providers. At that moment you peak behind the curtain and realise the decades of legacy decisions stack ontop of each other.</p><p>Unfortunately many non-IT folks run into this seemingly insurmountable wall. All they want is an email address on their own domain for their own business and suddenly they&apos;re met with DNS records galore with no real idea of what they are.</p><p>This article acts as a short reference piece for all of the major email DNS records you might come across. It&apos;s not a guide on how to host your own email or what provider to use. It&apos;s here to help you understand what all those DNS records are that you&apos;re being asked to configure.</p><p>We&apos;ll be working with the domain of <code>example.com</code> in our examples.</p><h2 id="mxmail-exchange">MX - Mail Exchange</h2><p>This is the oldest email DNS record around and it provides people with instructions on <em>where</em> to send email for your domain. This is how someone knows what mail server to speak to when sending you an email. To receive email this is all you need to have setup!</p><p>An MX record has four parts.</p><ol><li>Sub-domain - Typically you&apos;ll set this as <code>@</code>when you want to target the root of the domain for addresses like <code>hello@example.com</code> but you can set it to a value such as <code>mail</code> to get addresses like <code>hello@mail.example.com</code>.</li><li>Value - This is the full domain of the mail server you want to target. For example <code>mail1.example.com</code>. When someone wants to send you email this is the server they&apos;ll speak to.</li><li>Priority - We often try to have at least 2 MX records for any domain or sub-domain. This gives us redundancy, so that if one mail server goes down, people can send email to the other one so your email still gets to you. Your email provider will tell you how to set this, usually we go with increments of 10 so your first record will have priority <code>10</code> and the second will have priority <code>20</code>.</li><li>Time to live - This is standard across all DNS records. When a system requests a DNS record it will keep a copy of it for the amount of time specified in this time to live value. Until that time has elapsed it won&apos;t request it again. If you&apos;re going to move to a new email provider it&apos;s a good idea to set this down to around 1 minute and wait for all old requests to have timed out. IE if you previously had it set to 4 hours, set it down to 1 minute and wait just over 4 hours.</li></ol><h2 id="spfsender-policy-framework">SPF - Sender Policy Framework</h2><p>Back when email was first created and used there weren&apos;t many people on the internet. As such we could trust people to only try to send email from their email address. As the internet grew in usage this obviously became a problem. Anyone could contact a mail server (via an MX record) and claim to be anyone else and send an email. The SPF record prevents this by specifying what mail servers are allowed to send email on behalf of the domain.</p><p>Why is this better? Because the SPF record is setup by the domain owner, you know that the domain owner has authorised the given mail server to send email with their domain name. Now, when a mail server receives an email it will request the supposed senders SPF record and check that the incoming email is being sent from an authorised sender.</p><p>The SPF record is not it&apos;s own DNS record type, instead it uses the <code>TXT</code> (text) record type in a special prescribed format. A very simple SPF record might look like this:</p><pre><code>v=spf1 include:spf.example.com -all</code></pre><ul><li><code>v=spf1</code> - This is the identifier for someone to know that this is an SPF record.</li><li><code>include:spf.example.com</code> - This is the domain of a 3rd party authorised email server. You can add as many of these as you need, but should only add those which should be sending email on your behalf. You can also include servers via IP addresses which is useful if you run your own email servers.</li><li><code>-all</code> - This bit is a little cryptic, it instructs the receiving mail server what to do should an email be sent to it which is not authorised by this SPF record. <code>-all</code> says it should be rejected, <code>~all</code> would have it go into the receivers spam folder, and <code>?all</code> would allow anyone to send email on your behalf. Typically it is best to use <code>-all</code>.</li></ul><p>You may only have one SPF record per sub-domain / root domain. That means if you need to authorise more services to send email on your behalf, you&apos;ll need to expand your existing SPF record or make them use a sub-domain such as <code>marketing.example.com</code>.</p><p>SPF has been around for a long time now, if you do not set it you&apos;re likely to have your emails either end up in people&apos;s spam folders or outright rejected. Fighting email spam is hard and if a receiving server cannot find out who is allowed to send emails on behalf of a domain it will decide what it wants to do for it&apos;s users.</p><h2 id="dkimdomainkeys-identified-mail">DKIM - DomainKeys Identified Mail</h2><p>If an SPF is a declaration of who is authorised to send email, DKIM is the proof that comes with each email sent. DKIM uses public key cryptography which we won&apos;t go into here. The only thing you need to know is it uses two keys: a private key which is kept secret by the owner, and a public key which is shared with anyone. In this case the private key is used to create a digital signature for an email and the public key can be used to verify the signature.</p><p>The DKIM DNS record is used to share the public key with the world. When an email arrives the receving mail server checks to see if there is a DKIM record for the senders domain and if so it attempts to verify the emails signature. If the signature doesn&apos;t exist or doesn&apos;t pass verification then it&apos;s either sent to the users spam folder or rejected completely.</p><p>Like an SPF record, a DKIM record uses the TXT DNS record type with a special text format.</p><p>A DKIM record will have a name such as <code>._domainkey.example.com</code> for a root email address such as <code>someone@example.com</code>. For emails on a sub-domain it&apos;ll be something like <code>mail._domainkey.example.com</code> for emails coming from <code>something@mail.example.com</code>.</p><p>The value of the record will look something like:</p><pre><code>v=DKIM1; p=76E629F05F709EF665853333EEC3F5ADE69A2362BECE40658267AB2FC3CB6CBE</code></pre><ul><li><code>v=DKIM1</code> signals that this is a DKIM record</li><li><code>p=...</code> is the public key which can be used to verify an emails DKIM signature</li></ul><p>Alternatively, you can use a CNAME record type rather than a TXT record. This is used when you&apos;re using a 3rd party to host your email for you, in that case the target value will be given to you by the email provider. When a mail server meets a CNAME DKIM record it will forward it&apos;s request onto that target to find the key.</p><p>It is possible to have multiple DKIM records which can help you rotate your signing keys for improved security. How to do that is outside the scope of this article, if you&apos;re using a 3rd party provider they will tell you how to setup the DKIM records if they support it.</p><h2 id="dmarcdomain-based-message-authentication-reporting-and-conformance">DMARC - Domain-based Message Authentication Reporting and Conformance</h2><p>The DMARC record instructs a receiving mail server on how to react to emails that fail SPF or DKIM checks.</p><p>The DMARC record allows you say something like &quot;if an email fails DKIM and SPF, mark it as spam&quot; or &quot;if an email fails DKIM and SPF, reject the email completely&quot;. There are a number of controls in a DMARC record and much like an SPF and and DKIM record it&apos;s a TXT record type that follows a particular format so they can be machine readable.</p><p>The name for a DMARC record is just <code>@</code> to target the root domain or the name of the subdomain you&apos;re sending from. Then it&apos;s onto the value, there are a bunch of options in a DMARC record all of which can be composed together to create your desired policy. Each option is separated from the rest via a semi-colon and space. Here&apos;s an example:</p><pre><code>v=DMARC1; p=quarantine; adkim=r; aspf=r; rua=mailto:dmarc@example.com;</code></pre><p>DMARC has a lot of different options. We&apos;ll explore some of the common ones you&apos;ll want to set. If you want to see all the available options, <a href="https://mxtoolbox.com/dmarc/details/dmarc-tags?ref=elliotblackburn.com">this site has a good list</a>.</p><ul><li><code>v=DMARC1;</code> - this is required, much like the DKIM and SPF records this denotes that the record is a DMARC policy. It must be included and is usually the first item in the value field.</li><li><code>p=</code> - This is the main &quot;policy&quot;, it determins what happens if DKIM or SPF fail. These are: <code>none</code> (do nothing special), <code>quarantine</code> (send to spam), and <code>reject</code> (reject the email and do not deliver it). You will likely want <code>quarantine</code> at least or <code>reject</code> once you&apos;re happy everything is setup correctly. Bare in mind that email providers may choose to ignore these in some cases, it&apos;s been known for providers like gmail and outlook to take a more harsh action on emails failing DKIM and SPF even if <code>p=none</code>.</li><li><code>rua=</code> - The Report URI Aggregate option lets you specify a URL to send aggregate DMARC reports to. Setting this to something like <code>mailto:dmarc@example.com</code> will mean you get daily emails from providers who receive your emails with an aggregate report of the SPF and DKIM checks. This is optional but it&apos;s a good idea to set it up so you can analyse any delivery issues that come up. This can be any URL, if you prefix it with the <code>mailto:</code> protocol then it&apos;ll be emailed to the given address. I generally setup a separate mailbox or folder for these to go to.</li></ul><h2 id="final-notes">Final notes</h2><p>MX, SPF, DKIM, and DMARC are the minimum records you&apos;ll want when setting up email for your domain. Without them you open yourself up to having people sending emails pretending to be you, or not receiving email intended for you.</p><p>It&apos;s worth noting here that email providers will take some of these, in particular DMARC with a grain of salt. If you don&apos;t setup these records, you&apos;re more likely to end up in someone&apos;s spam folder because you&apos;ve failed to protect your domain and so providers will trust you less. There&apos;s always the chance that they enforce a stricter policy than what you&apos;ve prescribed, although on the whole your DNS records should be respected. DMARC reports should help you solve most issues, and if you&apos;re using a reputable 3rd party you shouldn&apos;t have IP reputation issues (which is a whole other kettle of fish).</p>]]></content:encoded></item><item><title><![CDATA[The Green Coder [Issue #7] - Organising your time]]></title><description><![CDATA[I learned pretty early on in my career that the root of a lot of time management issues come from unclear priorities.]]></description><link>https://www.elliotblackburn.com/the-green-coder-issue-7-organising-your-time/</link><guid isPermaLink="false">642b3d6b8dd0f500013f5442</guid><category><![CDATA[the-green-coder]]></category><dc:creator><![CDATA[Elliot Blackburn]]></dc:creator><pubDate>Wed, 31 Mar 2021 16:00:00 GMT</pubDate><content:encoded><![CDATA[<p><em>This is an archive version of issue 1 of The Green Coder, a short experiment which has since morphed into <a href="https://podcasters.spotify.com/pod/show/the-fresh-engineer?ref=elliotblackburn.com">The Fresh Engineer Podcast</a>. Check it out for a continuation of these thoughts!</em></p><hr><p>Back in my final year of University I was one of the first <a href="https://githubcampus.expert/?ref=elliotblackburn.com">GitHub Campus Experts</a>. Last week I joined <a href="https://twitter.com/juanpflores_?ref=elliotblackburn.com">Juan Pa</a> on the weekly GitHub Education live stream to catch up with him and the current campus experts. We took questions from the current community of experts and talked through our experience and advice around those topics. Over the next couple of weeks I&apos;ll be taking some of those questions and diving deeper into them.</p><p>This week we&apos;re going to look at one of the questions Juan asked which peaked my interest in particular.</p><blockquote>One of the biggest constraints we&apos;ve seen students experience is time management. You need time to build a community, create your own side projects, and also go through college and graduate. How did you manage everything that you did? I know you learned a lot of your stuff on your.<br><br><a href="https://www.twitch.tv/videos/960144777?t=00h44m50s&amp;ref=elliotblackburn.com">https://www.twitch.tv/videos/960144777?t=00h44m50s</a></blockquote><p>Time management is something I&apos;ve personally struggled with massively, and continue to every day. It&apos;s specifically something that was called out by a lot of my school teachers along side other areas of my dyslexia.</p><p>I&apos;m not one for heavy process and I struggle to stick to cumbersome systems, so my time management approach is pretty simple. You can listen to the VOD above for a brief overview first if you like, and then come back for more detail.</p><h2 id="priorities">Priorities</h2><p>I learned pretty early on in my career that the root of a lot of time management issues come from unclear priorities. That&apos;s true both in work, and in life.</p><p>Unclear priorities show themselves in tons of different ways. For me, it usually results in either faffing around doing nothing of any value, getting stressed because I&apos;m doing too many things at once. This is comes from my mind not knowing what I should be doing, so it either struggles to do everything or gets stuck and does nothing.</p><p><strong>Having a clearly defined and well ordered set of priorities solves the question of &quot;what should I spend time on?&quot;</strong></p><p>You will probably know your priorities at home, but do you know what your piorities are at work or university?</p><p>However you manager your work vs life separation, you need to ensure you can always answer the question of &quot;what is my top priority right now?&quot; This may shift during the day, week, month, and year but you need to be aware of it.</p><p>In a software team the priorities are often set by the Product Manager or Engineering Manager. If you&apos;re stuck wondering what your focus should be, ask them! They should give you an answer that aligns you quickly with the team, and with the business. If you&apos;re in college / unviersity then the question is probably one for you to answer by reviewing your grades and what your current grade predictions are.</p><blockquote>Your time is your own, and everyone is going to want some of it. Only you get to choose if they get that time.</blockquote><h2 id="defend-your-time">Defend your time</h2><p>Now that you know what your priorities are, it&apos;s up to you to ensure you have ample time to work on them. Here&apos;s something people won&apos;t tell.</p><p>Your time is your own, and everyone is going to want some of it. Only you get to choose if they get that time. What&apos;s more, there are only 24 hours in a day, and probably only 6-8 where you&apos;ll have the energy to use them well.</p><p>To get work done you need time, and the only way you get time for your priorities is by guarding your calendar. If you know your priorities, a biproduct is knowing that anything else is unlikely to be something you want to spend time on. Sometimes you don&apos;t get a choice, but 90-99% of the time it is up to you.</p><p>When other people want a piece of your time, it may not always feel optional but it is. There are good ways to communicate &quot;no&quot; but we&apos;ll talk about that another time. Be gracious and kind, but also defend your time.</p><h2 id="allocate-your-time-up-front">Allocate your time up front</h2><p>You&apos;ve got an idea of what you want to do, and you&apos;ve now got the time to do it. The final piece of the puzzle is breaking down the work and allocating it out. Often priorities aren&apos;t as clear cut as 1 -&gt; 2 -&gt; 3, so you&apos;ll need to do a bit of juggling.</p><p>It&apos;s completely okay to tackle small pieces of all your priorities across the day, just make sure you&apos;re achieving something at the end of a portion of time. If it&apos;s a bug, it might just be &quot;I&apos;ve spent 2 hours working on this, and I&apos;ve come out with a long list of what definetely is <em>not</em> causing the bug&quot; - even that can be progress!</p><p>If you&apos;ve got two projects you&apos;re working on that are your joint top priorities, just pick one to work on first. Roll a dice, flip a coin, it doesn&apos;t matter how you choose which to start on. Break down the work into a collection of small tasks, order them so you know what order you&apos;ll do them in, and then block that time out in your calendar.</p><p>Now you&apos;ve got the magic combination! You have an understanding of your top priorities, free time to work on work on them, and an ordered list of small tasks to work through.</p><p>From there it&apos;s a case of getting started. I find it&apos;s much easier to get started when I know I have a start and end time for my session of deep work. I can set an alarm for a few hours time get started on the first item. My goal isn&apos;t to do the entire list, but just to spend that entire chunk of time working my way through the list I&apos;ve created for myself.</p><p>Some days you&apos;ll finished feeling pumped and on a high of productivity, other days you&apos;ll drag yourself to the sofa after getting nothing ticked off the list. No amount of planning is going to change that, it&apos;s part of the ups and downs of life. So before you charge off into the sunset to subdue your priorities and decline all your managers meeting invites, just remember to have grace with yourself and with those around you.</p>]]></content:encoded></item><item><title><![CDATA[The Green Coder [Issue #6] - Promotions and Brag Documents]]></title><description><![CDATA[No matter what the process is for your workplace, you're going to need a firm foundation to pitch your promotion on. But what does that look like?]]></description><link>https://www.elliotblackburn.com/untitled-2/</link><guid isPermaLink="false">642b3d158dd0f500013f5431</guid><category><![CDATA[the-green-coder]]></category><dc:creator><![CDATA[Elliot Blackburn]]></dc:creator><pubDate>Tue, 23 Mar 2021 19:54:00 GMT</pubDate><content:encoded><![CDATA[<p><em>This is an archive version of issue 1 of The Green Coder, a short experiment which has since morphed into <a href="https://podcasters.spotify.com/pod/show/the-fresh-engineer?ref=elliotblackburn.com">The Fresh Engineer Podcast</a>. Check it out for a continuation of these thoughts!</em></p><hr><p>Here&apos;s a question I get a lot.</p><blockquote>I feel like I&apos;ve been doing really well at my job since I started and think I&apos;m ready for the next step. How do I start thinking about landing a promotion?</blockquote><p>You&apos;ll have to jump through a variety of hoops for any promotion within any organisation. These will differ from company to company as well. Some have a well understood formal process, some may require you to apply for an open position, and sadly many still don&apos;t have a well defined method.</p><p>No matter what the process is for your workplace, you&apos;re going to need a firm foundation to pitch your promotion on. But what does that foundation look like, and how do you start to build it?</p><p>Lets start with the first question, &quot;what should form the basis for my promotion, and how do I know when I&apos;m ready?&quot;. This is a pretty simple one, but it&apos;s important to answer it from a few different perspectives.</p><ul><li>Your perspective - Once you believe you&apos;re operating at that next level, you probably want to look at a promotion of some sort. It&apos;s useful to remember that this isn&apos;t based on time in the role, but instead on whether or not you&apos;re showing that you are capable of working at that next level up. The duration of time it takes individuals to be ready for that step may vary wildly! Some of your peers may race up a few steps, others may take a bit longer.</li><li>Your managers perspective - For a manager, a promotion is a bit of a risk. Promoting someone too early can be problematic, as you have filled a position with someone who is not yet able to carry out the requirements. That can bring a world of pain. Firstly, the job the manager needed performing is not getting done, and secondly the person in that role is now under performing and that can lead to performance improvement plans. Your manager will want to make sure you&apos;re definetely ready for a promotion, so that you can succeed and their team remains healthy with the work getting done by the right people to the right level of quality.</li><li>Their managers perspective - You can think of this as the perspective of &quot;the business&quot;. The business will want to promote you when there is a need for someone to fill a position above your current level. There will always be a need for you to move from a junior engineer to a mid. This is because the business needs you to become self sufficient in your work. This is quite different from trying to move from a senior engineer to an engineering manager, for example. Companies need engineering managers, but you don&apos;t need more managers than teams, that would leave someone with little work to do.</li></ul><p>A promotion looks very different from each perspective, right? That&apos;s okay though, in most organisations you won&apos;t have a problem, you just need to make sure you satisfy each persons needs and risks.</p><p>So, you&apos;re operating happily in some of the areas of the job above yours, and the business has an opportunity for you to move into. How do you bound a foundation to sell your promotion to your manager and the business? That&apos;s where our brag document comes in!</p><p>A brag document is quite simply a list of your achievements. In particular ones which demonstrate that you&apos;re operating at the next level up. When the time comes to kick off the process of getting a promotion you don&apos;t want to be relying on your memory, you want to have a list of everything you can feed from.</p><p>What should your brag list look like? Well it&apos;s completely up to you but here&apos;s a few suggestions.</p><ol><li>Start with a date and a few words describing the achievement, this will make it easy to scroll through later on.</li><li>List the situation, your contribution, and what the business or social impact was. You might hear this called SBI (Situation, Behaviour, Impact).</li><li>List some of the other people who were involved.</li></ol><p>You might end up with something like this:</p><blockquote>2021-03-20 - Found bug in order payment process and worked with payments team to fix.<br><br>While doing some testing of my work I noticed an issue with payment processing in production. I couldn&apos;t see anyone had reported it so I raised it with the payments team. I provided screenshots and a detailed description of the issue. Payments were able to alert the SOC and raise a production issue ticket. We tracked down the issue and I was able to confirm the final fix. This solved a case which was preventing 1% of users from completing their orders. My raising of this issue saw that resolved within 1 day of the issue being introduced and minimising our loss.<br><br>Others involved:<br>- James Jameson - Head of Engineering for Payments<br>- Abby Abbort - Principle Engineer for Orders</blockquote><p>It&apos;s not an overwhelming amount of information, but anyone reading that can clearly see you prevented further loss to the business. That speaks to your manager and shows you&apos;re pro-active and have a sense of urgency with production bugs, and it speaks to the business and shows the bottom line impact your work had.</p><p><strong>I recommend trying to maintain something like this and setting yourself a reminder to update it every few weeks.</strong> That way the information should be fresh in your mind when you come to write it.</p><p>The act of turning this into a promotion will depend on your organisations process. Some will have forms you need to fill out, which will likely need information from your brag doc. Other orgs may have a less formal process, and you might choose to take some examples from your doc and turn them into an application for an open position. The aim with this document is to keep an ever growing log of your achievements so they&apos;re ready to go when you&apos;re ready to take that next step.</p><p>This body of evidence should form that foundation of your promotion request. With it, you are able to clearly communicate to your manager and the business in a language which speaks to them. Without it, you&apos;ll be stuck pulling these from possibly years back in your memory.</p>]]></content:encoded></item><item><title><![CDATA[The Green Coder [Issue #5] - Recruiters and how to work with them]]></title><description><![CDATA[If you've been in the industry for more than 5 minutes, you'll have probably had some recruiters tap you up on LinkedIn. But who are they, what do they do, who do they work for?]]></description><link>https://www.elliotblackburn.com/the-green-coder-issue-5-recruiters-and-how-to-work-with-them/</link><guid isPermaLink="false">642b3ccc8dd0f500013f5422</guid><category><![CDATA[the-green-coder]]></category><dc:creator><![CDATA[Elliot Blackburn]]></dc:creator><pubDate>Sat, 23 Jan 2021 00:00:00 GMT</pubDate><content:encoded><![CDATA[<p><em>This is an archive version of issue 1 of The Green Coder, a short experiment which has since morphed into <a href="https://podcasters.spotify.com/pod/show/the-fresh-engineer?ref=elliotblackburn.com">The Fresh Engineer Podcast</a>. Check it out for a continuation of these thoughts!</em></p><hr><p>If you&apos;ve been in the industry for more than 5 minutes, you&apos;ll have probably had some recruiters tap you up on LinkedIn. But who are they, what do they do, who do they work for?</p><blockquote>The job of a recruiter is simple, find a qualified person to fill an open position at a company.</blockquote><p>In industries where there are more workers than jobs, it&apos;s easy to hire people. You put a sign on your door, or a page on the internet and wait for applications. In an industry where the number of jobs is greater than the number of workers, things get a little more complicated.</p><p>How does a company get their job ad seen by qualified people when there are more jobs than workers? This is where recruiters come in. The job of a recruiter is simple, find a qualified person to fill an open position at a company.</p><p>If you&apos;ve not experienced it yet, you likely soon will. Within the world of tech recruiters first port of call is LinkedIn. They&apos;ll scour LinkedIn, GitHub, and other areas of the internet to find anyone who might fit the requirement of the job and will try to sell the company as a great place to work.</p><p>Because so much of recruitment is done online, getting your LinkedIn up to date is really important if you intend to engage with recruiters. They&apos;ll be using a lot of automated tools to search for candidates to get in touch with, so make sure the technologies you list are relevant to your job search. List the things you have experience with and want to work with, and consider removing those you&apos;re not interested in anymore.</p><p>It&apos;s also worth considering how you want to communicate with recruiters before you go out there. In my experience, every recruiter is desperate to get you on the phone. Why is this? Their as much sales folk as they are recruiters. They want to sell you a role and get a good read on you, this is much easier for them on the phone. They can gague your interest, pivot the conversation if needed, and figure quickly get a feel for what you would be like in an interview.</p><p>I would suggest you spend time thinking about how you want to manage communication with recruiters when you&apos;re on the job hunt. My approach to communicating with recruiters is to always start with LinkedIn. I&apos;ve turned off all notifications, so it won&apos;t intrude on my day-to-day, and I can easily block someone if anything happens. My phone number and email address don&apos;t get given out until I&apos;ve decided to move forward with an application.</p><p>Once they&apos;ve found someone who fits the job profile and is interested in the company they then start sheparding the recruitment process. Recruiters will often want to own this process and be the single point of contact between you, the applicant, and the hiring company. As a result, they&apos;ll be responsible for sending over your CV, organising any interviews, and often some part of the compensation negotiation.</p><p>Why do they want to be in the middle of the conversations? It&apos;s all to do with how recruiters get paid. Lets take a look at the three ways a recruiter can usually get paid.</p><p>The first is the agency recruiter, these folks work for a recruitment company. The company contracts for firms looking to fill open positions. If the agency usually gets paid when a successful applicant is found, and sometimes there are caveats around the applicant passing a probationary period. In this case the individual recruiter you work with is usually getting paid a salary, however the majority of their pay will come from bonuses. Each candidate successfully placed in a job role will get them some sort of bonus. Sometimes this is commission based on final salaries, and sometimes it&apos;s a flat rate.</p><p>The second is the contract recruiters working inside the hiring company. In this case they&apos;ll tend to get paid a daily rate and usually some sort of bonus on a successful placement. Again, in this case the bonuses are often the majority of the final pay as this helps align the recruiter with companies goal. This is similar to lots of traditional sales jobs.</p><p>Finally, we have the freelance recruiter working outside the hiring company. In this case things can vary a lot, but on the whole the pay usually comes purely from a successful placement of a candidate.</p><p>The trend in the above models, is that recruiters make the majority of their income from getting a candidate through the recruitment process and into the job. This is why they want to control the entire process and act as the middleman.</p><blockquote>A recruiter is only financially aligned with getting people into jobs, not getting people into the right jobs for them.</blockquote><p>As a result, the interests of you, the person looking for a job, and the recruiter only line up partially. On the one hand, they want to sell you the job and, if you&apos;re successful, get you a good package so you&apos;ll accept the job. On the other hand, their insentive ends once you&apos;re in the job. The only insentive they have to ensure you&apos;re in the right job for you is their relationship with you.</p><p>This is not to say that recruiters don&apos;t care whether the job is good long term, their reputation and relationship with past applicants does mean a lot to them. However, a recruiter is only financially aligned with getting people into jobs, not getting people into the right jobs for them.</p><p>The crossover between your objective and a recruiters objective is similar to a realestate agent, they want you to feel comfortable with what you&apos;re buying. The best way to do that is with transparency and honesty about the property, but the financial alignment for them is ultimately with making the sale.</p><p>When working with recruiters it&apos;s important to understand where your interests line up with theirs, and where they depart. They want to get people into jobs, but figuring out if the job is right for you is your responsibility. Do your own research on companies you&apos;re applying to, checkout Glassdoor reviews, and ask probing questions during interviews. If the job does feel right for you then keep a good communication line with the recruiter, they&apos;re eager to get things moving quickly so they don&apos;t lose you to another job. You can also feel free to be open with recruiters and push them during negotation stages, they&apos;ll be just as eager as you are to sign on the dotted line.</p><p>Recruiters can be extremely useful if you&apos;re fortunate enough to work in an industry like tech, and if you&apos;re aware of their alignments you can make the relationship work well for both of you.</p>]]></content:encoded></item><item><title><![CDATA[The Green Coder [Issue #4] - Big Corp vs Small Startup]]></title><description><![CDATA[A very common question, especially from those who are fresh to the industry, is whether you should start off in a large enterprise or a small startup. It's a hotly debated topic by everyone, even those further on in their careers.]]></description><link>https://www.elliotblackburn.com/issue-4-big-corp-vs-small-startup/</link><guid isPermaLink="false">642b3c7e8dd0f500013f5411</guid><category><![CDATA[the-green-coder]]></category><dc:creator><![CDATA[Elliot Blackburn]]></dc:creator><pubDate>Fri, 15 Jan 2021 16:45:00 GMT</pubDate><content:encoded><![CDATA[<p><em>This is an archive version of issue 1 of The Green Coder, a short experiment which has since morphed into <a href="https://podcasters.spotify.com/pod/show/the-fresh-engineer?ref=elliotblackburn.com">The Fresh Engineer Podcast</a>. Check it out for a continuation of these thoughts!</em></p><hr><blockquote>Should I get a job at a big corp, or a small startup? What&apos;s going to kick off my career on the right foot?</blockquote><p>It&apos;s an especially common question from people who are fresh to the industry, and you&apos;ll see it debated all the way through your career. Join a hot new seed funded startup that&apos;s &quot;going places&quot;, or join a huge company which will pay you to travel to all the big conferences?</p><p>A very common question, especially from those who are fresh to the industry, is whether you should start off in a large enterprise or a small startup. It&apos;s a hotly debated topic by everyone, even those further on in their careers. The answer probably won&apos;t surprise you - <em>it&apos;s completely up to you</em>. However, I do think there are some pro&apos;s and con&apos;s worth exploring with each type of organisation.</p><p>I&apos;ve had the pleasure of seeing juniour engineers in both small startups and large enterprises. I can tell you right now, that both environments can be an excellent place to start your career. However, it&apos;s highly dependant on the company you join and what kind of person you are. Making the right choice is deeply personal but if you&apos;re able to find a good company at either scale, you&apos;ll probably do really well in either setting.</p><h2 id="life-in-the-startup">Life in the Startup</h2><p>I started my career in a small startup, there were about 25 of us when I joined so it was very early days. The first year was amazing, I learned so much and felt so inspired every day. I felt like I was learning every day, and I had leadership opportunities opened to me early on.</p><p>This experience was wonderful, until year two came around. Year two the business was attempting some more rapid growth. I learned a really important lesson that year, <strong>when you grow something quickly, you scale up everything all at once. That includes both the good and the bad.</strong> The faster you scale the less time you have to fix the bad things.</p><p>Startups can be a wonderful place to learn if you want to be thrown in the deep-end. You&apos;ll be expected to start delivering value fairly quickly and the value you do deliver will have a very high impact. However, the contrary is also true.</p><h2 id="life-in-the-big-corp">Life in the Big Corp</h2><p>In November 2018 I joined Just Eat Takeaway.com and started my journey in to the Enterprise life. It&apos;s been eye opening! There is a lot less pressure on the individual, and part of that is because the company is so large and thus the impact of an individual is often much smaller. That&apos;s not to say you can&apos;t have a big impact, but it is usually harder.</p><p>The biggest difference for you will be the sheer amount of resources. Large companies usually don&apos;t have a shortage of money. They also gain a lot from a 1% increase in workforce productivity, so they&apos;re willing to invest in that. In a startup of 10 people a 1% increase may not amount to much, in an organisation of 500+ people a 1% increase is the same as hiring 5 more people. Putting money into training can save an enterprise a lot of money compared to hiring, so they will happily spend that money.</p><p>An enterprise is fantastic if you want freedom, less pressure, and ample resources to pour into your learning. They will often have formal training programmes for university and bootcamp graduates. For those who are a little more senior they usually won&apos;t bat an eye lid at paying you to go to an expensive conference. Likewise, the pressure to deliver early on will also be lower.</p><blockquote>If you&apos;re in your first couple of years in tech and you feel like you&apos;re stagnating in your growth, you should definetely consider moving on.</blockquote><h2 id="learning-in-a-startup-vs-an-enterprise">Learning in a startup vs an enterprise</h2><p>We&apos;ve explored a little bit what the life of a startup and an enterprise is, but I want to focus on comparing the learning environments for a moment.</p><p>A startup can be stressful, you&apos;ll need to put in the effort to learn yourself, and you may find it hard to do this during your work hours. To contrast that, an enterprise can often be slow moving, your opportunities to have big impact and break the norms can be a lot lower.</p><p>On the other hand, an enterprise is usually willing to throw time and money at you to help you learn. Many companies embrace personal development and will give you extra time away from work to go to conferences or take courses. Just Eat give me a generous budget, 5 days a year which I can book off, and will deal with international conferences outside of those constraints.</p><p>It&apos;s a personal choice which will be best for you. In my experience a startup was really great for me, but by the end of my second year I was burned out and completely drained. I had learned a lot but had to take a sizable break before starting anything new just to let my mind recover. Right now I&apos;m reaping all the benefits of a big enterprise and enjoying easy training in a lower stress environment, but my work doesn&apos;t shift the companies income nearly as much as it did for a startup.</p><h2 id="making-the-choice">Making the choice</h2><p><strong>If you&apos;re unsure which is best for you, I would always suggest defaulting to an enterprise.</strong> This has nothing to do with the &quot;sink or swim&quot; we spoke about earlier, but it has everything to do with resources. If you&apos;re early on in your career, having a couple years of learning in an environment which is willing to open it&apos;s wallet is a wonderful experience. You&apos;ll find a low barrier to learning new things, and you won&apos;t be lumbered with thoughts of &quot;if I don&apos;t deliver X, we won&apos;t make that sale&quot;.</p><p>But don&apos;t let that discourage you, if there&apos;s a product you have a passion for and you trust the people leading it, a startup can be a wonderful experience packed with challenge and opportunity. Just make sure you&apos;re critiquing it against where you are in your career, and whether it&apos;s going to help you move to the place you&apos;re trying to get to.</p><p>I&apos;ll close by saying this, no matter what you choose, focus on your learning and growth. <strong>If you&apos;re in your first couple of years in tech and you feel like you&apos;re stagnating in your growth, you should definetely consider moving on.</strong> Your primary goal in those first few years should be to learn and experience as much as you can, if you&apos;re employeer is not able to facilitate that then it&apos;s okay to move.</p><p>Which ever you choose to go with, I&apos;m confident it&apos;ll be great! Enjoy finding a bunch of different opportunities and see what comes through.</p>]]></content:encoded></item><item><title><![CDATA[The Green Coder [Issue #3] - Giving good estimates]]></title><description><![CDATA[A good estimate sets a shared expectation between you and the person asking. It should act as a starting point for conversation, and should always come with context to ensure the asker walks away feeling well informed, even when the estimate is vague.]]></description><link>https://www.elliotblackburn.com/the-green-coder-issue-3-giving-good-estimates/</link><guid isPermaLink="false">642b3c338dd0f500013f53fe</guid><category><![CDATA[the-green-coder]]></category><category><![CDATA[communication]]></category><dc:creator><![CDATA[Elliot Blackburn]]></dc:creator><pubDate>Wed, 06 Jan 2021 15:12:00 GMT</pubDate><content:encoded><![CDATA[<p><em>This is an archive version of issue 1 of The Green Coder, a short experiment which has since morphed into <a href="https://podcasters.spotify.com/pod/show/the-fresh-engineer?ref=elliotblackburn.com">The Fresh Engineer Podcast</a>. Check it out for a continuation of these thoughts!</em></p><hr><p>This week I was having a chat with <a href="https://twitter.com/acbdev?ref=elliotblackburn.com">Anna Beltrami</a>, she&apos;s our amazing iOS developer and is quite new to our team. We were trying to figure out some estimates for a couple pieces of work, towards the end she asked a question which got me thinking.</p><blockquote>I think I need to be a bit more realistic with my expectations, and become better at giving estimates. I am usually too optimistic and don&apos;t take surprises into account. Do you have any tips on how to become better at giving estimates?</blockquote><p>There are two truths in the world of software.</p><ol><li><strong>Every day you&apos;re going to get asked when something will be done.</strong></li><li><strong>No one in our industry has any idea when they&apos;re going to have anything done.</strong></li></ol><p>Whether you&apos;re a junior engineer on day one or a senior engineering manager with a decade of experience, you&apos;re going to be asked for estimates nearly daily. So how can you give good estimates, especially when you&apos;re new to the job?</p><h2 id="what-does-a-good-time-estimate-look-like">What does a good time estimate look like?</h2><p>A good estimate sets a shared expectation between you and the person asking. It should act as a starting point for conversation, and should always come with context to ensure the asker walks away feeling well informed, even when your estimate is vague. Here are the key things you want to convey with a good estimate.</p><ol><li><strong>A time range</strong>, you&apos;ll rarely be able to estimate an exact date or time for something so give a time range. 1-3 working days, 6-8 weeks, 3-4 hours - whatever your estimate is, the moment you give someone a range they know it&apos;s not a deadline you&apos;re promising but an <strong>estimate.</strong></li><li><strong>An idea of the risks that might cause a delay.</strong> When someone asks for an estimate, they don&apos;t just want a date and time, they want to learn about the progress of the task. By listing out some risks or possible reasons for delays, you open up that conversation and allow them to ask more questions.</li><li><strong>A confidence level in the estimate you&apos;re giving.</strong> If you&apos;re estimating 6-8 weeks for a whole project delivery, how confident are you that it&apos;ll be within that range? Is it using all new technologies and it&apos;s a &quot;finger in the air&quot; estimate, or maybe it&apos;s something you&apos;ve done 1000 times but you&apos;re just waiting on another team to finish a dependant piece of work.</li></ol><p>The person asking for the estimate wants to walk away more informed, they usually don&apos;t mind if you&apos;re unsure of your estimate - they just want to learn a bit more to help enable them to progress on something themselves. Here&apos;s how one of my recent estimates sounded:</p><blockquote>It&apos;s a pretty big piece of work, my gut says about 6-8 weeks but we&apos;ve not done much investigation yet. If it&apos;s similar to X that we did last month then it&apos;ll be closer to 6 weeks, however if we want to do user testing first then it could be longer than 8 weeks still. Assuming the spec we&apos;ve got doesn&apos;t change too much, I feel fairly confident we&apos;ll deliver it within 6-8 weeks.</blockquote><p>With this estimate I&apos;ve given a clear time estimate the person, in this case a Product Manager, can lean on. I&apos;ve also included a bit of information about the risks, in this case we haven&apos;t done user testing, and a way the risk might be avoided. I&apos;ve then given a rough idea of how confident I am in the estimate given the current spec that we both have.</p><h2 id="how-can-i-improve-my-estimates">How can I improve my estimates?</h2><p>The central part of a good estimate is considering what might cause a delay and how likely it is that those issues will happen. This is also the core of why many estimates are wrong, you can&apos;t know every potential problem no matter how experienced you get!</p><blockquote>Try to list out between 3 and 5 possible things that could cause the task to take longer and try to figure out which of those is most likely.</blockquote><p>If you feel like you&apos;re struggling to make accurate estimates, there are usually two possible reasons.</p><ol><li><strong>You&apos;re not considering enough risks around a piece of work.</strong> If you think this might be the case, I would suggest taking your time over estimates, try to list out between 3 and 5 possible things that could cause the task to take longer and try to figure out which of those is most likely. For those, you&apos;ll want to add an appropriate amount of extra time onto your estimate.</li><li><strong>You&apos;re working with a lot of unknowns that you are struggling to identify.</strong> This will definetely be a problem when you&apos;re in a new company, or a new job role. If you are new and this feels like it might be part of the issue, it&apos;s okay to add extra time into your estimates to account for it. You can even highlight it as a risk! It&apos;s entirely valid to say &quot;I&apos;ve never done this before so it might take me a few days more than someone else&quot;.</li></ol><p>When you&apos;re in a new job or tackling something new, it&apos;s okay to take longer over estimates. It&apos;s quite rare that you&apos;ll be in a disaster situation and will be asked to provide an estimate for something, it&apos;s okay to ask to get back to someone, it&apos;s also okay to speak to others to get their opinions on an estimate.</p><p>Every estimate you give is an opportunity to exchange information, and build rapport with the person asking. Take time over your estimates, don&apos;t hesitate to make people aware of estimates which you&apos;re unsure about, and <strong>failing all else it&apos;s okay to say &quot;I really can&apos;t begin to estimate that, I would need answers to X, Y, and Z first&quot;.</strong></p>]]></content:encoded></item><item><title><![CDATA[The Green Coder [Issue #2] - Building your engineering tool chain]]></title><description><![CDATA[Choosing your own tool chain is both hard, and deeply personal. The right choices can make you more productive, the wrong choices can hold back your career. None the less, it can also be one of the most fun parts of being a software engineer.]]></description><link>https://www.elliotblackburn.com/the-green-coder-issue-2-building-your-engineering-tool-chain/</link><guid isPermaLink="false">642b3bd98dd0f500013f53ee</guid><category><![CDATA[the-green-coder]]></category><dc:creator><![CDATA[Elliot Blackburn]]></dc:creator><pubDate>Wed, 23 Dec 2020 17:04:00 GMT</pubDate><content:encoded><![CDATA[<p><em>This is an archive version of issue 1 of The Green Coder, a short experiment which has since morphed into <a href="https://podcasters.spotify.com/pod/show/the-fresh-engineer?ref=elliotblackburn.com">The Fresh Engineer Podcast</a>. Check it out for a continuation of these thoughts!</em></p><hr><p>It&apos;s week two so that means we&apos;re on a technical topic today. I wanted to kick off with a topic that will begin for you in your pre-professional days and won&apos;t end until well after you retirement. The tool chain you use and make your own is one that will be of constant debate amongst you and your future colleagues. It&apos;ll be one of the most divisive and personal topics, and it&apos;ll also be one of the most fun.</p><p>In software engineering we&apos;re fortunate to, usually, be able to choose our own tools. Many are free, and others are often inexpensive. With this choice comes freedom and responsibility. Today we&apos;re going to talk about the common types of tools you&apos;ll need to use, how to choose which ones to invest time into, and a couple pitfalls I see newer engineers struggle with.</p><h2 id="aim-to-be-agnostic-but-ensure-you-learn-one-well">Aim to be agnostic, but ensure you learn one well</h2><p><strong>Far too many people get married to their tools</strong>, this is not noticeable when you have the luxury of working on your own machine. However, when you try to help out a new colleague with some tasks on their machine, you&apos;re going to wish you were more comfortable working across different operating systems and text editors.</p><p><strong>Your end goal should be expertise in your chosen core tool chain, with a broad working skill set across other standard options.</strong> In other words, you want to be a &quot;T Shaped&quot; individual. The top cross of the T represents breadth of understanding across a subject area, the vertical line down represents a depth of skill in a particular area. This should be the long term goal of your skills with various tool chains. To give you an idea, here is my T shaped tool chain.</p><p>Some of my chosen daily drivers:</p><ul><li>Emacs / VS Code.</li><li><a href="https://www.zsh.org/?ref=elliotblackburn.com">Zsh</a> with my <a href="https://github.com/bluehatbrit/dotfiles?ref=elliotblackburn.com">personal configuration files</a>.</li><li>Git &#xA0;on the command line.</li><li><a href="https://www.mozilla.org/en-GB/firefox/new/?ref=elliotblackburn.com">FireFox</a> as my web browser.</li><li>Curl the industry standard cli http client.</li></ul><p>Other tools I have working knowledge of and can comfortably use:</p><ul><li>Notepad on windows, vi and nano on linux.</li><li>Any Jetbrains IDE and Visual Studio, a popular .NET IDE.</li><li>Bash - the most common shell on linux systems.</li><li>PowerShell and cmd - common shells for windows.</li><li>I can use the dev tools reasonably well in Chrome, Safari, and Edge.</li><li>Postman, a cross platform http client.</li></ul><p>With these tools I have some which I&apos;m fast at using and can make use of advanced functionality, but I&apos;m also not paralysed the moment I have to SSH or RDP onto a more minimal system. I can also get things done quickly on a colleagues machine if needed.</p><h2 id="avoid-the-os-wars">Avoid the OS wars</h2><p>Younger me was quite dogmatic about which operating system was superior. As time has moved on, I&apos;ve dropped this and I spend my time using Linux, Windows, and MacOS every week. The key thing that swayed me is the fact that there are many operating systems and as an engineer you <em>will</em> be forced to work on different ones throughout your career.</p><p>These days I&apos;m not as agile with Windows as I used to be, my powershell-foo is not what it used to be. But I work across linux, mac, and windows most weeks due to the demands of the business I work in. I love discussing the pros and cons of operating systems, and there are aspects of some which drive me insane, but it is <strong>really important</strong> to realise quickly that you&apos;ll be better at your job if you can confidently work across them all. That&apos;s not to say you need to learn each inside and out, but in the first few years of your career you should try to spend some time learning the basics of mac, windows, and a linux system or two.</p><h2 id="common-tools-youll-need">Common tools you&apos;ll need</h2><p>Okay, so what is the base minimum toolchain you should be thinking about in your first few years? I think it&apos;s important to keep it really simple, and much of it will depend on what you&apos;re building. Here is a list of what I would suggest builds the foundation of your toolchain.</p><ul><li>Editor / IDE - You&apos;ll use for 85% of your work so it&apos;s important to learn one well over time. Try to understand the shortcuts and move away from the mouse when doing most of your tasks.</li><li>Email client - This one might surprise you. Email is definetely a bore, but let me tell you. The longer you&apos;re at an organisation, and the more senior you become in your career, the more email you&apos;ll be dealing with. Treat an email clinet like your IDE, choose one, and learn it&apos;s advanced functionality like inbox rules. If possible, find one you can extend with scripts. Don&apos;t go overboard on this, Thunderbird is a great option. Many times you&apos;ll be stuck with gmail but even that can still be quite powerful.</li><li>Shell - Use something simple and common but learn it well as you&apos;ll likely find many problems become simpler when they&apos;re in a shell. I wouldn&apos;t muck around too much with shells like zsh, or fish to start with unless all the senior folks around you are doing so. Stick to the defaults, they&apos;re just as powerful as anything else. Powershell, and Bash are great places to start.</li><li>Operating system - This is as much a tool as anything else, make sure you&apos;re comfortable with a spread of options but commit to one to be an expert in. If Windows is your thing then that&apos;s great, as long as you&apos;re ready to hop on a linux box every so often. If you&apos;re you prefer mac, just make sure you have Remote Desktop ready to go to debug issues on a Windows server.</li></ul><h2 id="how-to-choose-your-brand-of-tools">How to choose your brand of tools</h2><p>My number one piece of advice for you when choosing tools is simple, <strong>use what the senior engineers around you are already using.</strong></p><blockquote>Use what the senior engineers around you are using.</blockquote><p>Put aside everything else in your first job, and commit to using what the senior engineers are using. You might have a couple weeks of pain trying to learn the interfaces, but the moment you need help you&apos;ll have it from people who&apos;ve been spending the best part of a decade using that particular piece of software.</p><p>The approach of using what everyone else is using won&apos;t be one you use forever. You&apos;ll find that as you continue over the next couple of years in your career, you&apos;ll want to start choosing tools that fit you a bit better. That&apos;s where my next few pieces of advice come in, but I want to stress the first point. <strong>If you&apos;re new to a technology or type of tool, just use what your team and seniors are using, it&apos;s a great place to start!</strong></p><p>So you&apos;re past that point and now you&apos;re starting to make your own choices. My next category for choice is &quot;flexibility&quot;, you want to choose a tool which will work in a variety of scenarios and tackle several tasks. By doing this you reduce the amount of tools you need to learn and you leave more room in your brain for the hard stuff. Be careful not to confuse multi-use and flexibility with &quot;highly configurable&quot;. Configurable tools are often ones which give you a lot of flexibility, but they can also be traps ready to snare you and drag you down into the Wonderland of configuration.</p><h2 id="question-your-past-choices">Question your past choices</h2><p>The tools you choose today may not be the best tools for you tomorrow. I would suggest spending a bit of time once a year critiquing and re-evaluating 1-2 of your tools. Is vscode the right editor for what you&apos;re doing now? Maybe you&apos;re better off with a more complete IDE. After doing this a few times for a given tool you&apos;ll hopefully find yourself settling on longer term happiness with that choice. This is when yo uknow you&apos;ve hit the sweet spot!</p>]]></content:encoded></item><item><title><![CDATA[The Green Coder [Issue #1] - Help, I don't know anything!]]></title><description><![CDATA[Be it long term imposter syndrome, or the realisation that your mistakes can lose the company money, this can be a sucky thing to experience. But let me tell you, we all go through it, and it will pass.]]></description><link>https://www.elliotblackburn.com/tgc-1-help-i-dont-know-anything/</link><guid isPermaLink="false">642b3aca8dd0f500013f53ce</guid><category><![CDATA[the-green-coder]]></category><category><![CDATA[teams]]></category><dc:creator><![CDATA[Elliot Blackburn]]></dc:creator><pubDate>Wed, 16 Dec 2020 13:06:00 GMT</pubDate><content:encoded><![CDATA[<p><em>This is an archive version of issue 1 of The Green Coder, a short experiment which has since morphed into <a href="https://podcasters.spotify.com/pod/show/the-fresh-engineer?ref=elliotblackburn.com">The Fresh Engineer Podcast</a>. Check it out for a continuation of these thoughts!</em></p><hr><p>You&apos;ve just started your first job, you&apos;re a week in and you&apos;ve spent every day so far thinking something like this:</p><blockquote>Oh no, I know absolutely nothing! How am I possibly going to do this task? Someone&apos;s going to find out soon.</blockquote><p>Be it imposter syndrome, or the realisation that your mistakes can lose the company money, this can be a sucky thing to experience. But let me tell you, we all go through it, and it will pass. This week I wanted to focus in on that feeling and discuss a way to react to it.</p><p>When you start your first job in the industry there are going to be two things going on. First you&apos;re going to be using your skills in a professional context for the first time, and second you&apos;ll be learning about the company you&apos;ve just joined. It&apos;s easy to conflate those two things into a single ball of panic and worry. However, I think it&apos;s important to try and draw distinctions between the two. Let me unpack what I mean in a bit more detail.</p><p>It&apos;s fairly common, especially for those of you from a university background, to land in your first engineering role and have a sudden realisation that you don&apos;t know nearly as much as the others around you. This is completely normal! You&apos;ve had a sudden change of environment from a place of learning with peers to a place of learning with more senior folks and mentors. This shift can take a bit of time to settle in to. The style of learning is different, and the expectation <em>feels</em> different. It can often be easy to lose sight of the true expectation on you. When an organisation hires a junior engineer, the majority of the time, they expect you to start by knowing very little and to learn and grow over time. Let me repeat that: <strong>the only expectation for your first few months is to learn</strong>. Soak up as much as you can and don&apos;t worry about getting it right, this is your time space and opportunity to learn and make mistakes.</p><blockquote>The only expectation for your first few months is to learn.</blockquote><p>Usually I find most people are okay with the idea of spending a few months just learning. The part many people often aren&apos;t expecting is just how complicated the organisation they are working for can be. Every organisation is different and sometimes the hardest part of a new job is understanding how things tick. Departments, reporting lines, roles and responsibilities, the vision, the gate keepers, and the stake holders - learning all of this takes time. It&apos;s not something anyone can or will expect you to take in on day one, no matter how good the on-boarding seminars are. It will take you time to experience these different aspects or your organisation, and in fact, after a certain size the learning never seems to stop! I&apos;ve been at Just Eat for over 2 years and not a week goes by where I don&apos;t learn something new about Just Eat.</p><p>It&apos;s very easy to feel like the forest of &quot;new things&quot; in front of you is never ending and that you&apos;re not good enough to find your feet. The truth is that usually as a junior engineer you&apos;re experiencing a large shift in two areas, where as many more experienced engineers just have the new organisation to deal with. It can be overwhelming at first but this period of learning is fully expected of you as a junior engineer and you will ramp up much quicker than you expect.</p><p>The commonality between all of these new things is that time is a great teacher. Over time you&apos;ll tackle each question one at a time and you&apos;ll start building an intuition of how to tackle the next few. In my experience it takes a junior engineer around 3 months to be contributing at a net positive. For the time prior to that, the full expectation is that you&apos;re primarily <em>consuming</em> organisational resources to learn. Even after 3 months you&apos;ll continue to learn and require time from your more senior team members, but you will most likely be contributing in a way that puts you in the positive. That said, I wouldn&apos;t expect a junior engineer to be up to their full pace until at least 6 months into a role, and usually I&apos;d expect it to take even longer. This seems to be common across most companies I&apos;ve worked at despite their size.</p><p>The one thing I find myself repeating to junior engineers over and over again is this.</p><blockquote>Give it time, and give yourself grace.</blockquote><p>Don&apos;t panic, ask lots of questions, know that everyone around you expects and wants you to spend the majority of your time learning. As you move up through the ladder of experience you&apos;ll come to have more expected of you so treasure the time you have to learn and make the most of it. Over time you&apos;ll find your feet and will start to pick up speed, and before you know it people will be coming to you with their questions.</p>]]></content:encoded></item><item><title><![CDATA[Just Eat's engineering rituals]]></title><description><![CDATA[Over the last 3-4 years we've made great stides forward in our operations and reliability, to the point where we're now removing many of the processes we put in place to help get us to this stage.]]></description><link>https://www.elliotblackburn.com/when-important-people-leave/</link><guid isPermaLink="false">61de16061d4c8100010060a1</guid><category><![CDATA[devops]]></category><category><![CDATA[just-eat]]></category><category><![CDATA[software engineering]]></category><dc:creator><![CDATA[Elliot Blackburn]]></dc:creator><pubDate>Mon, 16 Nov 2020 19:00:00 GMT</pubDate><content:encoded><![CDATA[<p>Just Eat have somewhere around 800 components and about 95 engineering teams at the time of writing.</p><p>Keeping the beast running, and it&apos;s customers fed is pretty important since we make most of our money from orders. If you can&apos;t place an order, we can&apos;t make money, so up-time and reliability are pretty crucial to the business. Over the years we&apos;ve added small rituals and strategies that we found really helpful in keeping things running.</p><p>Lets start with how we deploy things into production in the first place.</p><h2 id="deployments-canaries-and-release-warranty">Deployments, canaries, and release warranty</h2><p>Our process to deploy changes to production is usually pretty dull, which is <a href="https://zachholman.com/posts/deploying-software?ref=elliotblackburn.com">just the way we like it</a>. When you merge a change into master it ticks through a very straight forward pipeline. Our CI builds the latest master code and then trigger our deployment pipeline which deploys the code onto a couple of QA environments representing different types of settings. When it&apos;s on a QA environment, any automated tests will run and assuming they pass it&apos;ll then do the same thing with a staging environment. The fun comes when it gets to production.</p><p>Once we&apos;ve gone through QA and Staging, we then have a button to press to start the production deployment. This allows us to spend any extra time verifying or checking changes if we need to. When you hit the button to approve the production deployment it then goes into a canary state, it&apos;ll deploy into production and will then point 20% of the production traffic to the canary instances. The amount is actually configurable per-component but most teams use 20% as a starting point.</p><p>We then leave it running in canary for a while, how long will depend on how critical the component is. Some critical components will sit in canary over night or over the weekend. This lets us collect some data and monitor metrics to make sure things are working as we expect and that we definetely haven&apos;t broken anything. Finally, when we&apos;ve hopped through any other canary steps , again - configured on a component basis, we promote the canary to full production. That redirects 100% of the traffic to our new instances and tears down the old deployments.</p><p>We also practice a &quot;release warranty&quot;, this is where we actively monitor the deployment for a short time after it&apos;s been released to catch anything we may have missed before. The warranty period is usually about 20 minutes, but again it&apos;s on a per-component basis depending on how important that feature is to the platform.</p><p>All in all, seeing a release out the door can be done in just over an hour if your builds and tests are fast. Some legacy components take longer, but that&apos;s ok, we&apos;d rather they were don&apos;t carefully with lots of time to spot issues.</p><p>That process is all well and good, but sometimes things do go wrong. When they do go wrong we&apos;ve got a pretty good process for getting through incidents.</p><h2 id="incidents">Incidents</h2><p>PagerDuty&apos;s going mental, your half asleep, and your spouse is pissed because &quot;that bloody thing&quot; woke them up at 2am as well. What happens next? Once you&apos;ve taken the abuse and escaped the bedroom to let your partner go back to bed, the incident process kicks off. It&apos;s pretty well drilled into us before we go on-call for the first time, and it&apos;s not complicated either.</p><p>If the alerts are from automated checks then the on-call team member is likely the first responder and it&apos;s up to them to triage and figure out if it&apos;s &quot;just a blip&quot; or something that needs real attention. Usually we&apos;re trying to figure out if something is actually broken, or if it&apos;s just an overly sensitive check. If something is broken and it&apos;s going to have an impact they&apos;ll raise the alarm with the SOC (Service Operations Centre) team.</p><p>The alternative to this is that it&apos;s something reported by the customer care teams, customers, or the SOC have noticed it themselves. In this situation they confirm it&apos;s an issue and immedietely page the relevant teams and raise a Production Incident (PI) ticket in Jira.</p><p>SOC will raise the PI if there is a legitimate issue, that will automatically create a video call link and a room in slack. Then we get to work, the next goals after triage are:</p><ol><li>Mitigate the issue, find a way to resolve the issue so it&apos;s not impacting customers or restaurants directly.</li><li>Diagnose the issue, often we do this as part of mitigating the problem but sometimes we don&apos;t get that luxuary. When we can mitigate early we will and we&apos;ll then diagnose after once the fire is quenched.</li><li>Learn and improve, once we understand what the issue was we then move to make our long term fixes and share the knowledge where relevant.</li></ol><p>Getting a PI assigned to you also earns you a spot at the daily leadership meeting. These happen every weekday morning and review all the incidents from the past 24 hours (and the weekend, if it&apos;s Monday). Our engineering leadership get a chance to ask questions about the incident, these are never to assign blame or shout at people, it&apos;s purely to understand the trends in issues going on across the organisation. It&apos;s also a place where the leadership get to understand any ongoing risks and give the relevant people a nudge when there are long standing issues. I&apos;d enjoy these meetings a lot more if they weren&apos;t the first thing in my calendar every time I have to attend one. Aside from that they&apos;re great learning opportunities and they work really well to keep the leadership plugged into the nitty gritty aspects of our tech.</p><h2 id="operation-excellence">Operation excellence</h2><p>The OpEx is a simple monthly all-hands meeting for all engineers. The host walks us through the monthly operational performance against our reliability goals, some teams will present notable incidents from the past month. These are usually a 1-2 minute explanation of what happened, why, and what we&apos;ve learned from it. These slots are a fantastic way for the organisation as a whole to learn about notable foot-guns. We wrap up with a couple of slots of major operational announcements, these cover a wide range of things from up coming audits, to notes on upcoming change freezes for major holidays.</p><p>I think this meeting was originally setup by our (now ex-) CIO, Dave Williams, who left the organisation a few months ago. They&apos;re now hosted by a Director of Engineering who pulls together the content and gets speakers from incidents over the last month.</p><p>The best thing about the monthly OpEx is that it&apos;s a monthly meeting / call, and you can sit there and soak everything in without any pressure to contribute if you&apos;re not on the lineup that week. The entire OpEx enforces our no-blame approach to incidents and we&apos;ve learned an awful lot from them.</p><p>We have a number of other processes and rituals, but those are the corner stones of reliability at Just Eat. At the end of it all, we want to work on a stable and reliable platform that doesn&apos;t wake us up every night. Over the last 3-4 years we&apos;ve made great stides forward in our operations and reliability, to the point where we&apos;re now removing many of the processes we put in place to help get us to this stage. They&apos;ve served their purpose now, and we&apos;re able to move faster with higher reliability without some of them. I don&apos;t see these ones going away any time soon though, and that&apos;s probably for the best.</p>]]></content:encoded></item><item><title><![CDATA[TicketBalloon]]></title><description><![CDATA[In a couple of days, Dan Bendell and I will be launching the first version of our new business, TicketBalloon.]]></description><link>https://www.elliotblackburn.com/ticketballoon-the-start/</link><guid isPermaLink="false">61de16061d4c8100010060a0</guid><dc:creator><![CDATA[Elliot Blackburn]]></dc:creator><pubDate>Mon, 09 Nov 2020 17:57:50 GMT</pubDate><media:content url="https://www.elliotblackburn.com/content/images/2020/11/feature-dashboard-2.png" medium="image"/><content:encoded><![CDATA[<img src="https://www.elliotblackburn.com/content/images/2020/11/feature-dashboard-2.png" alt="TicketBalloon"><p>In a couple of days, <a href="https://twitter.com/Dan_Bendell?ref=elliotblackburn.com">Dan Bendell</a> and I will be launching the first version of our new business, TicketBalloon. It&apos;s a small event ticketing platform focused on the group booking market. Group bookings seem to be a common problem where event organisers need to group together individual bookings but their ticket system doesn&apos;t have that sort of capability. TicketBalloon is group focused, to make a booking you need to create or join an existing &quot;group&quot; with an invite code. A couple of examples of where this might be useful:</p><ul><li>Family or group holidays, in particular ski holidays where you often book accommodation together.</li><li>Youth camps for organisations such as Scouts who run large camping breaks where Scouts come in their groups and need to be known and groups together for all the data processing and info collection.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.elliotblackburn.com/content/images/2020/11/image-1.png" class="kg-image" alt="TicketBalloon" loading="lazy" width="300" height="300"><figcaption>Our first logo, drawn up by Dan</figcaption></figure><h2 id="product-inception">Product inception</h2><p>The idea of TicketBalloon came when my brother started working for an organisation running summer youth camps. They&apos;d been using spreadsheets for the past few years to manage bookings and taking payments through bank transfers (BACS). He ran an event using that process for around 1,000 young people and found a lot of friction. Mistakes got made and it took a lot of time to keep up-to-date. Their problem was &quot;group bookings&quot;, no booking / ticket system seemed to have functionality supporting grouping bookings together in this way. I started asking some serious questions to understand the problem, rather than just revelling in my brothers frustration.</p><p>I&apos;d been looking for something to prototype in Elixir, a language I&apos;d been wanting to try out for a while. I had a few days off work planned and decided to take a swing at building something to solve their problem. I had booked an airbnb in Gloucestershire with the plan to chill out and get away from things and used this a project to focus on. Over those days I made the first few commits and built the foundation of the data models and workflows. After that it was a lot of work to start refining the rest of the system, integrating stripe and transactional emails, and making the platform enjoyable to use.</p><p>After a few months of working on it and pulling Dan into the project, I let my brother have a sneak peak of what we were building. He sold the idea pretty quickly to his org and managed to get them excited to have a system which removed a lot of work from their plates. We arranged a demo with them which happened to fall 4 days before my wedding and 1 day before I moved house. Arranging the demo for then was a huge mistake, but it all went well and they seemed to get the concept.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.elliotblackburn.com/content/images/2020/11/product-screenshot.png" class="kg-image" alt="TicketBalloon" loading="lazy" width="1676" height="907" srcset="https://www.elliotblackburn.com/content/images/size/w600/2020/11/product-screenshot.png 600w, https://www.elliotblackburn.com/content/images/size/w1000/2020/11/product-screenshot.png 1000w, https://www.elliotblackburn.com/content/images/size/w1600/2020/11/product-screenshot.png 1600w, https://www.elliotblackburn.com/content/images/2020/11/product-screenshot.png 1676w" sizes="(min-width: 720px) 720px"><figcaption>TicketBalloon as of right now</figcaption></figure><h2 id="incorporating-a-company">Incorporating a company</h2><p>Once the demo was done, we had to start getting set up as a company so we could gear up to take and process payments. We did a lot of reading about how to go about this because the decisions you make get expensive to undo if you screw them up. Here are some of the main questions we had to answer and where we landed after a lot of research and thought.</p><ul><li><strong>Where should we incorporate?</strong> We&apos;re both based in the UK but depending on where we want to do business this is still a consideration, especially with Brexit. Most of the advice we got was that it&apos;s easiest to use your home country / state as it&apos;s less to learn, we went with this for now but it may not be right for us forever.</li><li><strong>What type of company do we want?</strong> We were inches away from going for a non-profit, similar to <a href="https://ghost.org/?ref=elliotblackburn.com">Ghost</a>. What stopped us? It was purely a case of figuring out <em>how</em>. There&apos;s very little advice around and we don&apos;t want to spend lots of money initially getting the advice and incorporation going, we wanted it to be lightweight. We&apos;ll revisit the decision in the future as we get more customers and have a bit of money to spend on investigating it but for now we&apos;re a Limited Company.</li><li><strong>What are our obligations?</strong> This was a big one, we don&apos;t want to screw up account filing etc so we wanted to know all of our obligations. It turns out they&apos;re quite simple in the UK, you need to file a confirmation statement yearly, file a tax return and pay any due tax, and file yearly accounts. That&apos;s it really!</li><li><strong>Do we want an accountant, or shall we try it ourselves?</strong> We decided to go with an accountant in the end. My wife&apos;s organisation had been working with an independant accountant who had done them a lot of good and managed to free up a lot of cash, even just by reducing their accounting workload that needed doing. We had a call with them and decided to go ahead and have them incorporate the company for us and take on our accounts. While we&apos;re small it looks like we&apos;ll be paying them around &#xA3;150 a year which is ideal while we&apos;re getting going.</li><li><strong>How much initial investment shall we put in?</strong> If we manage to land a customer on a mid or upper tier we should have all our immediate costs covered which is a fantastic position to be in. Our two costs are hosting (roughly $40 a month) and accountancy (roughly &#xA3;150 a year). Right now Dan and I could afford to keep the company going indefinetely from our day jobs but we want to set ourselves a target to get self-sufficient. We decided to inject in an initial &#xA3;500 each. Yeah that&apos;s right, &#xA3;500, not &#xA3;500k or &#xA3;500m. We&apos;re bootstrapping it ourselves and we think that&apos;ll give us around a year to see what we can make of this thing. If we chew through that runway without any customers then we&apos;ll sit down and re-evaluate where we think things are going.</li></ul><h2 id="the-path-forward">The path forward</h2><p>My brothers organisation are on a free trial at the moment, and all being well they&apos;re looking to start a monthly subscription on one of our mid-range tiers. They&apos;re already drip feeding us feedback and this is really helping us to smooth off the sharp edges we&apos;d missed. The thing we now want to focus on is getting another customer to see if we can prove that we&apos;ve built a product that works for the generic problem, rather than just one organisation.</p><p>Right now we&apos;re spending time working on our landing pages and marketing material to give ourselves a basis of material to start sales conversations. Once we&apos;ve got that down we&apos;re going to fire some cold / warm emails out to contacts we have who might have similar problems in their organisations. At the same time we&apos;re also going to start turning on the online taps to our website in the hopes of learning some more about our customers.</p><p>My big questions right now is whether we&apos;ve built something that more than one person wants, and whether anyone will buy it during a global pandemic. I&apos;m hopeful and I feel like it&apos;s mostly a question of effort, we&apos;re willing to pivot as needed and generally I think we have a pretty solid offering. Time will tell with how we do, we&apos;re total amateures at this business thing but we&apos;re giving it a good crack.</p>]]></content:encoded></item></channel></rss>