<?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"><channel><title><![CDATA[Gavin Henderson's Blog]]></title><description><![CDATA[Gavin Henderson's Blog]]></description><link>https://gavinhenderson.me</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 18:29:21 GMT</lastBuildDate><atom:link href="https://gavinhenderson.me/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Learning Swarm]]></title><description><![CDATA[A Learning Swarm is designed to be a highly effective way to rapidly generate shared knowledge within a team on a topic they previously had no experience in. The output of a learning swarm can also serve as a resource for others to gain the same know...]]></description><link>https://gavinhenderson.me/learning-swarm</link><guid isPermaLink="true">https://gavinhenderson.me/learning-swarm</guid><category><![CDATA[software development]]></category><category><![CDATA[Software Engineering]]></category><category><![CDATA[General Programming]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[Scrum]]></category><category><![CDATA[agile]]></category><dc:creator><![CDATA[Gavin Henderson]]></dc:creator><pubDate>Wed, 10 Jan 2024 00:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1718308278228/e8a49bce-eb9f-4327-a49b-911f99c04bc8.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A Learning Swarm is designed to be a highly effective way to rapidly generate shared knowledge within a team on a topic they previously had no experience in. The output of a learning swarm can also serve as a resource for others to gain the same knowledge as the team who ran the learning swarm making it even more useful.</p>
<h1 id="heading-timebox"><strong>Timebox</strong></h1>
<p>To run your own Learning Swarm you first need to decide upon a timebox, which is the time you are willing to dedicate an entire team towards learning the topic. It depends on the size of the topic but for it really to be worthwhile I would recommend around 3 days. You can always review it after 3 days and decide to extend it by a day at a time if need be.</p>
<p>Having a timebox for the swarm also really helps people focus on getting their work into a complete state as soon as possible and then iterate on it from there. A timebox also reassures managers that you have limited the time you won’t be delivering direct customer value, even if your timebox has to be large it is still reassuring to have it</p>
<h1 id="heading-scope-and-project"><strong>Scope and Project</strong></h1>
<p>Once you have decided on how long and when you are going to run the swarm you can start thinking about what you are going to do during the learning swarm. First you should come up with a scope of what you want to learn, it might also be helpful to say what is explicitly out of scope. An example of your scope might be ‘GraphQL’, you might want to specify that although GraphQL uses the network ‘network protocols’ is out of scope of the swarm.</p>
<p>After you have defined your scope you should come up with an idea for a project you want to build individually. In the example of our GraphQL learning swarm you might want to make the project something along the lines of, “Build a todo list app using GraphQL”. This might seem really narrow but you would be really surprised at how 4 or 5 different people can build wildly different things based on this project description. I would encourage you to go deep into an area that interests you, but make sure to stay in scope!</p>
<h1 id="heading-swarm-time"><strong>Swarm Time!</strong></h1>
<p>Now you know what you want to learn and build you can get swarming! Everyone in the team should go their separate ways and learn about the topic and build the project. As you go everyone should keep detailed notes about what they have been learning, these will be the main artifact of the swarm. They might also be fairly repetitive between each person but that’s fine at the end we will merge them into a single document.</p>
<p>It is important you keep your daily stand up going because you might need to nudge each other to stay on track or you might have to help unblock someone because everyone needs a fresh pair of eyes from time to time. It’s also a good idea to share any resources you find on the topic, it’s not a competition so sharing is encouraged.</p>
<h1 id="heading-closing-the-swarm"><strong>Closing the Swarm</strong></h1>
<p>When you reach the end of the timebox now is the time to come back together and share what you have learned! Setup an hour or two (depends on team size) to come together and discuss what you have learned. Everyone should give a quick informal demo of what they made and share what they enjoyed and what they found hard. It is good to record these meetings if you can for later reference. I would also suggest someone takes notes and generates a summary of the meeting.</p>
<p>It might also be worth summarising all of the learning notes that everyone has taken into a single place. I wouldn’t spend a long time doing this, just pull all the best parts together so other people can learn from it.</p>
<p>Now your team all knows a great deal more about a topic in a short amount of time and has practical experience with whatever you were looking into. So it is time to get cracking on with your real project!</p>
<p>As with all processes, make it your own! Maybe run it as suggested first then tweak it so it works better for you.</p>
<h1 id="heading-example"><strong>Example</strong></h1>
<p>We recently ran a Learning Swarm at Findmypast so we could get up to speed on authentication, specifically Auth0 libraries as they are our chosen third party for authentication going forward. We set our project to build a React app using auth0 authentication. Surprisingly we all took a different approach. We had people focus on automating config deployment, protecting backends, serverless authentication and comparing the different libraries Auth0 provides. In 3 days we went from a high level understanding of authentication to a deep understanding of the standards as well as plenty of code samples we all learnt from.</p>
]]></content:encoded></item><item><title><![CDATA[Build or Buy?]]></title><description><![CDATA[Should you buy software or build it yourself?
Software teams are often faced with the decision between buying in software solutions or building their own.
The example I will use is one that we I recently faced whilst working with a large client with ...]]></description><link>https://gavinhenderson.me/build-or-buy</link><guid isPermaLink="true">https://gavinhenderson.me/build-or-buy</guid><category><![CDATA[software development]]></category><category><![CDATA[Software Engineering]]></category><category><![CDATA[General Programming]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[Scrum]]></category><category><![CDATA[agile]]></category><dc:creator><![CDATA[Gavin Henderson]]></dc:creator><pubDate>Sun, 30 Apr 2023 23:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1718309154674/ec4ddba7-1f6f-4c03-8367-ef78242992fc.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Should you buy software or build it yourself?</p>
<p>Software teams are often faced with the decision between buying in software solutions or building their own.</p>
<p>The example I will use is one that we I recently faced whilst working with a large client with an existing platform. Like most companies, we need a way to identify users securely. So we are asking the question: “buy or build an authentication system?”</p>
<p>When you face this question you typically have three options:</p>
<ol>
<li><p>Build a bespoke solution</p>
</li>
<li><p>Host an open source solution</p>
</li>
<li><p>Or pay a SAAS company to deal with everything for you</p>
</li>
</ol>
<p>Hopefully when you approach this decision as a company you will be doing it with people from across the entire business. The decision will often come down to money, which makes sense, however if you ask the wrong questions you will end up with a solution that only benefits you in the short term.</p>
<p>I’ll run through a few questions you might hear and why I think they are flawed and I will end with how to frame the question to get the best decision that works long term.</p>
<h2 id="heading-what-is-the-cheapest-option"><strong>What is the cheapest option?</strong></h2>
<p>When you go to answer the question of what is the cheapest you have to start by obtaining the cost of each option.</p>
<p>It is easy to get the price of a SAAS option, you just go to the price page or contact sales. Importantly this price you get is totally accurate, you don’t have to worry about over or underestimating.</p>
<p>On the other hand it is very hard to measure the total cost of building and maintaining your own solution so it tends to get underestimated. Also humans are just bad at giving estimates and the bigger the project the worse the estimate.</p>
<p>To get the cost of building your own first you have to decide what you want to build. It is likely that you will not build all the features that the SAAS product is offering as the immediate value of them might not be obvious. However, in reality the features you are suggesting to leave out might be features that the SAAS business has added after extensive research and is actually one of their most popular features. So your comparison already starts out unfair as you are not giving an equal comparison.</p>
<p>So to answer this question you end up comparing solutions which are of massively varying quality and you are looking at estimates which have widely different confidence levels. Not a recipe success.</p>
<p>If you hear this question I encourage you to push back, and try and reframe the situation with the final question.</p>
<h2 id="heading-what-is-the-most-cost-effective-option"><strong>What is the most cost effective option?</strong></h2>
<p>This is a much better question to be asking, mainly because it shows consideration for maintenance cost however it still has issues.</p>
<p>When you are looking at how cost effective each option is you need to think about how long you want this solution to last. Do you expect this to be in place for 6 months or 10 years? Is it going to be an area of active development for your company or is it something you want to set up and forget?</p>
<p>It is easy to measure the ongoing hosting cost but that is probably the smallest ongoing cost. However there are so many uncertainties that are impossible to capture. What if a new standard is released? Do you implement it or stay on the old standard? What if the open source library becomes unpopular, do you start maintaining it yourself? What if the open source solution uses a database tech no one is familiar with?</p>
<p>The stars may align and you might not have any problems but more than likely there will be unforeseen problems that you couldn’t possibly capture when thinking about how cost effective the different options are.</p>
<p>In the example problem we have at FindMyPast looking at the cost effectiveness we will probably find that hosting an open source option is far more cost effective than building our own. You only have to pay maintenance costs and if the open source solution is popular it is likely in active development and maintenance, none of which you have to pay for. The ongoing cost of an open source solution will probably be lower than the ongoing cost of a SAAS product. However, you mitigate a lot of the uncertainty by going with a company who is motivated to solve those problems by the money they receive from customers.</p>
<h2 id="heading-what-is-the-most-profitable-option"><strong>What is the most profitable option?</strong></h2>
<p>This is the best question to ask as it now leaves room to acknowledge opportunity cost. No one can argue that the answer to this question is not important, ultimately profit is what drives the business. What is the opportunity cost? Google says:</p>
<blockquote>
<p><em>“the loss of other alternatives when one alternative is chosen” - lexico</em></p>
</blockquote>
<p>In our case our case the opportunity cost is the money that should have been made on the features you could have made instead of building your own system. This is again pretty much impossible to measure but it is very important to recognize the size of this cost.</p>
<p>Now that we are asking what option is more profitable we can begin to make an informed decision. One way to make profit is by adapting and innovating faster than your competition. When you are thinking about building you need to decide if the part of you application under question is something you can use to beat your competitors and make more money. If the answer is no, then you should buy.</p>
<p>If we look back again at the example of FindMyPast wanting a new authentication system. A robust authentication system is very important to have for us, and we can’t operate without one. However we will not win customers by innovating in the authentication space. We will win customers by innovating in the family history area. If we acknowledge that all time spent working on authentication is waste because it is not competing then anytime spent now or in the future we on authentication is waste. So we want to minimize that work as much as possible to direct efforts to areas that we can beat our competitors at and gain more profit.</p>
<p>So it likely makes sense for us to buy an auth platform so that FindMyPast engineers can focus purely on family history and think about authentication as little as possible.</p>
<p>You might be thinking, won’t asking this question always lead you to buy? Well a lot of the time it will. Your company should focus on delivering direct innovation in their respective area and not reinventing the wheel at expense of delivering value.</p>
<p>Sometimes you will ask this question and the answer will truly be to build it ourselves. An excellent example of this is search at FindMyPast. We have our own customer searching setup, something which many SAAS businesses are well established at. However, we asked the question: can we use innovation in this area to beat our competition? The answer is definitely a yes, we have billions of complex records so we have a very unique problem and also the speed of searching and indexing will lead directly to a better customer experience. This proves that asking the question “what is the most profitable option” will not always lead you to buy but in fact lead you to the correct answer.</p>
<h2 id="heading-still-not-convinced"><strong>Still not convinced?</strong></h2>
<p>Another reason to buy is documentation! Everyone hates to write documentation but the only thing worse is working with a microservice without any documentation. Buying means you don’t have to write documentation and most SAAS companies put a lot of resources into making their documentation very robust.</p>
<p>Another reason to buy is admin panels. Admin panels are often an afterthought and are not given the same usability consideration as the customer facing application is. For SAAS businesses the admin panel is the customer facing application so they will invest heavily making the admin panels top quality.</p>
<p>In conclusion, when you come to this decision you need to reflect on whether or not building will give you a competitive edge, if it wont spend as little time as possible on it. Spend the time you would have been building on out moving the competition.</p>
<p>Sources:</p>
<ul>
<li><p><a target="_blank" href="https://management.simplicable.com/management/new/why-your-estimates-are-always-wrong">Why your estimates are always wrong</a></p>
</li>
<li><p><a target="_blank" href="https://www.amazon.co.uk/dp/B00I52D6KQ/ref=dp-kindle-redirect?_encoding=UTF8&amp;btkr=1">The art of doing twice the work in half the time</a></p>
</li>
<li><p><a target="_blank" href="https://www.amazon.co.uk/Unicorn-Project-Developers-Disruption-Thriving-ebook/dp/B07QT9QR41/ref=sr_1_1?crid=1OZDFVWARONOH&amp;dchild=1&amp;keywords=unicorn+project&amp;qid=1596554804&amp;s=digital-text&amp;sprefix=unicorn+proj%2Cdigital-text%2C275&amp;sr=1-1">Unicorn Project</a></p>
</li>
<li><p><a target="_blank" href="https://www.lexico.com/definition/opportunity_cost">Opportunity Cost</a></p>
</li>
</ul>
]]></content:encoded></item></channel></rss>