<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet type="text/css" href="/css/atom.css"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">Garry Shutler</title><link rel="self" type="application/atom+xml" href="https://gshutler.com/atom.xml"/><link rel="alternate" type="type/html" href="https://gshutler.com/"/><author><name>Garry Shutler</name><email>garry@robustsoftware.co.uk</email></author><generator url="https://gohugo.io" version="0.126.1">Hugo</generator><updated>Thu, 14 May 2026 07:31:28 UTC</updated><id>urn:uuid:6bc411f6-c832-5f30-29b0-24ba169cb97e</id><entry><title type="text">Agents aren't a new risk category</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2026/05/agents-arent-a-new-risk-category/'/><published>Thu, 14 May 2026 00:00:00 UTC</published><updated>Thu, 14 May 2026 07:31:28 UTC</updated><id>urn:uuid:ef0dd7e4-ec3d-546e-e970-6bc58052602a</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
The framing that agents introduce a category of risk that requires new disciplines doesn&amp;rsquo;t hold up. The part that is new is the speed and variance.
Agents have raised the profile of information security and that&amp;rsquo;s a positive. The AI governance conversation has raised the visibility of compliance for boards, for buyers, and for engineers. More care is being put into how systems handle data and how they handle delegated authority.<br/></div></summary></entry><entry><title type="text">The Pareto Flip</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2026/04/the-pareto-flip/'/><published>Sat, 25 Apr 2026 00:00:00 UTC</published><updated>Sat, 25 Apr 2026 08:00:10 UTC</updated><id>urn:uuid:117bd688-c488-564b-699b-9a2855a0460a</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
I&amp;rsquo;ve been working in software for over twenty years. In that time, nothing has changed my calculus on product delivery in the way that working with Claude has over the past few months.
I was a sceptic for a long time. The early enthusiasm came largely from people who, in many cases, didn&amp;rsquo;t know how to develop software in the first place.
None of the people I&amp;rsquo;d consider peers, or whose opinions I particularly respected, were saying anything similar.<br/></div></summary></entry><entry><title type="text">Death to DST</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2024/10/death-to-dst/'/><published>Tue, 29 Oct 2024 00:00:00 UTC</published><updated>Tue, 29 Oct 2024 07:23:10 UTC</updated><id>urn:uuid:f2b6b405-4ccf-54df-59f3-76208fb3f438</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
As a programmer and a father of young children there&amp;rsquo;s not many things I hate more than &amp;ldquo;daylight saving time&amp;rdquo;.
It&amp;rsquo;s the source of many software bugs, several days of unnecessary sleep disruption every year, and daylight is finite so it saves nothing.
In the UK there&amp;rsquo;s been suggestion of stopping &amp;ldquo;saving&amp;rdquo; daylight, but then the question is which offset to choose for the rest of eternity. My argument is that it should be GMT (UTC+00:00), not BST (UTC+01:00).<br/></div></summary></entry><entry><title type="text">Dinosaurs!</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2024/07/dinosaurs/'/><published>Thu, 18 Jul 2024 00:00:00 UTC</published><updated>Thu, 18 Jul 2024 08:49:59 UTC</updated><id>urn:uuid:6f2b0854-2e8d-5081-89e9-3543e25bc07c</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Social cues are extremely powerful. &amp;ldquo;Dinosaurs!&amp;rdquo; is one of my favourites, because it is simple and effective. It also defeats one of my greatest nemeses: ambiguity.
In a recent retrospective at Cronofy we spoke about the need for all of us to have more than a surface-level understanding of why we&amp;rsquo;re building what we&amp;rsquo;re building, and why we&amp;rsquo;re building it the way we are.
We encourage people to ask questions with the likes of &amp;ldquo;if you don&amp;rsquo;t know, ask&amp;rdquo;, &amp;ldquo;there&amp;rsquo;s no stupid questions&amp;rdquo;, and similar.<br/></div></summary></entry><entry><title type="text">No known bugs</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2024/06/no-known-bugs/'/><published>Mon, 17 Jun 2024 00:00:00 UTC</published><updated>Mon, 24 Jun 2024 16:30:24 UTC</updated><id>urn:uuid:9e8c19f5-46e0-5837-d98b-60ccd7ea4bf6</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
The Cronofy engineering principle pretty much everyone asks me about, including non-engineers, is &amp;ldquo;no known bugs&amp;rdquo;. Common questions are around what that means in practice. This is an attempt to answer those questions in a way that I can reference, with a hope it might lead other organizations to adopt it as well.
First, the specific engineering principle in full:
No known bugs
To maintain speed we fix bugs as they are found, and prevent their return through automated tests.<br/></div></summary></entry><entry><title type="text">Repetition</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2024/06/repetition/'/><published>Mon, 17 Jun 2024 00:00:00 UTC</published><updated>Mon, 17 Jun 2024 19:53:10 UTC</updated><id>urn:uuid:5282ea1a-3f11-5941-295e-8e794312e707</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
I believe one of the key skills you need to master as a leader is repetition. Repeat something often enough you are deathly bored by it, and you might have said it just enough.
But you shouldn&amp;rsquo;t just repeat any old thing. You need to curate what deserves repetition.
There&amp;rsquo;s a rich vein in repeating the obvious. What&amp;rsquo;s obvious to one person may not be obvious to another. A second rich vein is in initiatives.<br/></div></summary></entry><entry><title type="text">Simple scorecards beat scales</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2023/08/simple-scorecards-beat-scales/'/><published>Fri, 18 Aug 2023 00:00:00 UTC</published><updated>Tue, 29 Aug 2023 08:17:38 UTC</updated><id>urn:uuid:f0f8a305-4c5d-5b19-a996-4c5d60fbbb5b</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Simple scorecards are more effective, and can provide stronger data for better insight, than the goto sliding scale. Rather than defaulting to an overall &amp;ldquo;marks out of 10&amp;rdquo; and then agonising over whether something is a 7 or an 8, building out a simple scorecard with ideally binary &amp;ldquo;yes or no&amp;rdquo; questions will produce better outcomes.
Why score at all? Let&amp;rsquo;s take a step back and ask why we&amp;rsquo;re scoring at all.<br/></div></summary></entry><entry><title type="text">One-to-ones for high performance teams</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2023/03/one-to-ones-for-high-performance-teams/'/><published>Wed, 08 Mar 2023 00:00:00 UTC</published><updated>Mon, 26 Sep 2022 21:41:46 UTC</updated><id>urn:uuid:63286c3c-5b76-5413-d9cd-6c0747c5743a</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Skipping straight to the point, here&amp;rsquo;s the agenda:
How are you? Life is full of peaks and troughs. Where are you at right now, and what’s the trajectory? Anything you want to brag about? Professional or personal! What’s one thing we could change about work for you that would improve your life? What have you been putting off? What is concerning you? Are you fulfilled by your work? Are you getting the support you need?<br/></div></summary></entry><entry><title type="text">Dumb questions</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2023/01/dumb-questions/'/><published>Sun, 08 Jan 2023 00:00:00 UTC</published><updated>Fri, 27 Jan 2023 11:20:33 UTC</updated><id>urn:uuid:056e09c3-d948-5c3c-b9d4-ed913c09f698</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
The saying goes &amp;ldquo;smart people ask dumb questions&amp;rdquo; and whilst memorable it doesn&amp;rsquo;t explain &amp;ldquo;why&amp;rdquo; or provide a mental model for how to choose the kind of questions to ask.
Smart people don&amp;rsquo;t ask dumb questions, they seek to eliminate ambiguity.
That can be confirming an assumption of theirs is valid, or asking the speaker to explain a leap that they&amp;rsquo;ve made which everyone should understand.
For example, during a conversation they&amp;rsquo;ll identify a leap between two topics and not see where the bridge is between them.<br/></div></summary></entry><entry><title type="text">How we improved deployment velocity at Cronofy</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2021/04/how-we-improved-deployment-velocity-at-cronofy/'/><published>Wed, 07 Apr 2021 00:00:00 UTC</published><updated>Wed, 07 Apr 2021 13:55:48 UTC</updated><id>urn:uuid:43ed641b-12ad-591e-e90a-f5d510b23881</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
In Q1 2021 I set the goal of increasing the deployment velocity of the Cronofy engineering team. We were already deploying several times per week, often multiple times per day putting us in the top percentile of teams, but I felt we could do better to delivery value more consistently to the business.
A lot had changed in 2020, we&amp;rsquo;d shifted from two production instances (US, Germany) to five (adding Australia, Singapore, UK) and we were adding a sixth (Canada) during Q1.<br/></div></summary></entry><entry><title type="text">Kubernetes and Terraform two years on</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2020/12/kubernetes-and-terraform-two-years-on/'/><published>Tue, 29 Dec 2020 00:00:00 UTC</published><updated>Tue, 29 Dec 2020 11:50:22 UTC</updated><id>urn:uuid:77bb1913-a247-5aa5-f94e-1ef8137efa76</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
In late 2018 we were looking at overhauling our infrastructure at Cronofy. We had some key pain points, mostly a lack of autoscaling on the compute side, but also an eye on some future challenges. We knew auditors were about to become a key stakeholder of the system. It also felt inevitable that we would be introducing additional services to the platform.
I like to think on longer term horizons. Overhauling our infrastructure was going to a significant undertaking, in both monetary and time terms.<br/></div></summary></entry><entry><title type="text">Moving forward with observability</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2020/12/moving-forward-with-observability/'/><published>Mon, 21 Dec 2020 00:00:00 UTC</published><updated>Fri, 07 Apr 2023 09:28:11 UTC</updated><id>urn:uuid:c5c2ce53-4732-5e6b-7937-f8c8e8f0cf62</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
As a leader, particularly as an early stage founder, your role is to empower people to do their jobs to the best of their ability. One of the places this is most extreme is in understanding the ebb and flow of your production environments.
As a founder, you&amp;rsquo;ve seen literally everything that has happened since day one. You&amp;rsquo;ve put in place mitigations for countless edge cases and exotic failures. Your system is observable through whatever tools you had to hand.<br/></div></summary></entry><entry><title type="text">Compliance and continuous deployment</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2020/12/compliance-and-continuous-deployment/'/><published>Sat, 19 Dec 2020 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:434bb77c-68f7-5cfc-89ae-1942685f52a6</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Cronofy is ISO27001 certified and SOC2 Type 2 accredited. Though we have always been serious about how we handle data, in 2019 we set about proving that was the case.
Initially, I led that effort for the SOC2 Type 1 audit in Q4 2019, before we hired Karl Bagci as head of operations who steered us through SOC2 Type 2, and ISO 27001 in Q1 and Q2 of 2020.
One of my main concerns entering this process was avoiding it slowing us down as much as possible.<br/></div></summary></entry><entry><title type="text">Kubernetes rollout stuck</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2018/11/kubernetes-rollout-stuck/'/><published>Wed, 14 Nov 2018 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:14c98ab0-bbc9-5b8a-8980-ad65115d934d</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Quick post to help anyone else stuck in the same situation I was today. The internet, or at least my Googlefu, failed me.
Today we had a Kubernetes deployment get stuck, all health checks seemed healthy, but a deployment got stuck somewhere between demoting the current replica set to be the old one, and creating a new one.
This seemed to put all replica set creation in limbo as other deployments also ended up stuck in a similar state.<br/></div></summary></entry><entry><title type="text">Making the most of an accelerator as a techie</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2014/12/accelerator-techies/'/><published>Mon, 29 Dec 2014 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 18:46:48 UTC</updated><id>urn:uuid:26cb08cf-aa97-536c-8952-e02a5a709328</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Over the past 4 months Cronofy has graduated from the Microsoft Ventures London Accelerator and soon after we became part of the Seedcamp family which involved an on-boarding process.
Though different, the two of them covered similar ground and did similar exercises. And I saw the same opportunities being missed in both.
The problem comes from good intentions, namely to spend more time working on the product. That intention means that the techies would take any opportunity to not attend the sessions laid on by the accelerator so that they could do some “real work”.<br/></div></summary></entry><entry><title type="text">Hiring for the future</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2014/12/hiring-for-the-future/'/><published>Sun, 28 Dec 2014 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:f1404bf3-e080-53e3-0994-b5a7b3b8d9da</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
When hiring people, beyond the basic competency requirement of the role, I look for an alignment in future goals. This is why the question of “where do you see yourself in N years time?” is so ubiquitous.
Any existing competencies for the role on offer are only a single part of the hiring story. Anyone who is hiring should have in mind what role they would like that person to grow in to.<br/></div></summary></entry><entry><title type="text">Ruby 2 - Module#prepend</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2013/04/ruby-2-module-prepend/'/><published>Sat, 06 Apr 2013 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:558b416e-edd1-5967-e985-d2fe2a59d6d9</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
As you may know Ruby 2.0.0 has been released. Despite the major version it is mostly an incremental release. However, it does include a few breaking changes so a major version is warranted. However, whilst the usefulness of most of the new features was obvious to me, I couldn&amp;rsquo;t say the same of Module#prepend.
However, whilst listening to the Ruby Rogues podcast on Ruby 2 one of the Rogues (I think it was Josh Susser) referred to memoization as a case where it would make a difference.<br/></div></summary></entry><entry><title type="text">Logging</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2012/12/logging/'/><published>Sun, 30 Dec 2012 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:6192356c-1441-503e-d904-ce7acf094425</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
If there was one thing that I learnt in 2012 that I would want to convey to all the developers I know, it would be this:
Logging is about so much more than failures
I don&amp;rsquo;t know if it was just my experience but little to no emphasis was put on logging aside from handling exceptions. In the .NET world this boiled down to adding ELMAH to your project and then forgetting about it, with Rails it meant having nothing but the logs that you got out of the box.<br/></div></summary></entry><entry><title type="text">Minimalism in an Age of Tremendous Hardware</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2012/09/minimalism-in-an-age-of-tremendous-hardware/'/><published>Wed, 19 Sep 2012 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:b2c9f6c4-81ea-570e-19c9-0bd8a29c039d</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Usually &amp;ndash; almost always &amp;ndash; there&amp;rsquo;s a much simpler solution waiting to be discovered, one that doesn&amp;rsquo;t involve all the architectural noise, convolutions of the straightforward, and misguided emphasis on hooks and options for all kinds of tangents which might be useful someday. Discovering that solution may not be easy, but it is time well spent.
James Hague - Minimalism in an Age of Tremendous Hardware<br/><a href="https://gshutler.com/2012/09/minimalism-in-an-age-of-tremendous-hardware/">[read more]</a></div></summary></entry><entry><title type="text">The Boy Scout Rule</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2012/09/boy-scout-rule/'/><published>Mon, 10 Sep 2012 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 18:46:48 UTC</updated><id>urn:uuid:26584063-eda0-52a4-b978-74f5fe4c547e</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
My friend Dom Finn wrote a post To Fix Or Not To Fix. This is something I&amp;rsquo;ve thought about quite a lot as, lets be honest, everyone is maintaining a legacy codebase to some degree.
The Boy Scout (or Girl Guide) Rule is to leave the campsite tidier than you found it. This helps avoid making the problem any worse and the propagation of Broken Windows.
What motivates refactoring? The question Dom raised is how much is too much and when should you refactor?<br/></div></summary></entry><entry><title type="text">DDD 10 - 10 Practices</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2012/09/ddd10/'/><published>Sat, 08 Sep 2012 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:cecdd230-a4b0-56f2-5990-c1b79507eda8</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Among some of the more interesting feedback were some requests for some links and an overview of the things mentioned in my talk.
Slides I&amp;rsquo;ve put them up on Slideshare though without the context of the talk they might not be much use. I used the Bangers font from Google web fonts and the tech light palette from colourlovers.
Talking points Standards I made the point that standards are important for putting the focus on the logic of the code rather than its layout.<br/></div></summary></entry><entry><title type="text">Versioning APIs Sucks</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2012/07/versioning-apis-sucks/'/><published>Fri, 13 Jul 2012 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:b2cd23b2-e6a3-5f29-d953-0f4068351e42</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Also, versioning APIs sucks. It’s not that it’s hard, it’s that once you publish an API, you pretty much have to support it forever. This is especially true when your API is being consumed through multiple layers. I can’t force game developers to upgrade, because they can’t force their users to upgrade. The lesson here is simple, if you don’t have to make something public, don’t!
Karl Seguin - What I Learned Building Mogade<br/><a href="https://gshutler.com/2012/07/versioning-apis-sucks/">[read more]</a></div></summary></entry><entry><title type="text">Gain Trust and Create Change - LDNUG - Followup</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2012/02/gain-trust-create-change-ldnug/'/><published>Sun, 05 Feb 2012 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:9b10182e-9ae2-5849-79a8-dbdbee24bf52</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Last Monday I gave my talk “Gain Trust and Create Change” for the first time at the London .NET user group. The guys at Skills Matter recorded the whole thing so you can watch it online if you missed it.
I am reasonably pleased with how the presentation went. Watching it back was an uncomfortable experience but is very useful to feed into the next time I give this talk. Speaking of which, if you run a user group and would like me to give this talk get in touch.<br/></div></summary></entry><entry><title type="text">Software and Schrödinger's Cat</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2012/02/software-and-schrodingers-cat/'/><published>Sun, 05 Feb 2012 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:3e35dfdc-83c2-5b32-5954-f5a9f46b95b7</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
An interesting article exploring the relationship between quantum physics and continuous delivery.
None of it is real until it is in the hands of actual users. I don&amp;rsquo;t mean someone who will poke at it a bit or evaluate it. And I don’t mean a proxy who will tell you if the users might like it. I mean someone who will use it for its intended purpose as part of their normal routine.<br/></div></summary></entry><entry><title type="text">Heroku in Europe</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2012/01/heroku-in-europe/'/><published>Thu, 26 Jan 2012 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:c72005d2-7642-553a-190c-829041c50c5e</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
I tweeted yesterday (25th Jan 2012) to ask if anyone knew of a solution as convenient as Heroku but based in the UK or Europe.
The reason I asked was at Zopa we are thinking of migrating our front-end over to a Ruby stack and Heroku was the obvious option for hosting such a solution. However, as 95% or more of our traffic comes from the UK it doesn’t make complete sense to host our website outside of the UK or Europe at worst.<br/></div></summary></entry><entry><title type="text">DDD North - Introduction to Backbone.js</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2011/10/introduction-to-backbone-ddd-north/'/><published>Sun, 09 Oct 2011 00:00:00 UTC</published><updated>Mon, 28 Dec 2020 11:55:46 UTC</updated><id>urn:uuid:8c4b2fdb-6b97-504e-a9f8-996be7399f5d</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Yesterday, I gave a presentation on Backbone.js at the inaugural DDD North. My thanks go out to Andrew Westgarth and his team for organising it, it was a great event.
I was a bit nervous as it was my first time speaking at a conference and I think it showed. I rattled through my presentation at break-neck speed, unfortunately finishing well under my allocated hour. Niall Merrigan gave me some tips for sorting that out so I’ll hopefully be more composed next time!<br/></div></summary></entry><entry><title type="text">Finagle</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2011/08/finagle/'/><published>Thu, 25 Aug 2011 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:e65a1963-88a4-5b30-39ca-8ba107ec78bb</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
I came across Finagle a few weeks ago, it’s:
… a protocol-agnostic, asynchronous RPC system for the JVM that makes it easy to build robust clients and servers in Java, Scala, or any JVM-hosted language.
And they’ve now written a blog post announcing it to the world. I had a skim over it before but it looks like they’ve added to the documentation since then.
I’ve been looking for a framework for writing servers in Scala, the Play framework is on my radar for web applications, and this looks like a great contender.<br/></div></summary></entry><entry><title type="text">LMAX Architecture - Martin Fowler</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2011/07/lmax-architecture/'/><published>Wed, 13 Jul 2011 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:20fb03c2-7d74-5948-e98f-8dc450c724e3</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
I remember watching one of the original presentations on this architecture a few months ago (no idea why I didn’t link to it at the time) and Martin’s article puts it into a format that’s easier to consume at your leisure.
A really interesting approach!<br/><a href="https://gshutler.com/2011/07/lmax-architecture/">[read more]</a></div></summary></entry><entry><title type="text">The most important code isn't code</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2011/06/the-most-important-code-isnt-code/'/><published>Wed, 08 Jun 2011 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:f874eeed-6374-55d8-19f1-c3c3d46a6276</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
I cannot stress how much I agree with this. I’ve come to exactly the same conclusions as Zach in the last year myself. I wish I had written this post myself!
Here are my highlights:
Documentation is the best way to communicate your thoughts to yourself.
Forcing myself first to consider the API, the interface, and the end result led to a clarity that inspired less code and a more impactful project.<br/></div></summary></entry><entry><title type="text">How to keep your software awesome</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2011/06/how-to-keep-your-software-awesome/'/><published>Thu, 02 Jun 2011 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:1e4fb03b-64fd-565d-993a-226f7429ca45</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
There’s a whole school of thought that quantity of features is directly proportional to what you can charge for software. While clearly this is true in practice, that doesn’t mean that it’s not incredibly stupid. Every new feature makes your software more complex to use.
Jesse Emery - How to keep your software awesome<br/><a href="https://gshutler.com/2011/06/how-to-keep-your-software-awesome/">[read more]</a></div></summary></entry><entry><title type="text">Tags are magic!</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2011/02/tags-are-magic/'/><published>Wed, 09 Feb 2011 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:e26d049b-c440-5139-695d-0edc885c53aa</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
The Guardian produced a interesting series of blog posts on how they use tags to categorise their content, display related articles and so forth:
Part 1 Part 2 Part 3<br/><a href="https://gshutler.com/2011/02/tags-are-magic/">[read more]</a></div></summary></entry><entry><title type="text">Pragmatic web service design</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2011/02/pragmatic-web-service-design/'/><published>Mon, 07 Feb 2011 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:05aa93e3-1e03-5956-f964-c7b54cd5c4d0</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Web services are a crucial part of most solutions nowadays, I spend a significant portion of my time designing and writing them and I have read a lot about them to make them better, faster and more resilient each time. This is a summary of how I approach web service design and the things I bear in mind.
Protocols and content types Unless you require extreme performance from your service then use the most compatible technologies available.<br/></div></summary></entry><entry><title type="text">Cross-site XmlHttpRequest with CORS</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2011/01/cross-site-ajax-with-cors/'/><published>Wed, 05 Jan 2011 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:bc1d3f2f-a87d-5097-b915-38d12f7488cb</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
I was working on a personal project over the Christmas period and wanted to make cross-site requests from an AJAX client to an API.
As the client and the API were hosted on different domains they violated the same origin policy implemented by almost all browsers. Modern browsers allow cross-site AJAX requests if the API allows cross-origin resource sharing (CORS).
The resources I found at the time on this were a little bare on details but I managed to piece it together and get something working.<br/></div></summary></entry><entry><title type="text">Why Rack should matter to .NET developers</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2010/12/why-rack-should-matter-to-dot-net-developers/'/><published>Tue, 07 Dec 2010 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:681743e2-a403-568b-f94c-f7ccd088aca8</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
There&amp;rsquo;s been a lot of talk in the .NET community about Sinatra clones, namely Nancy and Nina in recent times but there are several others as well. Unfortunately, all these frameworks are missing the underlying reason that Sinatra is awesome and that is Rack. Sinatra packs a hell of a lot of functionality yet weighs in at 1198 lines of code including documentation. The main reason for that is the fact it is building on top of Rack which has allowed the authors to concentrate on creating a framework without having to worry about the details of dealing with server requests.<br/></div></summary></entry><entry><title type="text">Use integration tests when working in a new language</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2010/11/integration-tests-new-language/'/><published>Fri, 19 Nov 2010 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:b7df55b9-e8cf-585d-493b-acd443f13885</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
This is in some respects a follow up to my previous post in that it has been triggered by our internal project in Ruby. When working in Ruby I consciously lean towards integration tests. Sinatra and Sequel make this really easy as using rack-test and running against an in-memory SQLite database it is easy to simulate a full conversation of HTTP requests and they run reasonably quickly too.
How does this relate to learning a new language?<br/></div></summary></entry><entry><title type="text">Simple tools and fundamental principles</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2010/11/simple-tools-fundamental-principles/'/><published>Thu, 18 Nov 2010 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:1fe80550-7b75-552d-e9d3-c1f06d3eac10</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
We are doing an experiment in using Ruby for an internal project at work. I am the most experienced in Ruby so I’m leading the choices of gems and so forth and the team questioning those choices has lead to a bit of a personal epiphany.
I know that for a long while I have preferred simple tools and components. Simple tools tend to be more enabling as they give you control over precisely what is happening in your application whilst managing the boilerplate code for you.<br/></div></summary></entry><entry><title type="text">The Long Beard's revenge</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2010/10/the-long-beards-revenge/'/><published>Thu, 14 Oct 2010 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:570040b7-c986-58e4-69a4-919c970e67b2</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Very interesting article on a reduction in contribution to open source and the possibly underlying forces behind it.
I recently heard that RMS is pissed at cloud service companies because they are causing the decline of open source. I do have to say I agree with him that there&amp;rsquo;s a decline in open source, but I&amp;rsquo;m going to lay out a completely different reason why. This is based on my experience as being classified a &amp;ldquo;Long Beard&amp;rdquo; during an era where consumer internet shifted and the front-end became king.<br/></div></summary></entry><entry><title type="text">10 common mistakes made by API providers</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2010/10/10-common-mistakes-made-by-api-providers/'/><published>Mon, 11 Oct 2010 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:643400be-3d58-582f-8901-f0496068b2af</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Twitter has made numerous changes to fix its API. Those experiences have taught providers what mistakes not to make when launching a service.
But there is still a lot for providers to learn.
Alex Williams - 10 Common Mistakes Made by API Providers<br/><a href="https://gshutler.com/2010/10/10-common-mistakes-made-by-api-providers/">[read more]</a></div></summary></entry><entry><title type="text">Products for people who make products for people</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2010/09/products-for-people-who-make-products-for-people/'/><published>Mon, 27 Sep 2010 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:4dea5ae4-3509-5e7b-09b0-d4e9212f6d23</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Your end users are Product People. You need to toss out this stupid idea that making something usable by DHH fanbois means you’re not HARD CORE. You can still be hard core and make something they can use, hell something any programmer can use. By doing this you will reduce costs for the people who use your software which is what that kind of software is good at.
The shift in thinking is to focus on usability as if it ware a linguistic concern rather than a graphical concern.<br/></div></summary></entry><entry><title type="text">Beware Count()</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2010/09/beware-count/'/><published>Tue, 21 Sep 2010 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:9b24a930-442e-5c1d-e9f6-d2b58d64dd0d</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Something I’ve seen at various times is:
if (enumerable.Count() &amp;gt; 0) { ... do stuff ... } I’ve always preferred using:
if (enumerable.Any()) { ... do stuff ... } Mostly because it reads better, but partly because I felt it was bound to be more efficient. I’m not sure if I actually confirmed that before but after seeing one today I checked on it.
This is the implementation of Count():<br/></div></summary></entry><entry><title type="text">How web video powers global innovation</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2010/09/how-web-video-powers-global-innovation/'/><published>Fri, 17 Sep 2010 00:00:00 UTC</published><updated>Mon, 28 Dec 2020 11:55:46 UTC</updated><id>urn:uuid:91463cdf-7994-5d8f-e9df-da50f1509d64</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><br/><a href="https://gshutler.com/2010/09/how-web-video-powers-global-innovation/">[read more]</a></div></summary></entry><entry><title type="text">How I feel about the .NET world lately</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2010/08/how-i-feel-about-dot-net/'/><published>Thu, 12 Aug 2010 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:13dd858e-5d22-5abe-39aa-5d30dd97e561</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Great article by Davy Brion which echoes the feelings I’ve been having around .NET for a while:
They (Microsoft) provide architectural and design guidance for everything from your database to your business layer to your service layer all the way to your presentation layer. Unfortunately, a lot of that guidance is of a terribly low quality. Follow their guidance and odds are pretty high that either your database implementation details are leaking through all the way to your screens, or that a lot of your business details are taken care of in the database.<br/></div></summary></entry><entry><title type="text">Simple parts combined simply</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2010/08/simple-parts-combined-simply/'/><published>Mon, 09 Aug 2010 00:00:00 UTC</published><updated>Sun, 27 Dec 2020 14:12:06 UTC</updated><id>urn:uuid:094c41cc-2bc1-58b2-992b-e73dc462fe26</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
I’ve been on a refactoring mission for what feels like an eternity. The motivation for which is to pay off a significant portion of our technical debt. However, throughout the whole process I keep being reminded of how I believe systems should be written. Namely, simple parts brought together simply.
The problem is that this normally stops at the code level. So while you’re happily abiding by the SOLID principles, your creating a massive code base with little overall cohesion.<br/></div></summary></entry><entry><title type="text">Describing the journey</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2010/03/describing-the-journey/'/><published>Sun, 21 Mar 2010 00:00:00 UTC</published><updated>Wed, 30 Dec 2020 21:23:27 UTC</updated><id>urn:uuid:c3352500-7baf-57db-e9fc-67691106ac11</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Often when explaining something it’s easy to straight to the end goal saying: “This is how to do it. Isn’t it awesome?!” At this point you will get a blank stare and quite possibly a “why?” This can be frustrating, you’re showing something that’s an order of magnitude better than the current solution but they can’t see it.
This isn’t their problem. They aren’t idiots. It’s your fault.
In order to understand a solution you have to understand each step that was taken in order to reach it.<br/></div></summary></entry><entry><title type="text">Test-driven development - 3 years on</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2010/01/test-driven-development-3-years-on/'/><published>Mon, 25 Jan 2010 00:00:00 UTC</published><updated>Wed, 30 Dec 2020 21:27:00 UTC</updated><id>urn:uuid:e219f177-ea27-53ba-a9a6-99b345a8c479</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
I’ve been questioning my own practices recently, seeing if there were places that I could improve, both in quality and productivity. Part of this process involved an evaluation of my test-driven approach (TDD) to developing software.
I have gained and learnt so much by practicing TDD. I believe there is no better way to instil the SOLID principle within both yourself and your code than to practice TDD. Violate any of the principles and you feel the pain in your tests, they will either become monolithic and hard to write or continuously break.<br/></div></summary></entry><entry><title type="text">BDD from scratch – Build your own framework</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2009/09/bdd-from-scratch-build-your-own-framework/'/><published>Sun, 06 Sep 2009 00:00:00 UTC</published><updated>Mon, 14 Aug 2023 20:44:49 UTC</updated><id>urn:uuid:f75f039b-5c1d-50cc-e9cd-fd7fbf844c53</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Behavior-Driven Development (BDD) is a higher level of unit testing, it creates better documentation of your system by recording its intent which makes your system easier to learn for new developers and relearn for when you revisit your code further down the line.
I’m going to show you how to build your own BDD testing framework on top of a vanilla unit testing framework. For my example I’m going to use NUnit but I’ve applied the same principles with MbUnit, xUnit, and it should work with any other unit testing framework too.<br/></div></summary></entry><entry><title type="text">Nott Tuesday – July 14th</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2009/06/nott-tuesday-july-14th/'/><published>Thu, 25 Jun 2009 00:00:00 UTC</published><updated>Wed, 30 Dec 2020 21:38:37 UTC</updated><id>urn:uuid:0ead78ce-2887-55df-5908-2f403a8c5795</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Though most the original links from this post are now dead, this records the time I met Adam, my co-founder and CEO of Cronofy so I&amp;rsquo;m keeping it for posterity!
So I went to Nott Tuesday for the first time last month and really enjoyed it. Adam Bird, the guy who started it up seemed keen to move towards group discussion rather than one or two people presenting to the group.<br/></div></summary></entry><entry><title type="text">Establishing team values</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2009/05/establishing-team-values/'/><published>Fri, 15 May 2009 00:00:00 UTC</published><updated>Wed, 30 Dec 2020 21:47:56 UTC</updated><id>urn:uuid:5c7e470d-d8db-567b-3937-381956f94ae9</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
One of the biggest things I took from the Progressive .NET tutorials was the idea of establishing a set of values for your team.
This was raised in David Laribee’s session Towards A New Architect where he asked whose team had a set of common values. In a room of 30 or so people, I think 3 or 4 raised their hand.
As soon as it was mentioned it made sense to me.<br/></div></summary></entry><entry><title type="text">When geek rockstars go wild!</title><category term="blog"/><link rel='alternate' type='type/html' href='https://gshutler.com/2009/05/when-geek-rockstars-go-wild/'/><published>Thu, 14 May 2009 00:00:00 UTC</published><updated>Wed, 30 Dec 2020 21:55:30 UTC</updated><id>urn:uuid:136b450f-82eb-5ba3-c93d-ad2541322e9d</id><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
Ok, a silly one but I’ve got to share this. When walking to the hotel on Sunday before Progressive .NET I saw this in the middle of the pavement:
I’m guessing someone broke the build and this is what happened to their monitor!<br/><a href="https://gshutler.com/2009/05/when-geek-rockstars-go-wild/">[read more]</a></div></summary></entry></feed>