<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Cloud and engineering blogs</title>
	<atom:link href="https://www.madetech.com/blog/category/cloud-and-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.madetech.com/blog/category/cloud-and-engineering/</link>
	<description>Made Tech provide Digital, Data and Technology services to the UK public sector</description>
	<lastBuildDate>Mon, 13 Jul 2026 11:21:13 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.madetech.com/wp-content/uploads/2024/10/cropped-madetech-favicon-32x32.png</url>
	<title>Cloud and engineering blogs</title>
	<link>https://www.madetech.com/blog/category/cloud-and-engineering/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>A pyramid scheme! Have we been unit testing wrong?</title>
		<link>https://www.madetech.com/blog/a-pyramid-scheme-have-we-been-unit-testing-wrong/</link>
		
		<dc:creator><![CDATA[Tom Vaughan]]></dc:creator>
		<pubDate>Fri, 27 Feb 2026 14:32:24 +0000</pubDate>
				<category><![CDATA[Cloud and engineering]]></category>
		<category><![CDATA[Life at Made Tech]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[unit testing]]></category>
		<guid isPermaLink="false">https://www.madetech.com/?p=20066</guid>

					<description><![CDATA[<p>Has the traditional Testing Pyramid become outdated? Tom Vaughan explores Testing Trophy model as a replacement, advocating for integration tests to be the widest layer to ensure quicker, more reliable, and better-documented software changes.</p>
<p>The post <a href="https://www.madetech.com/blog/a-pyramid-scheme-have-we-been-unit-testing-wrong/">A pyramid scheme! Have we been unit testing wrong?</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Do you find testing especially testing?</h2>



<p class="wp-block-paragraph">I’ve always been taught to use the Testing Pyramid<sup data-fn="feef695f-f405-4ee6-84d1-3a9babf6b489" class="fn"><a href="#feef695f-f405-4ee6-84d1-3a9babf6b489" id="feef695f-f405-4ee6-84d1-3a9babf6b489-link">1</a></sup>.<br></p>



<p class="wp-block-paragraph">The basic idea is to write the most unit tests, as they are the smallest in scope and fastest to run. Then you write fewer integration tests, which are larger in scope and slower to run, before you finally write an even smaller number of end-to-end tests, which are the largest in scope and slowest to run.</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="466" height="246" src="https://www.madetech.com/wp-content/uploads/2026/02/image.png" alt="Diagram depicting the &quot;testing pyramid&quot; method of testing in three layers from fastest to run and smallest in scope to slowest to run and largest in scope." class="wp-image-20067" srcset="https://www.madetech.com/wp-content/uploads/2026/02/image.png 466w, https://www.madetech.com/wp-content/uploads/2026/02/image-300x158.png 300w" sizes="(max-width: 466px) 100vw, 466px" /></figure>



<p class="wp-block-paragraph">I’ve always been taught to use Test Driven Development<sup data-fn="79773ea1-bec0-40f3-a0c6-47bb33d7d5d3" class="fn"><a href="#79773ea1-bec0-40f3-a0c6-47bb33d7d5d3" id="79773ea1-bec0-40f3-a0c6-47bb33d7d5d3-link">2</a></sup><sup data-fn="c1e8438e-38bc-4465-b25a-22de9560f6aa" class="fn"><a href="#c1e8438e-38bc-4465-b25a-22de9560f6aa" id="c1e8438e-38bc-4465-b25a-22de9560f6aa-link">3</a></sup> (TDD).</p>



<p class="wp-block-paragraph">The basic idea of this is that you should write your tests before you write any code. Your tests codify the required behaviours of the software you then write, giving you an easy way to know when the feature you’re working on is complete. This should also document the context of the code you’ve written, making future changes theoretically easier.</p>



<p class="wp-block-paragraph">But I keep observing common issues with unit testing on the digital delivery teams I’ve worked with over the past several years.</p>



<p class="wp-block-paragraph">Recognise either of these from projects you’ve worked on?<br><br><strong>Problem 1:</strong> Lack of test confidence &#8211; Your application fails when you deploy it, despite all the unit tests you’ve written for the change you’re making and high test coverage.</p>



<p class="wp-block-paragraph"><strong>Problem 2:</strong> Testing stalls change &#8211; You make a simple change to your code, but you then need to totally restructure lots of unit tests in order to do it.</p>



<p class="wp-block-paragraph"><strong>Problem 3:</strong> High cognitive load &#8211; You want to understand the behaviour of a section of your codebase, but reading the unit tests provides little help.</p>



<p class="wp-block-paragraph">I’ve observed these problems dozens of times and they’ve always frustrated me because they seem to directly oppose the entire point of testing!<br><br>I believe good testing provides several significant benefits in software delivery:</p>



<ol class="wp-block-list">
<li>Good tests should give us confidence in the correctness of our changes</li>



<li>Good tests should allow us to make changes more quickly</li>



<li>Good tests should document how our system behaves</li>
</ol>



<h2 class="wp-block-heading">Introducing the Testing Trophy</h2>



<p class="wp-block-paragraph">The culprit is the Testing Pyramid. It’s outdated and obsolete.</p>



<p class="wp-block-paragraph">I’d like to introduce you to the Testing Trophy<sup data-fn="ec09fd19-aaa3-42ad-9198-67b55b017855" class="fn"><a href="#ec09fd19-aaa3-42ad-9198-67b55b017855" id="ec09fd19-aaa3-42ad-9198-67b55b017855-link">4</a></sup><sup data-fn="546c3834-30ed-416d-bdac-6646f7bae5fe" class="fn"><a href="#546c3834-30ed-416d-bdac-6646f7bae5fe" id="546c3834-30ed-416d-bdac-6646f7bae5fe-link">5</a></sup><sup data-fn="459f7937-af71-428e-9065-9c8ab372aeb1" class="fn"><a href="#459f7937-af71-428e-9065-9c8ab372aeb1" id="459f7937-af71-428e-9065-9c8ab372aeb1-link">6</a></sup> as a replacement. This is also sometimes known as the Testing Vase or <a href="https://engineering.atspotify.com/2018/01/testing-of-microservices">Testing Honeycomb</a>, but it&#8217;s essentially the same thing.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="679" height="688" src="https://www.madetech.com/wp-content/uploads/2026/02/image-1.png" alt="Diagram depicting the &quot;testing trophy&quot; method of testing in four layers." class="wp-image-20068" srcset="https://www.madetech.com/wp-content/uploads/2026/02/image-1.png 679w, https://www.madetech.com/wp-content/uploads/2026/02/image-1-296x300.png 296w" sizes="(max-width: 679px) 100vw, 679px" /></figure>



<h3 class="wp-block-heading">Integration tests are now the widest layer</h3>



<p class="wp-block-paragraph">The goal of these tests is to codify business logic. This typically means each test maps to either an individual acceptance criterion or an obvious, easy-to-understand part of a user journey.</p>



<p class="wp-block-paragraph">For example, if your user journey is “to allow users to log in and check their health records”, you might have an integration test to check they can log in, another to check that a logged-in user can access their health records, and a third to check that a person’s health record displays the correct information.</p>



<p class="wp-block-paragraph">Integration tests shouldn’t really care about the internals of your code. In theory, if you re-wrote your codebase in a new language, you should still be able to run the existing integration tests with minimal change needed.</p>



<p class="wp-block-paragraph">Integration testing also avoids some of the common problems attributed to end-to-end testing &#8211; extremely long, brittle tests which fail intermittently. By splitting these long journeys up, integration tests are more reliable.</p>



<p class="wp-block-paragraph">To address the three problems described above (lack of test confidence, testing stalls, and high cognitive load), I recommend migrating the bulk of your unit tests to integration tests.</p>



<h3 class="wp-block-heading">End-to-end tests stay very thin</h3>



<p class="wp-block-paragraph">The goal of end-to-end testing is to ensure your application works as expected in an environment that closely replicates the production environment. In other words, they’re infrastructure tests. Only a few of these tests are needed, and they should cover complete user journeys.</p>



<p class="wp-block-paragraph">To keep your end-to-end testbench manageable, it needs to rely on the presence of your integration testbench. This means you can keep the number of expensive end-to-end tests to a minimum.</p>



<h3 class="wp-block-heading">Unit testing is now also a very thin layer</h3>



<p class="wp-block-paragraph">There are two goals for unit testing now: exhaustive testing and complex-subsystem testing. Both of these rely on your integration testbench to assert that your codebase actually works in a general sense, and only test very specific functionality that would otherwise slip through the cracks.</p>



<p class="wp-block-paragraph">Exhaustive testing is for when you want to test all possible values or combinations within a feature. You could integration test the “common” combinations to check that the code works overall, but you could then add a unit test that would loop through every possible single value or combination of values to ensure they all still work.</p>



<p class="wp-block-paragraph">For example, imagine you’re building an online shop, and you have integration tests that verify that users can successfully purchase green paint. Exhaustive unit tests could build on this to ensure the paint is also available in the 100s of other colours your shop offers.</p>



<p class="wp-block-paragraph">Complex-subsystem testing is for when you have an isolated nugget of complexity in your codebase that you want to test in isolation. Because it has many edge cases and is complex, highly focused unit testing is important to ensure it works correctly. In essence, this pattern uses the same philosophy as integration testing our services as opaque boxes &#8211; just zoomed in to treat a specific class, module, or function as an opaque box instead.<br><br>For example, I once wrote a set of complex-subsystem unit tests for a smart rate limiter I was working on. You could integration test that the rate limiter works for several examples in the wider context of the application it lived within, but then add unit tests on top of this for every edge case you can think of for just the rate limiting logic.</p>



<h3 class="wp-block-heading">Linting/Static analysis is the new base layer of the model</h3>



<p class="wp-block-paragraph">The goal of this layer is simply to speed up our ability to write quality code and tests. By using automated tools, we can catch more careless errors without having to test for them specifically.</p>



<p class="wp-block-paragraph">And that’s the Testing Trophy!</p>



<h2 class="wp-block-heading">What does this look like in practice though?</h2>



<p class="wp-block-paragraph">But what about the real world? It’s all well and good to evangelise a theoretical testing model, but how would you go about applying this to a real project you’re working on?</p>



<p class="wp-block-paragraph">Below are some examples of common queries, and how I’d approach addressing them.</p>



<h3 class="wp-block-heading">“I’m on a project with an OO codebase and lots of unit tests for each class. How can I introduce integration testing?”</h3>



<ul class="wp-block-list">
<li>You can probably use your existing test runner (jest, junit, pytest, etc.) and extend it with tools like Localstack, Wiremock, or Test Containers.</li>



<li>You can then write integration tests which read like chunks of a user journey or individual acceptance criteria. Something like “I want to allow users with an existing account to log in” or “I want to reject users who log in with the wrong password”. This is often referred to as <a href="https://en.wikipedia.org/wiki/Behavior-driven_development">Behavior Driven Development</a> (BDD).</li>



<li>You can convince your team with working code examples to back up what you’re saying. Hopefully, it shouldn’t take them long to see that writing a handful of integration tests with very few mocks saves them considerable time and effort!</li>
</ul>



<h3 class="wp-block-heading">“I’m working on a frontend using a modern JS framework. What does the testing trophy even look like for this codebase?”</h3>



<ul class="wp-block-list">
<li>Render the entire app (and spin up any backend services) and use tools like Cypress or Playwright to end-to-end test full user journeys (e.g., logging in, adding a product to the basket, checking out, and requesting a refund).</li>



<li>Render each page and click through multiple components to integration test. These tests should naturally make sense as parts of a user journey (i.e, a login flow).</li>



<li>Render each significant visual component and verify that it renders correctly on screen during unit testing (exhaustive unit testing). You can also use tools such as Storybook or Chromatic to help with this.</li>



<li>Render each complex (think lots of gnarly state logic, etc.) component and run through edge cases (complex subsystem unit testing).</li>
</ul>



<h3 class="wp-block-heading">“Our team has an end-to-end testbench which has all of our user stories in but is flakey, expensive to run, and breaks all the time. How do we fix this?”</h3>



<ul class="wp-block-list">
<li>Is your entire end-to-end test stack running in a production-like environment? If not, fix this first! Even if it means you’re no longer able to run these tests locally, that’s an acceptable tradeoff.</li>



<li>Are your tests actually written as full user journeys? Or do they try to do much more, testing edge cases or individual chunks of a user journey? If the test isn’t a full user journey through your system (e.g, I want to buy new shoes → my new shoes are on my feet), it probably belongs as an integration test.</li>
</ul>



<h3 class="wp-block-heading">“What’s the problem with just having lots of integration and lots of unit tests?”</h3>



<ul class="wp-block-list">
<li>It’s fine to have partially overlapping tests! This is often a good pattern: an exhaustive unit test (the login button renders), an integration test (I can log in), and a larger e2e test (I can log in, buy something, and pay for it).</li>



<li>If your integration tests are easy to run, can be run locally and debugged, having equivalent unit tests that try to do exactly the same thing is unnecessary, increases cognitive load, and runs the risk of rotting over time.</li>
</ul>



<h3 class="wp-block-heading">“My manager/boss says that we should aim for X% code coverage”</h3>



<ul class="wp-block-list">
<li>Code coverage has diminishing returns (beyond 70%)<sup data-fn="90706ee3-6293-44ef-aa74-f738e83ae1c3" class="fn"><a href="#90706ee3-6293-44ef-aa74-f738e83ae1c3" id="90706ee3-6293-44ef-aa74-f738e83ae1c3-link">7</a></sup>. It’s often good at revealing which chunks of a codebase haven&#8217;t been tested, but it&#8217;s bad at revealing which lines of code you should/shouldn’t be hitting.</li>



<li>If their focus is on overall system performance, you could consider trialling DORA metrics<sup data-fn="276a5ec1-c21b-414d-b041-cd2c43fef7f2" class="fn"><a href="#276a5ec1-c21b-414d-b041-cd2c43fef7f2" id="276a5ec1-c21b-414d-b041-cd2c43fef7f2-link">8</a></sup> within your team or organisation instead.</li>



<li>They might start to trust you more when your new testbench starts automatically catching issues that the existing unit tests miss. I added a simple end-to-end testbench to a service our team owned, which had previously been very heavily unit-tested. It caught 5 bugs in the first month that would’ve otherwise gone to production without being spotted by the existing testbench.</li>
</ul>



<h3 class="wp-block-heading">“Our team has dedicated testers/SDETs, I don’t want to upset them by changing how we test”</h3>



<ul class="wp-block-list">
<li>Most organisations employ testers to be test experts, not human computers. Most organisations and testers welcome automation and the increased confidence it brings through better testing.</li>



<li>Bring them into the conversation early if you can. They’re likely to be highly in favour of new testbenches and better automation! After all, these tools make their jobs easier, freeing them up to focus on more important work like paying down test technical debt or activities like user acceptance testing (putting new stuff in front of actual users).</li>
</ul>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><em>Annex &#8211; The types of tests</em></h2>



<p class="wp-block-paragraph">I want to take the time to define exactly what I mean when referring to all the different types of tests. In my experience, everyone has a <em>subtly</em> different definition of them &#8211; so for the sake of my sanity and your understanding, here are the definitions I’m using<sup data-fn="0761b531-d83c-4c30-bb0b-a82daa790b78" class="fn"><a href="#0761b531-d83c-4c30-bb0b-a82daa790b78" id="0761b531-d83c-4c30-bb0b-a82daa790b78-link">9</a></sup><sup data-fn="c1ba0bbb-c8ee-4867-86c4-1f6f4e1e20f8" class="fn"><a href="#c1ba0bbb-c8ee-4867-86c4-1f6f4e1e20f8" id="c1ba0bbb-c8ee-4867-86c4-1f6f4e1e20f8-link">10</a></sup>:</p>



<h3 class="wp-block-heading">End-To-End (E2E) testing</h3>



<p class="wp-block-paragraph">Sometimes referred to as Functional, Integrated, System, or Smoke testing.<br><br>End-to-end tests are typically scoped to Level 1 (Software System) of the C4 model. Of all the tests, end-to-end tests are as realistic as you’re able to get and often need to be run in a production-like environment. These tests typically read like fully complete user-journeys.<br><br>External software systems are mocked as needed and pragmatic infrastructure changes are made (for example, running with fewer replicas than the production instance to save on server costs).<br><br>End-to-end tests are meant to be wide-reaching and realistic, at the expense of speed and ease of being run.</p>



<h3 class="wp-block-heading">Integration testing</h3>



<p class="wp-block-paragraph">Sometimes referred to&nbsp; as Functional, Component or Service testing.<br><br>Integration tests are typically scoped to Level 2 (Containers) of the C4 model. Integration tests are the middle child between end-to-end and unit tests, carefully balancing scope, speed, ease of running, and realism. These tests typically read like chunks of a user-journey, or specific acceptance criteria.<br><br>Other major components of your software system are mocked out, and tightly-coupled parts aren’t. For example, integration tests for a login API might mock everything except the API, a database storing login credentials, and a queue which login requests are read from. Infrastructure is also often mocked, with tools such as docker, localstack, or lightweight kubernetes clusters being popular choices to only stand up a small handful of tightly-coupled services.</p>



<p class="wp-block-paragraph">Integration tests are a balance between being closer to reality, treating your software as an opaque box unlike unit testing; and fast and simple to write/run, unlike slower and more brittle end-to-end tests.</p>



<h3 class="wp-block-heading">Unit testing</h3>



<p class="wp-block-paragraph">Unit tests don’t really go by any other names, but there are a million competing definitions of what constitutes a “unit” of software!<br><br>Unit tests are typically scoped to either Level 3 (Components) or Level 4 (Code) of the C4 model. Due to the limited scope of these tests, other classes/modules/functions/objects within the same codebase are mocked as needed.<br><br>Unit tests are meant to be quick to write and run, at the expense of scope and realism.</p>



<h3 class="wp-block-heading">Static analysis</h3>



<p class="wp-block-paragraph">Sometimes also known as linting. Static analysis covers a vast array of tools and automations and can often be found in places like pre-commit hooks, continuous integration pipelines, and even your code editor. This bundles together linters, formatters, type checkers,</p>



<p class="wp-block-paragraph">Static analysis tools are typically scoped to Level 4 (Code) of the <a href="https://c4model.com/">C4 model</a>. They aren’t really “tests” in the traditional sense, but enforce things like code styling and good practices.</p>



<p class="wp-block-paragraph">Ideally, they should be run as close to code being written as possible for the shortest feedback loop possible.</p>



<p class="wp-block-paragraph"></p>


<ol class="wp-block-footnotes"><li id="feef695f-f405-4ee6-84d1-3a9babf6b489"><em>Mark Cohn &#8211; Succeeding with Agile: Software Development Using Scrum, 2009</em> <a href="#feef695f-f405-4ee6-84d1-3a9babf6b489-link" aria-label="Jump to footnote reference 1">↩︎</a></li><li id="79773ea1-bec0-40f3-a0c6-47bb33d7d5d3"><em>https://martinfowler.com/bliki/TestDrivenDevelopment.html</em> <a href="#79773ea1-bec0-40f3-a0c6-47bb33d7d5d3-link" aria-label="Jump to footnote reference 2">↩︎</a></li><li id="c1e8438e-38bc-4465-b25a-22de9560f6aa"><em>https://www.madetech.com/blog/messy-software-projects</em>/ <a href="#c1e8438e-38bc-4465-b25a-22de9560f6aa-link" aria-label="Jump to footnote reference 3">↩︎</a></li><li id="ec09fd19-aaa3-42ad-9198-67b55b017855"><em>https://www.wiremock.io/post/rethinking-the-testing-pyramid</em> <a href="#ec09fd19-aaa3-42ad-9198-67b55b017855-link" aria-label="Jump to footnote reference 4">↩︎</a></li><li id="546c3834-30ed-416d-bdac-6646f7bae5fe"><em>https://kentcdodds.com/blog/the-testing-trophy-and-testing-classifications</em> <a href="#546c3834-30ed-416d-bdac-6646f7bae5fe-link" aria-label="Jump to footnote reference 5">↩︎</a></li><li id="459f7937-af71-428e-9065-9c8ab372aeb1"><em>https://kentcdodds.com/blog/write-tests</em> <a href="#459f7937-af71-428e-9065-9c8ab372aeb1-link" aria-label="Jump to footnote reference 6">↩︎</a></li><li id="90706ee3-6293-44ef-aa74-f738e83ae1c3"><em>https://kentcdodds.com/blog/write-tests#not-too-many</em> <a href="#90706ee3-6293-44ef-aa74-f738e83ae1c3-link" aria-label="Jump to footnote reference 7">↩︎</a></li><li id="276a5ec1-c21b-414d-b041-cd2c43fef7f2"><em>https://www.thoughtworks.com/en-gb/insights/articles/improving-your-bottom-line-with-four-key-metrics</em> <a href="#276a5ec1-c21b-414d-b041-cd2c43fef7f2-link" aria-label="Jump to footnote reference 8">↩︎</a></li><li id="0761b531-d83c-4c30-bb0b-a82daa790b78"><em>https://martinfowler.com/bliki/UnitTest.html#SolitaryOrSociable</em> <a href="#0761b531-d83c-4c30-bb0b-a82daa790b78-link" aria-label="Jump to footnote reference 9">↩︎</a></li><li id="c1ba0bbb-c8ee-4867-86c4-1f6f4e1e20f8"><em>https://martinfowler.com/articles/practical-test-pyramid.html</em> <a href="#c1ba0bbb-c8ee-4867-86c4-1f6f4e1e20f8-link" aria-label="Jump to footnote reference 10">↩︎</a></li></ol><p>The post <a href="https://www.madetech.com/blog/a-pyramid-scheme-have-we-been-unit-testing-wrong/">A pyramid scheme! Have we been unit testing wrong?</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>From Policy to Practice: How MHCLG’s data model is enabling us to deliver at pace</title>
		<link>https://www.madetech.com/blog/from-policy-to-practice-how-mhclgs-data-model-is-enabling-us-to-deliver-at-pace/</link>
		
		<dc:creator><![CDATA[Ben Ashwell]]></dc:creator>
		<pubDate>Mon, 13 Oct 2025 16:29:14 +0000</pubDate>
				<category><![CDATA[Cloud and engineering]]></category>
		<category><![CDATA[Housing]]></category>
		<category><![CDATA[Local government]]></category>
		<category><![CDATA[Social Housing]]></category>
		<category><![CDATA[Awaab's Law]]></category>
		<category><![CDATA[Hazard Case Management]]></category>
		<guid isPermaLink="false">https://www.madetech.com/?p=19862</guid>

					<description><![CDATA[<p>Learn how MHCLG’s data model is helping Made Tech deliver faster, smarter compliance with Awaab’s Law by streamlining hazard management, improving data, and protecting tenants.</p>
<p>The post <a href="https://www.madetech.com/blog/from-policy-to-practice-how-mhclgs-data-model-is-enabling-us-to-deliver-at-pace/">From Policy to Practice: How MHCLG’s data model is enabling us to deliver at pace</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">The sector has been discussing the implications of Awaab’s Law, usually with a mix of uncertainty and fear, for much of the last year. The team at Made Tech Housing have been following developments and supporting customers like London Borough of Camden with some preparatory initiatives around <a href="https://www.madetech.com/case-studies/camden-damp-and-mould-case-management/">streamlining damp and mould reporting</a>.</p>



<p class="wp-block-paragraph"><br>However, it wasn’t until the draft guidance was published and we drilled down into the details of the proposed processes and obligations that we realised how significant a change this could be for our customers and how ill-equipped many existing solutions are for the type of deadline-oriented case management the guidance points towards.</p>



<h2 class="wp-block-heading">Awaab’s Law &#8211; the fundamentals</h2>



<p class="wp-block-paragraph">To recap: Awaab’s Law requires social landlords to investigate and respond to hazards in set timeframes.</p>



<p class="wp-block-paragraph">It defines different categories of hazards and the timeframes in which landlords must respond:</p>



<ul class="wp-block-list">
<li><strong>Emergency Hazards </strong>&#8211; hazards that present an imminent and significant risk of harm to the health or safety of tenants. These must be investigated and, if required, made safe within 24 hours. As the guidance highlights, this aligns with how day-to-day repairs teams currently manage emergency repairs.</li>



<li><strong>Significant Hazards</strong> &#8211; hazards that present a serious risk of harm to tenant health or safety, where a reasonable landlord with the relevant knowledge (including the tenant’s individual circumstances) would take urgent steps to make safe. These must be investigated within 10 days.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="764" height="620" src="https://www.madetech.com/wp-content/uploads/2025/10/Awaabs-Law-hazard-types.png" alt="Awaab's Law hazard categories" class="wp-image-19865" srcset="https://www.madetech.com/wp-content/uploads/2025/10/Awaabs-Law-hazard-types.png 764w, https://www.madetech.com/wp-content/uploads/2025/10/Awaabs-Law-hazard-types-300x243.png 300w" sizes="(max-width: 764px) 100vw, 764px" /></figure>
</div>


<h2 class="wp-block-heading">The underlying admin burden</h2>



<p class="wp-block-paragraph">As my colleague Chris discussed with Dave Loudon <a href="https://www.madetech.com/events/two-months-to-go-have-you-prepared-for-awaabs-law-admin/?utm_source=email&amp;utm_medium=campaign&amp;utm_campaign=awaabs_law_webinar">in our recent webinar</a>, there is considerable administrative complexity that landlords will need to manage to remain compliant:</p>



<ul class="wp-block-list">
<li>Reports coming in via multiple channels that need to be logged and acted on consistently.<br></li>



<li>Investigations to schedule, with planning teams juggling deadlines and ensuring nothing slips through the cracks.<br></li>



<li>Operative investigations that must be translated into tenant-friendly written summaries, produced within three days of completion.<br></li>



<li>Scheduling and tracking follow-on works, often across multiple contractors and teams.<br></li>
</ul>



<p class="wp-block-paragraph">These obligations create a new layer of administrative pressure. Social landlords require more than just compliance processes; they need systems that simplify, automate, and keep pace with evolving legislation. That’s why we’re building <a href="https://www.madetech.com/made-tech-housing/hazard-case-management/"><strong>Hazard Case Management for Awaab’s Law</strong></a> &#8211; a solution designed to help providers manage incoming reports, stay on top of deadlines, and generate tenant-friendly summaries automatically.</p>



<h2 class="wp-block-heading">MHCLG’s data model, and how we’re using it.&nbsp;</h2>



<p class="wp-block-paragraph">We’re delivering this new product at pace, so we were encouraged to read <a href="https://mhclgdigital.blog.gov.uk/2025/08/20/delivering-a-data-standard-to-support-awaabs-law-in-social-housing/">MHCLG’s recent blog post </a>and learn of the work they’ve been doing to develop a data standard for hazards.</p>



<p class="wp-block-paragraph">The model, built with HACT’s UK Housing Data Standards, brings together all the necessary information for teams to meet their obligations under Awaabs’ Law. By breaking the process into clear components, it maps directly to how landlords work day-to-day &#8211; which makes it much easier for suppliers like us to translate the standard into usable software.</p>



<p class="wp-block-paragraph"><strong>Investigation component: </strong>captures the details of hazard investigations. We’re using the investigation_notes field to feed into our AI-enabled summary generation, helping turn technical findings into clear tenant-friendly reports without adding to caseworkers’ admin burden.</p>



<p class="wp-block-paragraph"><strong>Property component: </strong>links hazard reports to the properties they relate to. We plan to use this data to provide landlords with insights into the types of properties and property attributes where hazards are most likely to occur, enabling a more efficient and proactive service for tenants.&nbsp;</p>



<p class="wp-block-paragraph"><strong>Work order component: </strong>records repair tasks that can be associated with a hazard case. Follow-on work is often where landlords drop the ball, as they struggle to piece together what work is required and when. Once an investigation is concluded and follow-on work is defined, we’ll enable tenants to book the work at a time that suits them through our tenant scheduling interface. This saves landlords time and admin, and increases the likelihood of tenants being home when operatives arrive.</p>



<p class="wp-block-paragraph"><strong>Tenant component: </strong>captures tenant and household member details, including attributes such as vulnerabilities. This information is critical when making the initial categorisation of a hazard as significant or emergency. We’ll be using data from this component to flag vulnerabilities clearly to case handlers in our case details screens.</p>



<p class="wp-block-paragraph"><strong>Appointments component: </strong>holds information about dates and times of scheduled hazard investigations. We’ll be using this data to help planners track which investigations are scheduled, which aren’t, and how long is left to meet the statutory timeframes.</p>



<h2 class="wp-block-heading">Built for the future</h2>



<p class="wp-block-paragraph">With the scope of Awaab’s Law set to expand over the next two years, day-to-day repairs processes are going to start morphing more and more into the shape of the Awaab’s Law process &#8211;&nbsp; deadline-driven, tightly tracked, and requiring clear tenant communication (all of which will benefit tenants). The fact that the model already incorporates attributes like SoR codes is vital, because it means hazard management can be integrated seamlessly alongside wider responsive repairs operations.</p>



<p class="wp-block-paragraph">What excites us most is the forward-looking design of the model. It’s not just about damp and mould today. Its modular structure anticipates the expansion of Awaab’s Law to cover all HHSRS Category 1 hazards, meaning the work we do now won’t need to be rebuilt later.&nbsp;</p>



<h2 class="wp-block-heading">A foundation for sector-wide improvement</h2>



<p class="wp-block-paragraph">As MHCLG outlines in their article, poor data standards across the housing sector cost hundreds of millions each year. Awaab’s Law requires a repeatable, deadline-driven process that many landlords would struggle to design on their own. By providing a shared model, MHCLG is helping to set a baseline for how hazards are recorded and tracked.</p>



<p class="wp-block-paragraph">Models like these create the conditions for greater data consistency in the sector, nudging both landlords and suppliers toward a common approach. In doing so, they reduce the risk of each organisation reinventing the wheel and make it far easier to build scalable solutions.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Awaab’s Law is a wake-up call for the sector. The deadlines are tight, the obligations are significant, and the risks of non-compliance are real. But with the right foundations, it’s also an opportunity to modernise housing services and improve tenant outcomes.</p>



<p class="wp-block-paragraph">For Made Tech, MHCLG’s data model has accelerated delivery for Camden and Barking &amp; Dagenham, giving us confidence that what we’re building today will scale seamlessly over the next two years. For the sector as a whole, it sets the stage for greater consistency, better data, and ultimately safer homes for tenants.</p>
<p>The post <a href="https://www.madetech.com/blog/from-policy-to-practice-how-mhclgs-data-model-is-enabling-us-to-deliver-at-pace/">From Policy to Practice: How MHCLG’s data model is enabling us to deliver at pace</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Why public sector digital can’t afford to shy away from SLAs</title>
		<link>https://www.madetech.com/blog/why-public-sector-digital-cant-afford-to-shy-away-from-slas/</link>
		
		<dc:creator><![CDATA[Corin Wilkins]]></dc:creator>
		<pubDate>Fri, 11 Jul 2025 11:38:16 +0000</pubDate>
				<category><![CDATA[Cloud and engineering]]></category>
		<category><![CDATA[Delivery]]></category>
		<category><![CDATA[Digital service delivery]]></category>
		<guid isPermaLink="false">https://www.madetech.com/?p=19703</guid>

					<description><![CDATA[<p>SLAs don’t have to be scary. When done right, they improve reliability and help teams focus on what matters.</p>
<p>The post <a href="https://www.madetech.com/blog/why-public-sector-digital-cant-afford-to-shy-away-from-slas/">Why public sector digital can’t afford to shy away from SLAs</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Over the last 17 years three little letters have instilled fear in every engineering team I&#8217;ve worked with: SLA, or Service Level Agreement. An SLA is simply a commitment from a team that owns a service, promising it will be available for a specified percentage of the time. But teams consistently shy away from making these commitments &#8211; even when they are forgiving.</p>



<p class="wp-block-paragraph">In this blog, I&#8217;ll explore the hidden costs of avoiding SLAs and the dangers of over-engineering for unattainable uptime. I’ll look at how a shift in mindset can help teams become more comfortable with being measured and some practical steps that can improve both service reliability and user satisfaction. Read on to discover how a more mature approach to SLAs can transform the way we deliver services and better serve the British public.</p>



<h2 class="wp-block-heading"><strong>SLA avoidance</strong></h2>



<p class="wp-block-paragraph">Historically, SLAs have been used as a commercial stick to penalise teams that don&#8217;t meet their commitments. Financial penalties for failing to meet an SLA have conditioned teams to either avoid them or insist on SLAs that don’t truly reflect service availability. Instead, teams fall back on metrics like bug report response times or processing a set number of tasks &#8211; neither of which benefits the users or adds business value.&nbsp;</p>


<div class="lazyblock-case-study-result-1oIKlG wp-block-lazyblock-case-study-result"><div class="mb-4 p-4 pl-0 d-flex align-items-center primary white-bg left-bordered-content animate__animated animate__fadeInRight">
    <div class="result-item-content pl-5">
        <h3 class="h4 mt-0 mb-2">TIP: Change the perspective</h3>
        <p class="mb-0">View SLAs as tools for improvement, not punishment. Changing the culture and mindset of service teams will help them focus on quality and user trust.</p>    </div>
    </div></div>


<h2 class="wp-block-heading"><strong>Are we overspending for uptime?</strong></h2>



<p class="wp-block-paragraph">When there&#8217;s no SLA, the idea&nbsp; that a service should have 100% uptime fills the vacuum. But aiming for 100% availability often results in excessive redundancy, such as running 3 servers instead of 2. Cloud providers are more than happy to charge for extra infrastructure, even if there is no need. Does the value of the service really justify tripling the cost? And what’s worse, redundancy doesn’t always guarantee uptime. A recent outage for a cloud provider across 2 of its UK data centres, meant that the rush to its third data centre overloaded capacity, causing widespread failures.</p>



<p class="wp-block-paragraph">Moreover, redundancy doesn’t just increase costs linearly. For example, running servers across multiple data centres incurs fees for data transfer between locations. I once worked in a team that ran a database across 3 data centres, but the constant data shuffling between them to ensure redundancy, added around £80k in unnecessary costs in just one month and when 2 of the data centres went down, there weren&#8217;t enough specialist servers in the remaining data centre to keep the system operational.</p>


<div class="lazyblock-case-study-result-23DKQK wp-block-lazyblock-case-study-result"><div class="mb-4 p-4 pl-0 d-flex align-items-center primary white-bg left-bordered-content animate__animated animate__fadeInRight">
    <div class="result-item-content pl-5">
        <h3 class="h4 mt-0 mb-2">TIP: Evaluate redundancy needs</h3>
        <p class="mb-0">Conduct a thorough analysis of service requirements to work out the appropriate redundancy levels. Teams should do a cost-benefit analysis to make sure that the financial investment aligns with the expected return in service reliability.</p>    </div>
    </div></div>


<h2 class="wp-block-heading"><strong>The cost of over-engineering</strong></h2>



<p class="wp-block-paragraph">When teams are pressured to achieve perfect reliability, they often over-engineer their systems regardless of whether there is a business need. This complexity comes with high operational costs, requiring more staff to maintain. The additional complexity also introduces additional failure modes, ironically making outages more likely. .</p>



<p class="wp-block-paragraph">Over-optimising reliability can also lead to opportunity cost. Teams may spend months optimising for rare outages when they could instead be building new features, improving user experience, or reducing costs. For example, a government team once spent 6 months developing a process to avoid more than 5 seconds of downtime during a database migration. The money spent on this could have been used for more impactful work elsewhere, or at a more fundamental level could have been spent elsewhere such as hiring additional nurses for the NHS.</p>


<div class="lazyblock-case-study-result-1RiO3A wp-block-lazyblock-case-study-result"><div class="mb-4 p-4 pl-0 d-flex align-items-center primary white-bg left-bordered-content animate__animated animate__fadeInRight">
    <div class="result-item-content pl-5">
        <h3 class="h4 mt-0 mb-2">TIP: Look at cost versus benefit</h3>
        <p class="mb-0">Discuss service costs in relatable terms, such as how many nurses could be hired with the budget. This helps clarify the trade-offs between cost and reliability.</p>    </div>
    </div></div>


<h2 class="wp-block-heading"><strong><strong>The security risks of avoiding updates</strong></strong></h2>



<p class="wp-block-paragraph">As services mature, they generally become more reliable. Bugs that cause early issues are fixed over time. However, as services mature the biggest risk to service reliability becomes changes to the system. Teams aiming for an unobtainable 100% uptime may consciously avoid making necessary updates or implement overly elaborate change management processes. This can be dangerous.</p>



<p class="wp-block-paragraph">Many modern web services rely on dozens, even hundreds, of third-party libraries &#8211; each one a potential source of security vulnerabilities. These need regular updates, but teams often fear making changes that could cause downtime. The result? Outdated services with a plethora of small vulnerabilities that build up over time. If these vulnerabilities align known as <strong><a href="https://en.wikipedia.org/wiki/Swiss_cheese_model" target="_blank" rel="noreferrer noopener">swiss cheese vulnerabilities</a></strong>, the risk of a security breach becomes more severe. Furthermore, services that avoid updates can become less relevant to users as they fail to meet their evolving needs.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://www.madetech.com/wp-content/uploads/2025/07/iStock-1472120357-1024x576.jpg" alt="" class="wp-image-19706" srcset="https://www.madetech.com/wp-content/uploads/2025/07/iStock-1472120357-1024x576.jpg 1024w, https://www.madetech.com/wp-content/uploads/2025/07/iStock-1472120357-300x169.jpg 300w, https://www.madetech.com/wp-content/uploads/2025/07/iStock-1472120357-768x432.jpg 768w, https://www.madetech.com/wp-content/uploads/2025/07/iStock-1472120357-1536x864.jpg 1536w, https://www.madetech.com/wp-content/uploads/2025/07/iStock-1472120357-2048x1152.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Frequent releases are essential for maintaining secure and relevant services. Teams familiar with continuous integration (CI) and continuous deployment (CD) often release updates tens of times daily. But when changes become rare, the skills and knowledge of how to do this safely fades, increasing the risk of failure and making teams even more hesitant to make updates.</p>


<div class="lazyblock-case-study-result-2aRS3c wp-block-lazyblock-case-study-result"><div class="mb-4 p-4 pl-0 d-flex align-items-center primary white-bg left-bordered-content animate__animated animate__fadeInRight">
    <div class="result-item-content pl-5">
        <h3 class="h4 mt-0 mb-2">TIP: Maintain operational skills</h3>
        <p class="mb-0">Create an environment where teams feel safe to deploy updates. Regular releases not only keep services relevant but also help teams keep up the skills needed to manage updates effectively.</p>    </div>
    </div></div>


<h2 class="wp-block-heading"><strong>Planning for the inevitable downtime</strong></h2>



<p class="wp-block-paragraph">The perception that a service needs to achieve 100% availability prevents teams from preparing for planned downtime. Many services don’t have a ‘shutter’ mechanism to notify users when a service is intentionally offline for maintenance. For example&nbsp; during&nbsp; a database migration. Providing users with a simple, branded message would offer a much better experience than a generic 4xx or 5xx error page if they try to access a service during downtime.</p>



<p class="wp-block-paragraph">Government digital services are expensive, but the convenience they offer the citizen generally justifies the cost. However, teams often lose sight of just how much they’re spending. A useful approach is to frame costs in relatable terms, like how many nurses could be employed with that money. When you look at it this way, striving for “.999%” availability is almost&nbsp; never worth the price.</p>


<div class="lazyblock-case-study-result-yEh6s wp-block-lazyblock-case-study-result"><div class="mb-4 p-4 pl-0 d-flex align-items-center primary white-bg left-bordered-content animate__animated animate__fadeInRight">
    <div class="result-item-content pl-5">
        <h3 class="h4 mt-0 mb-2">TIP: Plan for downtime</h3>
        <p class="mb-0">When maintenance is needed, inform users in advance with clear messages. This reduces frustration and improves the experience.</p>    </div>
    </div></div>


<h2 class="wp-block-heading"><strong><strong>How can the government move the needle?</strong></strong></h2>



<p class="wp-block-paragraph">UK government services must pass through a series of service assessments during their development stages &#8211; discovery, alpha, beta and live. However, many services remain in beta indefinitely. This isn’t because they’re unfit for live deployment, but because teams fear that funding might be cut once they move to the live stage. If these services were built to meet realistic SLAs, they could be operated at a fraction of the current cost.</p>



<p class="wp-block-paragraph">The Government Digital Service (GDS) standard includes the principle ‘operate a reliable service&#8217;. This states that ‘Users expect to be able to use online services 24 hours a day, 365 days a year.’ However, this phrasing unintentionally sets the expectation of 100% uptime, which is unrealistic. Teams are set up to fail if they aim for this, as most government services simply don’t have the budget to support such reliability.</p>



<p class="wp-block-paragraph">Instead, the service standard should say: ‘operate a service as reliable as necessary to meet user needs.’ It could include benchmarks like:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>Digital Service</strong></th><th><strong>SLA</strong></th><th><strong>Allowed downtime</strong></th></tr></thead><tbody><tr><td>Report-littering.gov.uk</td><td>97%</td><td>30 minutes per day</td></tr><tr><td>Submit your tax return</td><td>99%</td><td>15 minutes per day</td></tr><tr><td>Submit your tax return (in January)</td><td>99.999%</td><td>24 seconds per day</td></tr></tbody></table></figure>



<h2 class="wp-block-heading"><strong>Matching service expectations to needs</strong></h2>



<p class="wp-block-paragraph">However, it’s crucial to stress that the juice has to be worth the squeeze. Aiming for additional ‘9s’ in availability should only be pursued when the societal cost of not achieving that reliability outweighs the investment required. For example, if the cost of 0.001% of tax returns being filed late is less than guaranteeing 99.999% uptime, then we should avoid spending more money for such small improvements.</p>



<p class="wp-block-paragraph">Big players like Amazon or Google have modelled what a 15 minute outage will cost them in lost revenue. The web is filled with advice for attaining near perfect availability based on the models of these tech giants. However, the cost of a short outage to a government service is usually inconvenience or at worst reputational damage..&nbsp;</p>



<p class="wp-block-paragraph">In my opinion, most government services could tolerate up to 15 minutes of downtime per day without significant consequences. Of course some services are critical &#8211; lives may depend on them. But these are the exception, not the rule. The truth is that most government services still have paper, or phone based alternatives, so our yard stick for online service reliability should be grounded in reality, not in comparison to private sector giants like YouTube or Facebook.</p>


<div class="lazyblock-case-study-result-1kW2si wp-block-lazyblock-case-study-result"><div class="mb-4 p-4 pl-0 d-flex align-items-center primary white-bg left-bordered-content animate__animated animate__fadeInRight">
    <div class="result-item-content pl-5">
        <h3 class="h4 mt-0 mb-2">TIP: Set realistic goals</h3>
        <p class="mb-0">Instead of aiming for 100% uptime, put in place realistic SLAs that match your user needs and operational realities. Use benchmarks that reflect the importance of each service.</p>    </div>
    </div></div>


<h2 class="wp-block-heading"><strong>Graceful degradation</strong></h2>



<p class="wp-block-paragraph"><a href="https://londonpublishingpartnership.co.uk/books/platformland-an-anatomy-of-next-generation-public-services/" target="_blank" rel="noreferrer noopener">Richard Pope’s Platformland </a>shares a vision of 100s of interconnected services lowering barriers to the UK public and enabling a model where the public is served proactively. However, I fear that this interconnectivity will demand even more unattainable&nbsp; reliability. Instead of&nbsp; pragmatic thinking about how services should fail. The current model for failure is that an error is raised and a Site Reliability Engineer (SRE) is alerted. However, this rarely results in the original user need being fulfilled. Instead the offending code will be fixed and the user will be forced to use an alternative means of realising their intent.</p>



<h2 class="wp-block-heading"><strong>Embracing SLAs</strong></h2>



<p class="wp-block-paragraph">By following some of the tips in this blog, I believe reliability and user satisfaction can be significantly improved. Healthy discussions about the appropriate level of reliability for services will lead to reductions in costs and waste. Ultimately, a positive approach to SLAs will enhance services and better meet the needs of the British public.</p>



<p class="wp-block-paragraph"><br></p>
<p>The post <a href="https://www.madetech.com/blog/why-public-sector-digital-cant-afford-to-shy-away-from-slas/">Why public sector digital can’t afford to shy away from SLAs</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Embracing the creativity in tech</title>
		<link>https://www.madetech.com/blog/embracing-creativity-tech/</link>
		
		<dc:creator><![CDATA[Alex Herbert]]></dc:creator>
		<pubDate>Mon, 10 Mar 2025 13:40:46 +0000</pubDate>
				<category><![CDATA[Cloud and engineering]]></category>
		<category><![CDATA[Life at Made Tech]]></category>
		<guid isPermaLink="false">https://www.madetech.com/?p=18728</guid>

					<description><![CDATA[<p>In this Insiders interview Alex shares her passion for creative problem-solving, the importance of mentorship and overcoming self-doubt.</p>
<p>The post <a href="https://www.madetech.com/blog/embracing-creativity-tech/">Embracing the creativity in tech</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In this Insiders interview, Alex reveals her passion for creativity in tech, problem-solving and the strength found in teamwork. She tells us about her interests in cyber security, sharing anecdotes from the early days of phone hacking &#8211; with a surprising twist. Plus, she highlights the importance of mentorship and overcoming self-doubt.&nbsp;</p>



<h2 class="wp-block-heading has-medium-font-size"><strong>Q: How did you decide on a software engineering career?</strong></h2>



<p class="wp-block-paragraph">I ended up working in <a href="https://www.madetech.com/services/cloud-and-engineering/" target="_blank" rel="noreferrer noopener">software engineering</a> because my parents used to say ‘ you&#8217;ll never get a job if you&#8217;re just sitting and looking at a computer screen all day’. Joking of course, but who didn’t hear that growing up?</p>



<p class="wp-block-paragraph">My working life began at 16 with a temporary office job in my hometown as part of a government initiative tracking cows after the foot and mouth disease outbreak. After being made redundant from that role, I took a job at McDonald&#8217;s to save money for university. </p>



<p class="wp-block-paragraph">During my studies, I continued to work in hospitality, which if nothing else, showed me that I wanted a different career path.&nbsp;I realised I preferred the quiet focus of an office environment, enjoying tasks that felt like mental puzzles &#8211; where I could use my creativity to find solutions. This realisation made studying computer science and pursuing a career in software engineering a natural fit.&nbsp;</p>



<p class="wp-block-paragraph">After a couple of years as an IT assistant I moved to Manchester and joined a coding apprenticeship scheme. While I found the IT work enjoyable enough, it involved a lot of physical labour. </p>



<p class="wp-block-paragraph">It might sound like an odd life goal, but after working many stressful, physically demanding jobs &#8211; a quieter, more mentally engaging career became a priority. I&#8217;ve now been at Made Tech for nearly 4 years and the rest, as they say, is history.&nbsp;</p>



<h2 class="wp-block-heading has-medium-font-size"><strong>Q: You mentioned enjoying mental puzzles, is there another area in tech that fits that creativity?</strong></h2>



<p class="wp-block-paragraph">I&#8217;ve always had an interest in cybersecurity. For years I&#8217;ve enjoyed listening to cybersecurity podcasts purely for fun. I also <a href="https://lgbt.foundation/" target="_blank" rel="noreferrer noopener">volunteer with a local charity</a>, where I&#8217;ve recently been advising on potential cybersecurity mitigations &#8211; that’s something I also get a lot of joy out of, using my skills to benefit the public good.&nbsp;</p>



<p class="wp-block-paragraph">I’m excited about the idea of growing my skills in cyber security and teaching others on how we can all protect ourselves. You may have heard that as humans, we’re the weakest link in any security chain.&nbsp;</p>



<p class="wp-block-paragraph">For example, did you know that during the early days of phone hacking or &#8220;phreaking,&#8221; as it&#8217;s been called, people would pull off crazy stunts? Back in the 60s and 70s, people used creativity to mess with the structure of the new nationwide telephone network. Namely in the form of free toy whistles found in Cap’n Crunch cereal. </p>



<p class="wp-block-paragraph">When blown they would hit 2,600 hertz frequency, which was the same frequency that the phones used to disconnect the line. So people would walk past a bank of phones, blow into a whistle and then watch everyone get annoyed when they got cut off.</p>



<h2 class="wp-block-heading has-medium-font-size"><strong>Q: What is it about cyber security you enjoy so much?</strong></h2>



<p class="wp-block-paragraph">What I find really interesting about cyber security is the creativity behind it. The idea that people make a system to do a thing and then someone else thinks about how to use that system for completely unintended purposes. While these hackers didn’t have the best intent, the innovation is what’s interesting.&nbsp;</p>



<p class="wp-block-paragraph">We build systems with specific intentions, and then others find creative ways to use those systems for unintended, sometimes malicious reasons. It&#8217;s that ingenuity and the constant interplay between creation and exploitation, that I find really interesting.&nbsp;</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://www.madetech.com/wp-content/uploads/2025/03/alexherbert_insiders-1024x576.png" alt="A black and white headshot of Alex appears next to a quote that reads &quot;[On cyber security]It's the ingenuity and the constant interplay between creation and exploitation that I find really interesting.&quot;" class="wp-image-18729" srcset="https://www.madetech.com/wp-content/uploads/2025/03/alexherbert_insiders-1024x576.png 1024w, https://www.madetech.com/wp-content/uploads/2025/03/alexherbert_insiders-300x169.png 300w, https://www.madetech.com/wp-content/uploads/2025/03/alexherbert_insiders-768x432.png 768w, https://www.madetech.com/wp-content/uploads/2025/03/alexherbert_insiders-1536x864.png 1536w, https://www.madetech.com/wp-content/uploads/2025/03/alexherbert_insiders-2048x1152.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading has-medium-font-size"><strong>Q: Let’s talk about workplace culture, alongside problem solving and creativity &#8211; what’s most important to you?</strong></h2>



<p class="wp-block-paragraph">When it comes to work culture, I think collaboration in a team is important. We’re big on collaboration at Made Tech. That may sound like a bit of a non-answer from me, but having worked in teams where sometimes I was the only person maintaining a product and there&#8217;s no one else to rely on when things start to go wrong. That can be incredibly stressful. </p>



<p class="wp-block-paragraph">One of the things I really like about Made Tech is that we do try to be as collaborative as possible by nature. We&#8217;re open and happy to share our <a href="https://www.madetech.com/blog/category/life-at-made-tech/" target="_blank" rel="noreferrer noopener">experiences, knowledge and learnings</a> with each other.</p>



<p class="wp-block-paragraph">We’re really great at lifting each other up here too. In some of my previous roles it’s been a bit dog-eat-dog at times, with promotion windows causing competition instead of collaboration. What I do find working here is that every project I’ve worked on there’s been other members of the team to confide in. I’ve been able to rely on their experience and knowledge &#8211; everyone’s happy to give each other a hand. That shines through with our commitment to mentoring and upskilling more junior staff members. </p>



<h2 class="wp-block-heading has-medium-font-size"><strong>Q: Speaking of mentoring, do you have any guidance for those breaking into the industry?</strong></h2>



<p class="wp-block-paragraph">Don&#8217;t suffer in silence. While I was growing up and working in customer service, the mentality was always that if you&#8217;re not pulling your weight and adding value, then you&#8217;re not worth your place in the team. Everyone had their own work and you had to get on with it. The environment was competitive, everyone wanted to move up and getting a promotion was a zero-sum game.&nbsp;</p>



<p class="wp-block-paragraph">It took me a while in more healthy teams to acclimatise to being able to ask someone for help. Whether they have expertise or domain knowledge that I don&#8217;t, or just to have another pair of eyes on what I&#8217;m working on. In software engineering, we all need to be pulling in the same direction. We need to foster a supportive working environment, otherwise progress will slow.</p>



<h2 class="wp-block-heading has-medium-font-size"><strong>Q: Something we hear about a lot is imposter syndrome, do you have any advice for that?</strong></h2>



<p class="wp-block-paragraph">Considering my early experiences, my impostor syndrome was through the roof early in my career. I thought I&#8217;d &#8216;lucked in&#8217; to my role, and would actively avoid more senior members of the team &#8211; because once they saw how useless I was, I&#8217;d be &#8216;found out&#8217; and lose my job and career.</p>



<p class="wp-block-paragraph">It wasn&#8217;t until I started mentoring that I realised just how ubiquitous this experience is &#8211; especially for women in tech. When I was first asked to line manage 2 of our associate engineers from the Made Tech Academy, I was terrified. What could I possibly know to help out these talented people? Would I end up accidentally tanking their career?&nbsp;</p>



<p class="wp-block-paragraph">But once I started talking to them, they both had the same problem &#8211; they felt their development was slow and they weren&#8217;t progressing as well as other team members. This was affecting their self perception more than anything else. I remember promising to help one of them through a problem. She realised she already knew what to do after I&#8217;d asked a few questions. I pointed this out, shared my experiences and asked her to not let the impostor syndrome overcome her like it used to for me. </p>



<p class="wp-block-paragraph">She asked how long it took in my career for the impostor syndrome to go away completely. I laughed, and told her I&#8217;ll let her know when it does.</p>



<p class="wp-block-paragraph">Are you looking to join a collaborative team with a purpose? <a href="https://www.madetech.com/careers/" target="_blank" rel="noreferrer noopener">Take a look at our open roles</a>.&nbsp;</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="802" height="263" src="https://www.madetech.com/wp-content/uploads/2024/06/insiders__light-1.svg" alt="The Insiders" class="wp-image-15014" style="width:1205px;height:auto"/></figure>
<p>The post <a href="https://www.madetech.com/blog/embracing-creativity-tech/">Embracing the creativity in tech</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Learning every day &#8211; leadership in engineering </title>
		<link>https://www.madetech.com/blog/learning-engineering/</link>
		
		<dc:creator><![CDATA[Tess Barnes]]></dc:creator>
		<pubDate>Wed, 12 Feb 2025 11:24:21 +0000</pubDate>
				<category><![CDATA[Cloud and engineering]]></category>
		<category><![CDATA[Life at Made Tech]]></category>
		<guid isPermaLink="false">https://www.madetech.com/?p=18379</guid>

					<description><![CDATA[<p>Tess Barnes shares her take on leadership, the importance of creating safe learning spaces and the value work/life balance brings to career growth.</p>
<p>The post <a href="https://www.madetech.com/blog/learning-engineering/">Learning every day &#8211; leadership in engineering </a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h6 class="wp-block-heading"><strong>Welcome to Made Tech Insiders, where we interview the talented individuals shaping our organisation.&nbsp; We’ll explore career journeys, project highlights, and future tech trends, showcasing what makes Made Tech an exceptional place to work and innovate.</strong></h6>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="263" src="https://www.madetech.com/wp-content/uploads/2024/07/image.png" alt="The Insiders" class="wp-image-15201" srcset="https://www.madetech.com/wp-content/uploads/2024/07/image.png 802w, https://www.madetech.com/wp-content/uploads/2024/07/image-300x98.png 300w, https://www.madetech.com/wp-content/uploads/2024/07/image-768x252.png 768w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">Tess Barnes shares her take on leadership in <a href="https://www.madetech.com/services/cloud-and-engineering/" target="_blank" rel="noreferrer noopener">software engineering</a>, the importance of creating safe learning spaces and the value work/life balance brings to career growth.</p>



<h2 class="wp-block-heading"><strong>Q: What do you like most about being a lead software engineer?</strong></h2>



<p class="wp-block-paragraph">I did an interview similar to this <a href="https://www.madetech.com/blog/made-tech-team-interview-tess-barnes-senior-software-engineer/" target="_blank" rel="noreferrer noopener">4 years ago</a> and I’ve learnt a lot in that time. I&#8217;ve been in a lead role on and off most of my career and it&#8217;s nice to feel that I&#8217;m in that space of being a multiplier. I enjoy unblocking issues, translating things for people and I’m heavily investing in the people around me &#8211; the people coming through Made Tech, career changers and our apprentices too. I believe really strongly that my experience is only helpful when it helps more than just me.</p>



<p class="wp-block-paragraph">I consider part of my leadership remit very much to enable. Sometimes that can mean getting through prototypes quickly on a project or enabling the really talented people that work at Made Tech. My take on leadership is about making it easy for those people to share their talents and deliver awesome stuff for society.&nbsp;</p>



<h2 class="wp-block-heading"><strong>Q: </strong><strong>How do you go about inspiring those people?</strong></h2>



<p class="wp-block-paragraph">Listening is key. Everyone brings their own set of motivations, sometimes they&#8217;re really open about sharing them and sometimes they take a little while. Often when it comes to inspiring others it&#8217;s about encouraging them to realise they can go further with an idea or think about things differently.</p>



<p class="wp-block-paragraph">It’s about saying, ‘okay you found this wonderful thing and that leads onto 2 topics that are beyond where you are now. But this is where we could be and this is where your journey can go. Enjoy this bit because it leads to greater things.’ It’s about having that discussion on how we start hitting a growth mindset. Encouraging people to recognise what they know today won&#8217;t take them far enough for tomorrow.</p>



<p class="wp-block-paragraph">As I said, it&#8217;s also necessary sometimes to encourage people to think in another way. Asking those questions on when we should make a decision to change the way we&#8217;re thinking about something. It’s important to work with people and say ‘I&#8217;m glad you&#8217;ve asked that question, let&#8217;s explore that together’ or ‘let&#8217;s see how this plays out and how you can do it differently.’&nbsp;</p>



<p class="wp-block-paragraph">Being able to have these conversations with people in a safe and non-judgmental space is important. Let&#8217;s grow in an exploratory environment where it isn&#8217;t about judging, it&#8217;s about learning.</p>



<h2 class="wp-block-heading"><strong>Q: How do you stretch that thinking to the wider engineering community at Made Tech?</strong></h2>



<p class="wp-block-paragraph">I have a 2025 commitment around being more connected myself but also helping other people be more connected. Being in a consultancy can be a really tricky balance between our valuable face-to-face time with our clients and time with our engineering community.&nbsp;</p>



<p class="wp-block-paragraph">Helping my colleagues feel in touch and inspired is important to me. There&#8217;s lots of people around Made Tech that are doing that and it&#8217;s something that I feel we’ll all benefit from doubling down on in engineering.</p>



<p class="wp-block-paragraph">We’re mostly at the coalface in the delivery and don’t necessarily connect with each other more than once or twice a week. That can be tricky, so making sure that connection&#8217;s still there, and still valuable, is important. We&#8217;re connecting to feel human in a space so our creative juices are still flowing. That’s my mission this year.</p>



<h2 class="wp-block-heading"><strong>Q: You spoke about growth, do you have any advice for anyone looking to grow and learn?&nbsp;</strong></h2>



<p class="wp-block-paragraph">For those that really enjoy the code, tinkering and have that creative mindset &#8211; still enjoying it is really important to growth. I say to whoever I&#8217;m on a course with, a rested mind is a learning mind. So if you want to be in tech, of course you should be interested in it. But I would also say, have other things you&#8217;re interested in that can help give your brain a rest.&nbsp;</p>



<p class="wp-block-paragraph">If you play music or you&#8217;re interested in sports for example, it gives you an offset which brings in creative thought. For anyone who wants to be sustainable in the tech industry and software, allow yourself that time. It&#8217;s not about constant hands on the keyboard. There’s a world within software but outside that too &#8211; finding the balance is important.&nbsp;</p>



<h2 class="wp-block-heading"><strong>Q: Any books or resources you’d recommend for further learning?</strong></h2>



<p class="wp-block-paragraph">Interestingly, of the 3 that I suggested 4 years ago, at least 2 of them I’d still mention today. That’s the <a href="https://www.waterstones.com/book/the-phoenix-project/gene-kim/kevin-behr/9781942788294" target="_blank" rel="noreferrer noopener">Phoenix Project</a> by Gene Kim, Kevin Behr, and George Spafford on devops. The second is <a href="https://www.waterstones.com/book/rebel-talent/francesca-gino/9781509860630" target="_blank" rel="noreferrer noopener">Rebel Talent</a> by Francesca Gino and&nbsp; when following the rules is a good idea and when not following the rules is a good idea.&nbsp;</p>



<p class="wp-block-paragraph">A new addition I&#8217;d recommend is <a href="https://www.waterstones.com/book/apprenticeship-patterns/dave-hoover/9780596518387" target="_blank" rel="noreferrer noopener">Apprenticeship Patterns</a>: Guidance for the Aspiring Software Craftsman by Dave Hoover and Adewale Oshineye. It&#8217;s not just for apprentices, but anyone who wants to view or review software craftsmanship with a learning and curious mindset.&nbsp;</p>



<h2 class="wp-block-heading"><strong>Q: Building on that, what areas are you looking at for your own development?</strong></h2>



<p class="wp-block-paragraph">I have learned every day. I&#8217;ve made it my mission to not stay still. I am really intrigued with systems thinking. I have always thought that way and I found it quite difficult in the earlier years of my life to translate that lateral thought process on deliveries.&nbsp;</p>



<p class="wp-block-paragraph">Lots of people think in lots of different ways. I&#8217;ve always been a person that can zoom out to see the bigger picture and think ‘what&#8217;s actually causing this thing?’ On a project we’re often looking at a small part. We can see what happens in that space, but actually if we zoom out we can see that all of this is happening because something somewhere else is happening and having an impact.&nbsp;</p>



<p class="wp-block-paragraph">For me, it&#8217;s about learning the lexicon that everybody is using in this system&#8217;s thinking space and then figuring out where I can apply it. I&#8217;ve been writing code professionally for about 20 years and the most interesting thing to me now is recognising how systems work. Yes, of course the code is important, operating in a lean DevOps style is important &#8211; but also thinking ‘how is it going to work in this wider framework?’&nbsp;</p>



<h2 class="wp-block-heading"><strong>Q: Is there anything else you’re focusing on this year?&nbsp;</strong></h2>



<p class="wp-block-paragraph">I want to extend the range of training courses that I&#8217;ve written and offer. I&#8217;m talking to Dom, our L&amp;D Specialist Technical &#8211; Engineering Coach about the curriculum for our apprentices. They have a set behaviours, skills and knowledge framework they need to hit, but it&#8217;s how we express that in a way that works for consultancy life and tech. That&#8217;s a focus I&#8217;d love to bring.</p>



<p class="wp-block-paragraph">For the last cohort, I ran training on getting secure pipelines running and making sure that they’re secure as well as sessions on Docker and containerisation &#8211; which are kind of the nuts and bolts around how things get built and hosted. Those deserve a bit of an update because our tech constantly moves on and I’d like to add a few things around containerisation to that as well.&nbsp;</p>



<p class="wp-block-paragraph">It&#8217;s important for me to make sure that our core values and consultancy skills that we add to the apprentice standard are covered &#8211; Dom does an awesome job at that. We cover the software skills and practices but then we also have this DevOps coverage. I really hope to be part of a collective in Made Tech doing this training.&nbsp;</p>



<p class="wp-block-paragraph">If you’re interested in joining the team here at Made Tech, take a <a href="https://www.madetech.com/careers/#open-roles" target="_blank" rel="noreferrer noopener">look at our open roles</a> or <a href="https://www.madetech.com/careers/made-tech-connect/" target="_blank" rel="noreferrer noopener">sign up for our newsletter</a> to receive monthly notifications about new roles.</p>
<p>The post <a href="https://www.madetech.com/blog/learning-engineering/">Learning every day &#8211; leadership in engineering </a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Preparing for your software engineering technical interview</title>
		<link>https://www.madetech.com/blog/engineering-technical-interview/</link>
		
		<dc:creator><![CDATA[Made Tech Team]]></dc:creator>
		<pubDate>Tue, 03 Dec 2024 13:53:20 +0000</pubDate>
				<category><![CDATA[Cloud and engineering]]></category>
		<category><![CDATA[Life at Made Tech]]></category>
		<guid isPermaLink="false">https://www.madetech.com/?p=17517</guid>

					<description><![CDATA[<p>In this post we share some helpful tips and guidance on what you need to know ahead of your interview. </p>
<p>The post <a href="https://www.madetech.com/blog/engineering-technical-interview/">Preparing for your software engineering technical interview</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">At Made Tech <a href="https://www.madetech.com/services/cloud-and-engineering/" target="_blank" rel="noreferrer noopener">our software engineers</a> use their knowledge of programming languages, platforms, and architectures to help organisations make a positive impact through technology.&nbsp;</p>



<p class="wp-block-paragraph">We believe recruiting team members with unique career backgrounds, different experiences and personalities is the best way to reflect and serve society. So if you don’t have a ‘traditional’ background in software, don’t let that stop you from applying. And if you’ve never done a technical interview before don’t worry. In this blog post we’ll take you through everything you need to know.&nbsp;</p>



<h2 class="wp-block-heading"><strong>The technical interview </strong><strong>&nbsp;</strong></h2>



<p class="wp-block-paragraph">There are many reasons we hold a technical interview for our software engineering roles. This includes gaining an understanding of how you work and how you respond to feedback. A technical interview helps us evaluate how you collaborate with other team members, communicate your ideas and your ability to explain technical concepts in a nontechnical way (e.g to non-technical people).</p>



<p class="wp-block-paragraph">The technical interview is also a chance for you to share more about your experiences with our preferred ways of working &#8211; that’s things like pair programming and test driven-development (TDD). During the interview you can also give us insight on your experiences with different technologies, for example your chosen language, framework and cloud provider etc.&nbsp;</p>



<p class="wp-block-paragraph">Try not to feel nervous, remember this interview is also about finding out if we’re right for you and if Made Tech is somewhere you feel you could thrive and see yourself working at.&nbsp;</p>



<h3 class="wp-block-heading"><strong>What can I expect?</strong></h3>



<p class="wp-block-paragraph">We’re all about striking the right balance in our approach to hybrid working. That means all of our interviews are remote, so you can attend from wherever you are and at your convenience. It&#8217;s always a good idea to choose somewhere that’s distraction-free for your interview &#8211; although we understand interruptions can, and do, happen. Hosted on Google Meet, your technical interview will be a video call with our friendly team. We’ll always aim to have 2 engineers interviewing you.&nbsp;</p>



<p class="wp-block-paragraph">Your interview will consist of 2 tasks. The first task is a system design exercise where we’ll present you with a scenario and ask you to sketch out a high level diagram of the pieces that could deliver this service. Next up is pair programming. Following the same scenario, you’ll pair with an interviewer in a short coding kata, implementing some of the logic for the new service you helped design in the first task using TDD.</p>



<p class="wp-block-paragraph">We split the interview into these 2 skill-based tasks for a couple of reasons. The system design task helps to make sure all of our engineers can think about the &#8220;big picture&#8221; context for their work and are able to provide reasoning for high-level decisions. The pair programming exercise helps illustrate how we like to work, as we believe pair programming on our teams ensures constant knowledge sharing, improves code quality and helps to reduce bugs.</p>



<p class="wp-block-paragraph">Throughout the technical interview, each candidate is asked the same initial question on each section. This helps us make sure we’re following a fair and equal process.&nbsp;</p>



<p class="wp-block-paragraph">Now let’s go through each task in a little more detail.&nbsp;</p>



<h3 class="wp-block-heading"><strong>The system design exercise</strong></h3>



<p class="wp-block-paragraph">We use <a href="https://miro.com/about/" target="_blank" rel="noreferrer noopener">Miro</a>, a virtual whiteboard, for the first section of the technical interview. But if you’re not familiar with it, don’t worry. We’ll always guide you through the basics needed to complete the exercise.&nbsp;</p>



<p class="wp-block-paragraph">We have a few tips for you when it comes to this part of the technical interview. Firstly pick somewhere to begin and start small and simple. This is so you can make sure you’re identifying the requirements and implementing enough to meet that requirement &#8211; this is our ‘minimum viable product’.&nbsp;</p>



<p class="wp-block-paragraph">During this exercise we’re looking for ‘evolutionary architecture’ &#8211; this means the design of the system evolves as new requirements are introduced, rather than a ‘big up-front design’ that tries to do too much, too early. Start with a simple solution and then look for reasons the simple solution may need to change. As our conversation progresses, evolve your architecture to meet new requirements and the changing needs of the user.&nbsp;</p>



<p class="wp-block-paragraph">Speaking of the user &#8211; make sure you’re thinking about user journeys throughout and talk us through your design decisions. One way you might do this is to think about what makes your system scalable, reliable and secure &#8211; use that to justify the decisions you’re making.&nbsp;</p>



<p class="wp-block-paragraph">A big part of this task is communication, remember to talk through your design as we go through the exercise. This is so we can understand why you’re making certain changes. As a top tip, remember to ask your interviewers questions to help you make those changes, for example:</p>



<ul class="wp-block-list">
<li>How many users do we expect?</li>



<li>Does this change over time? (are there more users during the day vs night?)&nbsp;</li>



<li>What mobile devices do our users have access to?</li>
</ul>



<p class="wp-block-paragraph">Remember that it doesn’t matter (too much) if your diagram isn&#8217;t the neatest.</p>



<h3 class="wp-block-heading"><strong>The pair programming exercise</strong></h3>



<p class="wp-block-paragraph">During your interview, pair programming is done via screen sharing. To save time, we need you to share your whole screen as opposed to simply your browser window. This is why we’ll ask you to set up your environment in advance &#8211; ready to test! So make sure a placeholder test runs ahead of time.</p>



<p class="wp-block-paragraph">Pair programming is all about collaboration. Here’s where we can see how you work with other members of the team. It’s important to note that we don’t expect you to necessarily ‘complete’ the test exercise. Collaboration and conversation is more important here. Don&#8217;t be afraid to ask questions to who you&#8217;re pairing with and talk through what you’re thinking. Your communication skills in this stage are just as important as the code.&nbsp;</p>



<p class="wp-block-paragraph">As before, make sure you’re taking small steps like writing tests before code and collaborating with your interviewers. Another tip is to think small at the domain level rather than trying to create a full web app with database storage.</p>



<p class="wp-block-paragraph">Always use a language you’re comfortable with &#8211; don’t fall into the trap of trying the latest thing or something you’ve learned in the past month. This doesn’t usually end well, so stick with what you know and it will enrich the rest of the exercise.</p>



<p class="wp-block-paragraph">If TDD is new to you &#8211; tell us! Be honest about your experience. It’s not a problem if this is something you’re unfamiliar with but please do factor this into your interview preparation &#8211; so you can evidence it. We want to see a willingness to learn. During your interview we’ll see if you can do TDD with our support.</p>



<h2 class="wp-block-heading"><strong>Are you our next software engineer?</strong></h2>



<p class="wp-block-paragraph">Here’s some final guiding words on whether we could be a good match. If you’re collaborative by nature and opinionated but open to learning new things &#8211; we want to hear from you. If you have a broad knowledge of lots of areas or expertise in one, let us know. As long as you’re adaptable with an eagerness to embrace technologies you may not be familiar with then get in touch.&nbsp;</p>



<p class="wp-block-paragraph">For a few final resources to help you prepare for your Made Tech software engineering interview, take a look at:</p>



<ul class="wp-block-list">
<li><a href="https://learn.madetech.com/technology/katas/" target="_blank" rel="noreferrer noopener">Code Katas</a>&nbsp;</li>



<li>the C4 model for <a href="https://c4model.com/" target="_blank" rel="noreferrer noopener">visualising software architecture</a></li>



<li>our latest <a href="https://www.madetech.com/blog/" target="_blank" rel="noreferrer noopener">blog posts</a> and <a href="https://www.madetech.com/case-studies/" target="_blank" rel="noreferrer noopener">case studies</a></li>
</ul>



<p class="wp-block-paragraph">We hope this has given you a small insight into what a technical software engineering interview looks like at Made Tech. If you haven’t already, take a look at <a href="https://www.madetech.com/careers/" target="_blank" rel="noreferrer noopener">our open roles</a>. </p>



<p class="wp-block-paragraph">We recently hosted a 30 minute session on what it’s like as a <a href="https://www.madetech.com/events/tech-careers-unlocked-senior-software-engineer/">senior software engineer at Made Tech</a>. Watch our recording to find out more. </p>
<p>The post <a href="https://www.madetech.com/blog/engineering-technical-interview/">Preparing for your software engineering technical interview</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Make your software flexible and scalable by…camping?</title>
		<link>https://www.madetech.com/blog/software-flexible-scalable/</link>
		
		<dc:creator><![CDATA[Anna Horstmann]]></dc:creator>
		<pubDate>Fri, 26 Jan 2024 07:27:54 +0000</pubDate>
				<category><![CDATA[Cloud and engineering]]></category>
		<category><![CDATA[Life at Made Tech]]></category>
		<guid isPermaLink="false">https://www.madetech.com/?p=13963</guid>

					<description><![CDATA[<p>Want to make your software flexible and scalable? Let me walk you through the connection between Docker, Kubernetes, Helm and … camping?</p>
<p>The post <a href="https://www.madetech.com/blog/software-flexible-scalable/">Make your software flexible and scalable by…camping?</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">It’s been a hot minute since we got into the really technical side of things over here, so let me take you through a recent chat with a colleague about managing complex software systems.&nbsp;</p>



<p class="wp-block-paragraph">One of the recurring challenges is how to make sure they’re reliable and flexible, this got us talking about some of the tools behind microservice architectures. If you’re not familiar, microservice architectures are multiple smaller programmes that together deliver those big complex systems.&nbsp;</p>



<p class="wp-block-paragraph">I&#8217;ve recently been working with a few of these tools, so in this post I&#8217;ll explain how they can work together to make sure what you’re creating is seamless and scalable &#8211; with a nice camping analogy thrown in.&nbsp;&nbsp;</p>



<h2 class="wp-block-heading"><strong>What does engineering and camping have in common?</strong></h2>



<p class="wp-block-paragraph">I’ll start with some definitions.&nbsp;</p>



<p class="wp-block-paragraph"><strong>Docker:</strong> Where it starts. Docker is a programme that allows you to organise your code into microservices &#8211; from here we’ll call them containers.</p>



<p class="wp-block-paragraph"><strong>Kubernetes:</strong> This is an open-source tool that allows you to manage your containers.</p>



<p class="wp-block-paragraph"><strong>Helm:</strong> This is where it all comes together. With Helm you can automate the deployment and management of your Kubernetes applications.</p>



<p class="wp-block-paragraph">Going into slightly more detail, a <strong>container</strong> is an isolated environment for your code. It’s important to note this means that a container also has no previous knowledge of your operating system. An <strong>image</strong> is a snapshot of this environment and contains instructions for creating the container. The container then runs your code.&nbsp;</p>



<p class="wp-block-paragraph">Docker images are built from <strong>Dockerfiles</strong>, these are the text files that contain the commands required to set it up. There are many commands you can use in a Dockerfile including FROM (the base image you want to build from), COPY (files you want to copy from your local environment into the container) and CMD (the first command run on container startup).</p>



<p class="wp-block-paragraph">Now let’s imagine we’re going camping. In this analogy, our containers are similar to tents and Dockerfiles are the equipment lists needed to set up our tents.&nbsp;</p>



<p class="wp-block-paragraph"><strong>FROM</strong> = tent style/design, number of zipped doors and number it sleeps</p>



<p class="wp-block-paragraph"><strong>COPY</strong> = the equipment you need in the tent</p>



<p class="wp-block-paragraph"><strong>CMD</strong> = first thing you do (boil kettle, nap, grab a beer and turn on the lights)</p>



<h3 class="wp-block-heading"><strong>Summer</strong></h3>



<p class="wp-block-paragraph">Let’s carry on with our camping analogy. You want to start a glamping campsite. You’ll provide the tents, you set your first tent up and like how it turns out. It’s blue, sleeps 4 and comes with solar-powered fairy lights and airbeds with linen. Not one to keep this to yourself, you get some friends to try it out and stay there before you open business to the public. They love it, and you decide that your setup is perfect. You duplicate your setup for five more blue tents and start getting paying customers to stay.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">In technical terms: This is at the moment a group of <strong>Docker containers</strong>, which you manage yourself.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><strong>Autumn</strong></h3>



<p class="wp-block-paragraph">Your business is a hit. You’re fully booked for the next 3 months and decide to expand. So far the business seems to be doing well with the tents setup as they are, so you want another group of tents, perhaps in a different colour to make the site look more aesthetic.&nbsp;</p>



<p class="wp-block-paragraph">You decide to hire someone to manage the original group of blue tents and someone else to manage a new group of 6 orange tents. The managers are responsible for maintenance of the tents, making sure all of the equipment is available and working, and they flag to you if it isn’t. They’re also trained to rebuild tents if they fall down in adverse weather.&nbsp;</p>



<p class="wp-block-paragraph">It’s quite a nice arrangement. The tent managers are responsible for the details of each setup. It will only deviate from this if you want something changed. This means the tent configurations can be left to them while you focus on the bigger picture &#8211; like how to keep cows from the neighbouring field out of your glamping area.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><strong>In technical terms:</strong> The managed groups of tents are now <strong>Kubernetes deployments</strong>, each one being managed and maintained without your input via a Kubernetes manifest (a YAML file where you define features of the Deployment). The example YAML manifests below define deployments for blue and orange tents, 6 of each and both sleeping 4 people.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://www.madetech.com/wp-content/uploads/2024/01/Kubernetes-deployments-1024x576.png" alt="" class="wp-image-13964" width="1024" height="576" srcset="https://www.madetech.com/wp-content/uploads/2024/01/Kubernetes-deployments-1024x576.png 1024w, https://www.madetech.com/wp-content/uploads/2024/01/Kubernetes-deployments-300x169.png 300w, https://www.madetech.com/wp-content/uploads/2024/01/Kubernetes-deployments-768x432.png 768w, https://www.madetech.com/wp-content/uploads/2024/01/Kubernetes-deployments.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading"><strong>Winter</strong></h3>



<p class="wp-block-paragraph">Now we’re in winter and adverse weather seems to be happening more often. The tent managers have been doing a great job keeping all 6 tents in their respective group well-maintained. But the bookings are thinning and you realise you don’t need to pay people to maintain all 12 tents when a portion of them are sitting empty. You instruct your tent managers to reduce their group sizes to 4 apiece (8 in total).&nbsp;</p>



<p class="wp-block-paragraph">You also get several complaints about the warmth of the tents. You had perhaps forgotten that this is glamping not camping, and customers don’t expect a temperature difference between a canvas sheet and their own home. You realise that your initial setup may have been perfect for summer but is less so for winter. You tell the tent managers to add blankets and duvets to the tents. These changes seem to do the trick and bookings drift back to pretty much full.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><strong>In technical terms:</strong> The changes here are things which you would change in the Kubernetes deployment manifest and re-deploy. In the YAML snippet below blankets have been added to the blue tents deployment.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://www.madetech.com/wp-content/uploads/2024/01/Kubernetes-deployments-changes-1024x576.png" alt="" class="wp-image-13967" srcset="https://www.madetech.com/wp-content/uploads/2024/01/Kubernetes-deployments-changes-1024x576.png 1024w, https://www.madetech.com/wp-content/uploads/2024/01/Kubernetes-deployments-changes-300x169.png 300w, https://www.madetech.com/wp-content/uploads/2024/01/Kubernetes-deployments-changes-768x432.png 768w, https://www.madetech.com/wp-content/uploads/2024/01/Kubernetes-deployments-changes.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading"><strong>Spring</strong></h3>



<p class="wp-block-paragraph">It’s spring and things are starting to pick up. You instruct the tent managers to increase the tent numbers back up to 6 apiece in anticipation of a flood of booking requests as the winter frosts thaw.&nbsp;</p>



<p class="wp-block-paragraph">However, the site&#8217;s demand doesn’t pick up with the warmer weather as you expected. You wonder what you could do to encourage visitors. You decide to start offering electric hookups and WiFi for the tents. You don’t have the expertise to install and maintain those features, so you employ 2 more people to manage them for you. You initially set the price for each feature at £5 per tent, so people wanting both electricity and WiFi would pay £10.</p>



<p class="wp-block-paragraph">It works &#8211; it turns out that people love coming to fields to surf the internet rather than sitting at home. You are once again flooded with booking requests and figure you can probably raise the electric and WiFi prices. You ask the service managers to start charging £7.50 per feature, £15 for both.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><strong>In technical terms:</strong> The services you’ve added are <strong>Kubernetes objects</strong>, such as Services, Ingress and ConfigMaps. There are loads of types of Kubernetes objects which you can add to your deployment to make your application externally available, apply configuration etc. These are also deployed manually via YAML manifests, like the electric hookup example below.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://www.madetech.com/wp-content/uploads/2024/01/Kubernetes-objects-1-1024x576.png" alt="" class="wp-image-13968" srcset="https://www.madetech.com/wp-content/uploads/2024/01/Kubernetes-objects-1-1024x576.png 1024w, https://www.madetech.com/wp-content/uploads/2024/01/Kubernetes-objects-1-300x169.png 300w, https://www.madetech.com/wp-content/uploads/2024/01/Kubernetes-objects-1-768x432.png 768w, https://www.madetech.com/wp-content/uploads/2024/01/Kubernetes-objects-1.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading"><strong>Summer (again)</strong></h3>



<p class="wp-block-paragraph">You’re starting to get the hang of this glamping thing. You realise that there are yearly fluctuations in popularity and predictable variations in the market. Each change is communicated to the managers.</p>



<p class="wp-block-paragraph">However, you end up communicating the same information to separate people. The tent managers are often busy doing different things to the service managers, so you spend time chasing them down to let them know how many tents are going to be in rotation in the next few weeks. “I sound like a parrot”, you say to yourself, “if only I could just tell one person all this stuff&#8221;.</p>



<p class="wp-block-paragraph">It dawns on you that the factors which change don’t include every aspect of a tent setup or site features. In fact, the variables can be distilled down to a select handful. For a group of tents, the fact that we’re talking about tents rather than brick buildings is a constant. The fact that customers have an 11pm curfew never changes and the fact that the tents don’t include toilets never changes.&nbsp;</p>



<p class="wp-block-paragraph">The number of beds can change, the style of tents may change and the thickness of bedding provided depends on the season. And so you could actually instruct almost anyone to pass on this information to the tent and feature managers. If you want anything changed you’ll leave a sheet of paper on their desk informing them of the few tweaks you want to make to the site.&nbsp;</p>



<p class="wp-block-paragraph">It is so much easier now that you just have to worry about a single file, rather than maintaining and considering every detail of every tent and feature on the site you painstakingly set up. You have so much more capacity to concentrate on the bigger picture &#8211; like whether a scone has jam then cream or cream then jam.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><strong>In technical terms:</strong>&nbsp;This extra layer of management is what <strong>Helm</strong> provides. Instead of individual manifests for each Kubernetes object which you have to deploy yourself, and factors are modifiable via a single YAML file (always called ‘values.yaml’), you can deploy an entire application with a single command, rollback with a single command, update or delete with a single command.&nbsp;</p>



<p class="wp-block-paragraph">All of the Kubernetes objects (which with some applications can be tens or hundreds) are controlled easily and as a group rather than individually. You’re still able to interact with them at a more granular level, but you don’t <em>have</em> to. The example YAML below shows a values file for the orange and blue tent Deployments. The key variable factors are defined in this file and templated into the Helm chart.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><strong>Values.yaml&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; deployment.yaml</strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://www.madetech.com/wp-content/uploads/2024/01/Values-file-1-1024x576.png" alt="" class="wp-image-13969" srcset="https://www.madetech.com/wp-content/uploads/2024/01/Values-file-1-1024x576.png 1024w, https://www.madetech.com/wp-content/uploads/2024/01/Values-file-1-300x169.png 300w, https://www.madetech.com/wp-content/uploads/2024/01/Values-file-1-768x432.png 768w, https://www.madetech.com/wp-content/uploads/2024/01/Values-file-1.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading"><strong>Reflecting on your success</strong></h2>



<p class="wp-block-paragraph">Some time in the future you sit back in your deckchair and reflect on how far you&#8217;ve come. You now own the neighbouring cow field and the one beyond it, keep the cows in your own garden and can rotate your tents around the fields depending on their muddiness. You asked your site manager to increase capacity, hiring 4 more tent group managers. A new service manager is in charge of the weekly food rota &#8211; meat-free Mondays, pizza Wednesdays and fish and chips on a Friday.&nbsp;</p>



<p class="wp-block-paragraph">The entire site is well-established, but configurable by a single point of communication. All managers are open to changes and flexible enough to carry them out. If the site manager said “site closed” they would all bring their tents in. If the site manager said “the most recent changes have done diddly-squat for our profit margins, we’re rolling back” the tent and feature managers would revert whatever modifications had just been made. You feel like you can easily control this business and everyone is better off for it &#8211; a huge success!</p>



<p class="wp-block-paragraph">In fact, you think you could probably handle another one or two of these…</p>



<p class="wp-block-paragraph">So there you have it. Using Docker, Kubernetes and Helm in harmony can be as seamless as that. And bonus, your software is now reliable and scalable! You’re able to make smaller changes that contribute to your big picture and there’s limited downtime. Next time you’re considering microservice architecture, think about how the tools behind them can come together to work for you.&nbsp;</p>



<p class="wp-block-paragraph">If you’d like to stay up to date with all of our latest blog posts, case studies and upcoming events, subscribe to our monthly <a href="https://www.madetech.com/made-tech-insights/" target="_blank" rel="noreferrer noopener">Made Tech Insights newsletter</a>.</p>
<p>The post <a href="https://www.madetech.com/blog/software-flexible-scalable/">Make your software flexible and scalable by…camping?</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Launching our new DevOps apprenticeship programme</title>
		<link>https://www.madetech.com/blog/launching-apprenticeship-programme/</link>
		
		<dc:creator><![CDATA[Cheryl Peet]]></dc:creator>
		<pubDate>Mon, 13 Nov 2023 09:38:07 +0000</pubDate>
				<category><![CDATA[Cloud and engineering]]></category>
		<category><![CDATA[Life at Made Tech]]></category>
		<category><![CDATA[Apprenticeship]]></category>
		<guid isPermaLink="false">https://www.madetech.com/?p=13363</guid>

					<description><![CDATA[<p>If you’re looking to sharpen your programming skills and learn to ship high-quality code, we’re opening applications for our new Level 4 DevOps apprenticeship.</p>
<p>The post <a href="https://www.madetech.com/blog/launching-apprenticeship-programme/">Launching our new DevOps apprenticeship programme</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Helping people learn new skills and build their careers in the tech sector is something we’re proud to support. From our very first Made Tech Academy way back in 2017 and many graduates later &#8211; today I&#8217;m delighted to share the next step in that journey. Made Tech is now an accredited apprenticeship provider!&nbsp;</p>



<p class="wp-block-paragraph">If you’re looking to sharpen your programming skills and learn to ship high-quality code on projects that make a difference, we’re opening applications for our new <a href="https://www.madetech.com/careers/apprenticeship/" target="_blank" rel="noreferrer noopener">Level 4 DevOps&nbsp;programme</a> on 13 November 2023.&nbsp;</p>



<h2 class="wp-block-heading"><strong>Why choose an apprenticeship?</strong></h2>



<p class="wp-block-paragraph">Modern apprenticeships have come a long way since they were first introduced in the 90s. There’s now over 800 apprenticeship standards and they cover all types of careers across many different sectors. One of the great benefits of apprenticeships is that they’re designed by employers to meet the needs they’re seeing in the workplace. This means you’ll be learning in-demand skills from experts in your field &#8211; while earning!</p>



<p class="wp-block-paragraph">Apprenticeships are a popular option over traditional university courses and can work for any education level. They span from level 2 GCSE, right through to level 7 Masters degree, so there’s something for everyone. Our DevOps apprenticeship is level 4, which means we require you to have a level 2 Functional skills (or equivalent) in Maths and English and not hold a degree in a related subject.&nbsp;</p>



<p class="wp-block-paragraph">There’s also no age limits on apprenticeship programmes, so they’re a great option for school leavers and careers changers alike. As long as you meet the criteria, you can take your first steps and earn while you learn.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">&#8220;<em>Creating rewarding careers in digital for people from all backgrounds regardless of their access to formal education is something we feel truly passionate about.</em>&#8220;</p>
<cite><strong>Chris Blackburn, Chief Operating Officer at Made Tech</strong></cite></blockquote>



<h2 class="wp-block-heading"><strong>Start your career in tech</strong></h2>



<p class="wp-block-paragraph">For years we’ve been helping train and support people on their journey to a career in tech. Making sure we’re bringing new talent into our sector with people from different careers and lived experiences is how we see new ideas and perspectives. Launching our own apprenticeship programme felt like the natural next step.&nbsp;</p>



<p class="wp-block-paragraph">We’re excited to open this programme to people from all backgrounds, whether this is your first job, a change of direction or a return to work. As long as you’re excited by the idea of shipping high-quality code that can make a real difference to the public sector&nbsp; – we want to hear from you.</p>



<p class="wp-block-paragraph">You’ll learn from team members who have spent years perfecting their software engineering knowledge and skills. Our apprenticeship also comes with the added benefit of giving you experience of working with a variety of client organisations solving a range of societal challenges &#8211; from housing to healthcare. Our expert mentors will teach you everything you need to know to grow in your role as a great consultant.&nbsp;</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">&#8220;<em>Having taken over 100 people through our Academy since 2017, we&#8217;re really excited to launch the next chapter as an accredited apprenticeship. With digital and technology skills in short supply in the UK, as a society we need to do more to grow our own.</em>&#8220;</p>
<cite><strong>Chris Blackburn, Chief Operating Officer at Made Tech</strong></cite></blockquote>



<h3 class="wp-block-heading"><strong>What to expect&nbsp;</strong></h3>



<p class="wp-block-paragraph">We’re taking a blended approach to this programme, which means you’ll experience a mix of face-to-face learning and virtual sessions and tutorials over 18 months. The first 10 weeks will act as a bootcamp, helping set you up with a strong foundation. During this time we’ll teach you the software engineering basics you’ll need before you go on to live projects, including responsible coding, test-driven development and consultancy skills.&nbsp;</p>



<p class="wp-block-paragraph">To make sure you’re getting the most out of the programme, you’ll have a review with your technical coach and line manager every 6 weeks. They’ll also be ongoing assessments during and after each module so we can make sure you’re on track, provide any extra support if it’s needed and prepare you for your final assessment.&nbsp;</p>



<p class="wp-block-paragraph">From week 11 you’ll start working as part of a team on <a href="https://www.madetech.com/case-studies/" target="_blank" rel="noreferrer noopener">real client projects</a>. This is where you’ll apply everything you’ve learnt so far. From this point in the programme you’ll also attend structured learning days where we’ll teach you theoretical knowledge on 7 modules that you can apply to your new day-to-day role. Learning days will take place every month and be a mixture of in-person and virtual learning.&nbsp;</p>



<p class="wp-block-paragraph">Once you’ve successfully completed your final assessment and the apprenticeship programme, you’ll have earned a level 4 DevOps qualification and have developed a clear pathway for your career at Made Tech. </p>



<p class="wp-block-paragraph">If you have any questions about the apprenticeship you can reach out to Bil Badul from our talent team at <a href="mailto:bilal.badul@madetech.com" target="_blank" rel="noreferrer noopener">bilal.badul@madetech.com</a>. Or if you’d like to know a bit more about what life is like at Made Tech, you can take a look at <a href="https://www.madetech.com/blog/category/life-at-made-tech/" target="_blank" rel="noreferrer noopener">recent blog posts by the team</a>.<strong>&nbsp;</strong></p>
<p>The post <a href="https://www.madetech.com/blog/launching-apprenticeship-programme/">Launching our new DevOps apprenticeship programme</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Why lots of software projects get messy</title>
		<link>https://www.madetech.com/blog/messy-software-projects/</link>
		
		<dc:creator><![CDATA[Craig J. Bass]]></dc:creator>
		<pubDate>Wed, 09 Aug 2023 09:34:11 +0000</pubDate>
				<category><![CDATA[Cloud and engineering]]></category>
		<guid isPermaLink="false">https://www.madetech.com/?p=12577</guid>

					<description><![CDATA[<p>Most teams aren’t aware of how to reduce their baseline cost-of-change and much less how to optimise their design for their circumstances. The most common warning sign is when your software engineers fear changing the code.</p>
<p>The post <a href="https://www.madetech.com/blog/messy-software-projects/">Why lots of software projects get messy</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Software engineers have a range of tools at their disposal to organise their software projects. At the most basic, we can use file names and directory structures. There are also more advanced tools that we can use, such as modules, functions, and objects. These tools can be combined to achieve the same user-facing outcome with different cost-of-change attributes.</p>



<p class="wp-block-paragraph">It’s possible for one architectural design to allow flexibility in ways that help deliver the backlog, but for another design to double or even quadruple the effort required to deliver the same backlog.</p>



<p class="wp-block-paragraph">There are many dimensions to the cost-of-change nature of a software project, and good software engineers consider this continuously. Simplified, it can be thought of in 2 ways: the baseline cost of change and the cost of change in a particular direction. The baseline cost of change can be considered the engineering effort required to implement any feature (of any shape or size). In contrast, the cost of change in a particular direction can be considered such that the design is optimised to allow the team to quickly implement changes of a particular nature.</p>



<p class="wp-block-paragraph">Good teams keep their baseline cost-of-change low and learn from their historic backlog to make it easier to deliver more likely changes. This continuous effort helps keep the average pace (measured over a number of iterations) of delivery predictable.</p>



<p class="wp-block-paragraph">Most teams aren’t aware of how to reduce their baseline cost-of-change and much less how to optimise their design for their circumstances. The most common warning sign is when your software engineers fear changing the code.</p>



<h2 class="wp-block-heading">If you don’t have automated tests, start now</h2>



<p class="wp-block-paragraph">If your engineers fear making changes, you know 2 things: they aren’t optimising the architectural design, and the baseline cost of change is high. This fear of change comes from not being confident that the valuable “behaviour” (the software&#8217;s functionality) hasn’t changed or had defects introduced. Teams lose confidence in their ability to change when there isn’t a quick and easy way to verify the behaviour of the software.</p>



<p class="wp-block-paragraph">The first way teams can drastically improve their baseline cost of change is to practise double-loop test-driven development. A common objection is that TDD isn’t possible on a project, but this is almost always never the case. TDD is possible in legacy code environments but requires slightly more care. In any case, to move beyond mediocrity, teams must adopt a disciplined approach to software engineering &#8211; TDD.</p>



<p class="wp-block-paragraph">Useful books on this topic:</p>



<ul class="wp-block-list">
<li><em>Working Effectively with Legacy Code</em> <br>by Michael C Feathers</li>



<li><a href="https://www.goodreads.com/book/show/44936.Refactoring" target="_blank" rel="noreferrer noopener"><em>Refactoring: Improving the Design of Existing Code</em></a> <br>by Martin Fowler</li>



<li><a href="https://www.goodreads.com/book/show/4268826-growing-object-oriented-software-guided-by-tests" target="_blank" rel="noreferrer noopener"><em>Growing Object-oriented Software, Guided by Tests</em></a> <br>by Nat Pryce and Steve Freeman</li>



<li><a href="https://www.goodreads.com/book/show/387190.Test_Driven_Development" target="_blank" rel="noreferrer noopener"><em>Test-driven Development: by Example</em></a> <br>by Kent Beck</li>
</ul>



<p class="wp-block-paragraph">In software projects without tests, the most valuable thing that teams can begin to do is <strong>write tests for all new code </strong>and <strong>around all code that is changed. </strong>Feathers explains a number of techniques to achieve this. In addition, it’s worthwhile exploring mutation testing and approval testing to “characterise” the behaviour of existing code (these systematic approaches to test-last are often called “characterisation testing”).</p>



<p class="wp-block-paragraph">Once a team starts progressing in getting their software under test, they will notice their confidence will begin to grow, and their change failure rate (failure demand) should decrease. You can expect this effort to take at least 2 to 3 quarters to begin to have a significant impact, but you should expect to see a few things within the first quarter. In particular, you should expect the team to begin finding pre-existing defects, eliminating unused code, and experiencing fewer surprises in production.</p>



<h2 class="wp-block-heading">Thinking beyond homogeneity</h2>



<p class="wp-block-paragraph">One reason that teams struggle to optimise for specific backlogs is that their software design is too homogenous. It looks too much like other software projects that do other things! In web applications, this is often caused by teams following a cookie-cutter pattern which closely aligns with the tools they are using. These teams will often have 3 or 4 layers of code, which their code must fit into. A third-party framework often defines these layers and may use names like “Component”, “Reducer”, “Model”, “Entity”, “Controller”, “View”, “Route”, and “Form.” If your software design looks like every other software design, then you haven’t optimised your code for your backlog.</p>



<p class="wp-block-paragraph">For lots of large projects, the pattern that causes many negative side-effects is the third-party framework-provided Active Record pattern. It’s seen in many MVC frameworks, from .NET’s Entity Framework to the classic Ruby on Rails ActiveRecord. As used in most software projects, it leads to a side-effect code smell known as fragility. Fragility is where a change to a feature causes an unexpected defect in a seemingly unrelated feature. The Active Record pattern encourages coupling across many different use cases of a system and often assumes that the validation rules exist at the database layer. These assumptions are sometimes true, in particular in smaller systems, but very quickly (certainly in less than a few quarters) become not true as systems grow in size. In addition, the coupling of business rules to database operations means that this bottleneck heavily constrains the execution time of automated test suites.</p>



<p class="wp-block-paragraph">Ideally, software should be designed around the specifics of your application’s domain and the required layers should be chosen per application. This will allow the software design to be optimised to enable easier backlog delivery. The application will still have the layers defined by the third-party framework, but they are only used as a mechanism to deliver the business logic of the application. For example, in a server-side web application written in Python, the third-party framework layers would be responsible for HTTP, HTML and handling things like form submission. It would not be responsible for validating input, applying business rules, making external calls to APIs or interacting with persistence such as a database.</p>



<p class="wp-block-paragraph">Domain-driven design and hexagonal architectures achieve heterogeneity between applications intended to solve different problems. You should expect teams using these approaches to find themselves mostly adding code rather than modifying code to add new features. In addition, the software design becomes evident as to what it is doing and how it relates to the users&#8217; domain. This contrast is stark compared to logically mapping the user’s domain to the relevant third-party framework concepts.</p>



<p class="wp-block-paragraph">The code design of systems designed using techniques such as these often cleanly separates business logic from other aspects such as the method of delivery (the web), other external systems (APIs) and persistence (database). This means that business logic can be tested in isolation from these slow bottlenecks, which provides extremely fast tests. These fast tests aid in changing the code structure quickly so that it can be optimised to deliver the backlog. Teams with fast tests (e.g. that run in under 10 seconds) can make more code structure changes with confidence in an hour than teams with slow tests (multiple minutes). Teams with glacially slow tests (fifteen minutes or even more than an hour) will tend not to change the structure of their code as they can’t justify the per-change return on investment to themselves.</p>



<p class="wp-block-paragraph">Assuming equal capability in the chosen approach, teams which practise double-loop TDD but essentially outsource a lot of their software design to third-party frameworks will more often than not lose the race compared to teams that design their software to meet the specifics of the domain.</p>



<p class="wp-block-paragraph">In the public sector, organisations often define rigid technology strategies which heavily constrain how software should be designed. It’s not uncommon for all teams to be told that they must use “Ruby on Rails”-way, “Django”-way or “.NET Core MVC”-way. These organisations will then hire individuals into technical architect roles who assure that teams follow the third-party framework’s lowest common denominator approach. These organisations are enforcing homogeneity of their software design, and while this is undoubtedly helpful to teams without the capability to optimise their software designs and adopt a heterogeneous approach. Many teams are capable but suffer the consequences of this strategy. Adopting this lowest-common-denominator approach ensures all your teams will only ever achieve a maximum of consistently average performance.</p>



<h2 class="wp-block-heading">Work towards cohesive systems</h2>



<p class="wp-block-paragraph">Lastly, to explore, we are left with the problem of cohesion. I have seen many teams battle with a systemic lack of cohesion, and those teams are often oblivious to the cause or believe that it “has to be that way”. A lot of this has to do with the trend of the last 7 years towards single-page applications backed by “RESTful” JSON APIs. Teams have 2 code bases that they must change in lockstep to deliver features. To work around this problem, we’ve seen the rise of technologies such as GraphQL, which paper over the deficiencies of this approach.</p>



<p class="wp-block-paragraph">What is the problem? There is an industry-endemic misunderstanding of what RESTful means. A defining feature of a RESTful API is Hypermedia as the Engine of Application State (HATEOS). However, most, if not all, “RESTful APIs” are, in fact, simply Remote Procedure Calls over HTTP dressed up in a sort of REST-like fashion. A common objection to pointing this out is, “So what? This is what modern REST APIs look like, HATEOS was a pipedream anyway.” Quite frankly, this objection misses the point.</p>



<p class="wp-block-paragraph">Many software engineers would rarely think of the interface between a web browser such as Firefox and a backend web application that responds with HTML as an API, but that is exactly what it is! The web browser is a technology that supports a range of API features that allow software engineers to deliver rich user interfaces. This API is a Hypermedia, and so many server-side rendered applications expose a RESTful API in the form of HTML for the purpose of displaying rich UIs to the user. HTML doesn’t have to be the only hypermedia, and web browsers don’t have to be the only hypermedia clients.</p>



<p class="wp-block-paragraph">So, why are single-page applications undesirable? It comes down to cohesion, a software property that attempts to define how well a system is organised and optimised for a backlog. Cohesive systems have one location to express a domain idea. For example, if we must validate a user’s input, there is one location to express the idea of that validation. Many teams these days find that delivering a feature, such as a validation rule, requires code changes and deployments (in lockstep) across 2 or more code repositories. Often it starts with the React frontend codebase dealing with presentation and the backend dealing with the business logic. This already requires 2 changes across 2 different codebases to deliver the feature, which is not ideal. Over time, we want more reactive validation, so some of the business logic begins to be duplicated in the frontend. This state of affairs is hardly cohesive and is not conducive to delivering at pace.</p>



<p class="wp-block-paragraph">What’s wrong with a hypermedia-only approach? The HTML standard has too many limitations. Over the last decade, the industry has evolved an approach to prevent page flashing (the screen going blank after a link has been clicked, before the subsequent page loads). Page flashing feels like a cheap experience to modern-day users of the web. This approach was to build single-page applications (SPAs). In addition, there are challenges in delivering reactive experiences, such as typing in a form input that immediately updates the UI without a page reload. These limitations have led to more advanced frontend tooling &#8211; culminating in our current potted ecosystem of more than a dozen SPA frameworks.</p>



<p class="wp-block-paragraph">Ideally, the HTML standard should be extended and improved. There are features it could have that would vastly reduce the need for JavaScript and, subsequently, the SPA ecosystem. A few tools demonstrate the feasibility of this: HTMX, Hotwire and a few others. These HTML-centric approaches can deliver reactive experiences that are almost entirely server-side, with hypermedia as the engine of the application state, by extending the functionality of the HTML standard. In the public sector, service assessments often ask for progressively enhanced citizen-facing applications that work seamlessly without JavaScript. These HTML-centric technologies make this possible without enormous amounts of engineering effort. Moreover, they are standalone libraries with no dependencies, meaning a team could have one JavaScript dependency and entirely side-step npm vulnerability hell.</p>



<h2 class="wp-block-heading">Be deliberate with designing teams</h2>



<p class="wp-block-paragraph">Cohesion and team design are very closely related through what is known as Conway’s law. “Any organisation that designs a system (defined broadly) will produce a design whose structure is a copy of the organisation&#8217;s communication structure.” This fact has led to techniques such as the “Inverse Conway Manoeuvre,” which aims to solve software architecture design problems by (often radically) changing the organisation structure.</p>



<p class="wp-block-paragraph">There are similar smells at the programme scale to those on the team scale. For example, how many teams do you need to involve to deliver an outcome? How often are those teams blocking each other from making progress? In an ideal world, a single team can always deliver outcomes within its remit without depending on any other team. In software terms, all the code that needs to be changed for them to be able to deliver is within their control.</p>



<p class="wp-block-paragraph">Dependencies between teams add management overhead to an overall programme, requiring more roles between teams to keep them aligned and on track. What is often not recognised is that dependencies between teams add extra complexity to codebases because teams are forced to coordinate along the boundary between the code in their control &#8211; often through APIs.</p>



<p class="wp-block-paragraph">A common pattern is to have a frontend team that delivers functionality in a “frontend” codebase, depending on an API built by a backend team. Both teams depend on each other to deliver outcomes, requiring coordination to deliver anything of meaningful value. A slightly improved organisation design might have frontend and backend specialists within feature-aligned teams. These teams share a codebase, so it isn’t perfect, but it will bring together individuals to focus on goals.</p>



<p class="wp-block-paragraph">Sharing code between feature-aligned teams is not ideal because it still requires careful coordination between them and often leads to scenarios where teams need to agree on the strategic direction of the code design. This gives you the added overhead of needing additional roles to sit between teams and the overhead of making decisions and resolving conflicts that impact both teams.</p>



<h2 class="wp-block-heading">Keep things simple</h2>



<p class="wp-block-paragraph">The industry has conditioned engineers to believe that everything must be some sort of JavaScript single-page application backed onto a GraphQL API deployed into a serverless function environment with multiple tiers of indirection, including cloud infrastructure glue. This does not have to be the case. I believe that public money is often “accidentally misused” by engineers believing they are doing the right thing by creating vastly overcomplicated solutions, following guidance they found online, for simple problem spaces.</p>



<p class="wp-block-paragraph">Most digital services in the public sector can be delivered through building humble monoliths using “boring” server-side technologies (e.g. Flask, Sinatra, Rails, Django), ideally by outcome-aligned digital service (product) teams focussed on user needs. These teams can use tried and tested cloud infrastructure features such as containerisation (docker) and relational databases for persistence (PostgreSQL) to side-step every team needing to know the complete A-Z of your cloud provider’s catalogue. It is true that when more complicated approaches appear to be the industry norm, we can collectively forget that there are more straightforward ways to deliver. To escape the default of mediocrity, we must be disciplined and strive for simplicity.</p>
<p>The post <a href="https://www.madetech.com/blog/messy-software-projects/">Why lots of software projects get messy</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AWS Well-Architected: building digital services fit for the future</title>
		<link>https://www.madetech.com/blog/aws-well-architected/</link>
		
		<dc:creator><![CDATA[Stephen Strudwick]]></dc:creator>
		<pubDate>Thu, 02 Feb 2023 10:39:27 +0000</pubDate>
				<category><![CDATA[Cloud and engineering]]></category>
		<category><![CDATA[AWS]]></category>
		<guid isPermaLink="false">https://www.madetech.com/?p=11158</guid>

					<description><![CDATA[<p>Across the public sector we’re beginning to see organisations eagerly adopt the opportunities modern technology provides by building and nurturing secure, high-performing and resilient services that put the needs of end users front and centre. </p>
<p>The post <a href="https://www.madetech.com/blog/aws-well-architected/">AWS Well-Architected: building digital services fit for the future</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Across the public sector we’re beginning to see organisations eagerly adopt the opportunities modern technology provides by building and nurturing secure, high-performing and resilient services that put the needs of end users front and centre.&nbsp;</p>



<p class="wp-block-paragraph">Behind those services is a wealth of infrastructure and architecture built to support the changing needs of ever-adapting civic services. But how do we make sure what we’re building is fit for the future? This is where AWS Well-Architected can help.</p>



<h2 class="wp-block-heading">All things AWS Well-Architected</h2>



<p class="wp-block-paragraph">AWS Well-Architected is essentially a best-practice guide for cloud architects. It’s a great way of going through what you’ve built and how your AWS management is set up to make sure you&#8217;re doing it in a responsible way that’s also high quality. By following a simple framework, you can make sure you&#8217;re effectively reviewing your architecture design.&nbsp;</p>



<p class="wp-block-paragraph">The AWS Well-Architected framework documents an approach that allows you to understand if a specific architecture aligns well with current cloud best practices. To support Solution Architects and Chief Technology Officers, the framework gives a consistent approach to evaluating systems against the qualities you expect from modern cloud-based systems. Though this may sound complicated, it’s actually pretty simple.&nbsp;</p>



<p class="wp-block-paragraph">The review is built around 6 pillars:&nbsp;</p>



<ul class="wp-block-list">
<li>operational excellence</li>



<li>security</li>



<li>reliability</li>



<li>performance efficiency</li>



<li>cost optimisation</li>



<li>sustainability</li>
</ul>



<p class="wp-block-paragraph">These pillars will be familiar to seasoned DevOps engineers and not come as a surprise, but the AWS Well-architected review moves it into the 21st century.</p>



<h2 class="wp-block-heading">Let’s talk functional and nonfunctional</h2>



<p class="wp-block-paragraph">The review raises the importance of different aspects of your build. It focuses on both the functional features you need to build to make the service work, and also the nonfunctional architecture, where we think about things that will help us if the service goes down suddenly.&nbsp;</p>



<p class="wp-block-paragraph">The type of questions it asks the development team to get them thinking more about nonfunctional parts could be:</p>



<ul class="wp-block-list">
<li>do we know if the service is working well? </li>



<li>can we recover from disaster?<em> </em></li>
</ul>



<p class="wp-block-paragraph">This is particularly important, but easily overlooked. When we think of cloud architecture, it’s easy to think only of what we’re building, but we need to make sure we’re giving equal focus to the other supportive stuff too. Leveraging those nonfunctional requirements is crucial and the review is a good way of making sure we’re doing it effectively.&nbsp;</p>



<p class="wp-block-paragraph">To give an example, a client we recently worked with provides emergency services to people in the UK. They use digital tools in emergency situations and often have to work quickly. So if the performance of the digital tool is poor or it&#8217;s just flat-out broken the business impact is significant.</p>



<p class="wp-block-paragraph">Through the review, we were able to make sure there were these crucial nonfunctional considerations and solutions in place. It&#8217;s very easy to focus on what features your service should have, but the context of the user&#8217;s working environment is not always a focus of the architecture leading to performance and reliability becoming a second-class system. The well-architected review helps us shift the focus a bit.&nbsp;</p>



<h2 class="wp-block-heading">Benefits of a well-architected review</h2>



<p class="wp-block-paragraph">There are 3 main areas of benefit that I see in reviewing projects using the framework.</p>



<h3 class="wp-block-heading">Reframing our retros</h3>



<p class="wp-block-paragraph">It&#8217;s really useful to have this ongoing technical review. In lots of ways, it’s similar to a retrospective. Often we&#8217;re focused on delivering: doing the stuff and getting the features out there in the world and improving ways of working. But this review adds a regular cadence of looking at what we build from a technical, performance, operational or security or perspective and asking penetrating questions.</p>



<p class="wp-block-paragraph">This retrospective is a practice you actually do over several sessions. And then you record it in the AWS app. You keep track of your notes and the days you made them. You can revisit at any point and say “we were going to do this” or “this was a risk &#8211; have we solved it?”.</p>



<p class="wp-block-paragraph">We don&#8217;t always do this type of architecture retrospective, and that’s where AWS Well Architected Review nudges us in the right direction. Asking have we forgotten to do some things or do we need to do more?&nbsp;</p>



<h3 class="wp-block-heading">Knowledge sharing</h3>



<p class="wp-block-paragraph">There’s a bit of knowledge sharing in there as well. By doing these retrospectives and talking about what we&#8217;ve done and what we haven’t, people in the room can say “oh, I didn&#8217;t realise we did that”. Because people move around on projects a lot it’s good to do these check-ins.&nbsp;</p>



<p class="wp-block-paragraph">It helps us all think a little bit more through the lens of support, and particularly what operational aspects we may need in place to help the team. It helps us think beyond just building the thing and getting it working. It&#8217;s a good thing for our team to do regularly and helps our software engineers to learn best practices for any future projects.&nbsp;</p>



<h3 class="wp-block-heading">ROI is crucial</h3>



<p class="wp-block-paragraph">We’d be wrong if we didn&#8217;t mention return on investment. Taking on the well-architected review is great for organisations to help their design teams truly deliver a higher quality technical service. And bonus &#8211; it’s less likely to fail. Not only that, it also means having a service that’s easier to work on and much better understood by everyone involved.&nbsp;</p>



<h2 class="wp-block-heading">Best practice for all&nbsp;</h2>



<p class="wp-block-paragraph">Ending on a high, what I really like about AWS Well-Architected is that more widely it can be described as best practice for<em> all </em>cloud operations. It takes the best parts of those good old-fashioned cloud ops practices that have been around for a very long time and gets rid of what’s not relevant anymore.&nbsp;</p>



<p class="wp-block-paragraph">It&#8217;s clear, easy to work through and provides a really great framework for helping us evaluate architectures and implement scalable designs in the public sector.&nbsp;</p>



<p class="wp-block-paragraph">If you want to learn more about how we can support you with AWS well-architected, <a href="https://www.madetech.com/contact/" target="_blank" rel="noreferrer noopener">please get in touch</a>. Or if you’d like to learn more about the work we do here at Made Tech you can subscribe to our <a href="/made-tech-insights/" target="_blank" rel="noreferrer noopener">Made Tech Insights</a> newsletter to get new blog posts straight to your inbox.</p>
<p>The post <a href="https://www.madetech.com/blog/aws-well-architected/">AWS Well-Architected: building digital services fit for the future</a> appeared first on <a href="https://www.madetech.com">Made Tech</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
