Thurs Mar 26 2026 was a significant milestone on my quest to liberate my team from the tyranny of my client’s enterprise deployment pipeline: we successfully deployed a service to production using my Shadow Pipeline (see my previous posts: here and here ). 
 
 Background : My client’s enterprise deployment pipeline is slow, clunky, and unreliable. Deployments take at least an…
My client is looking to hire senior backend developers with good written and verbal communication skills that can be in the office 2-3 days per week. 
 They’re also undergoing a “strategic workforce reshaping with global delivery partners” which means they’re hiring low-cost developers from the large outsourcing companies: Cognizant, CGI, Accenture, and Tata. I’m…
TL;DR My client is paying top dollar for enterprise licenses for a platform that their own policies prevent people from using. 
 My enterprise client has a few open roles for developers so we’ve been asked to interview candidates. After the first batch of resumes we decided that we needed to do some pre-screening because the agencies certainly were not. 
 I reached out to the…
In my recent post about CI/CD performance , I mentioned that I’d built a shadow pipeline in Ansible to deploy to our on-prem dev environment. Since then, I have been campaigning to use those Ansible playbooks for our pre-Prod and Prod deployments too. 
 I secured approvals to do a proof-of-concept deployment to pre-Prod using the Ansible playbooks but it failed dismally because our…
My current client has an enterprise CI/CD pipeline that is maintained by a centralized team that does not use it. Its product owner(s) do not rely on its output for their revenue. They are not measured on its performance or reliability. 
 And yet we are obligated to use this pipeline. There’s no other option. We were also handed a microservices architecture from the Architecture team so…
Payments Canada published an opinion piece outlining how they think ISO fits into the payments ecosystem. 
 
 
 
 Quote 
 Implication 
 
 
 
 
 That message is received by the creditor and immediately dissolved and dispersed into the internal data models 
 ISO should be used at the system boundaries; not as your internal data model 
 
 
 The…
ISO 20022 defines a catalog of messages to standardize data exchange in the finance industry, and it is gaining popularity in Payments. 
 Here in Canada, Interac updated their APIs to support ISO 20022 several years ago. FedWire in the US will be rolling out ISO 20022 support in summer 2025, and Zelle is following suit with its integration to The Clearing House’s Real-Time Payments…
I wrote about DRY configs many years ago but astonishingly my clients don’t seem to read my blog. I mean, who even has a blog these days anyway? 
 Externalized application configs have a way of multiplying like rabbits to the point where people become afraid to touch them at all, let alone apply the DRY principle to them. The proliferation of poorly-designed configuration files in…
I recently had to return an item that I’d bought online. It’s free to return the item in-person to one of their retail locations, or $10 to ship it back. There was a store nearby so I elected to do an in-person return but the experience shows what can happen when software and processes are developed without involving the user. 
 The store clerk was friendly and helpful. He asked…

 Only by increasing flow through the constraint can overall throughput be increased – Eliyahu M. Goldratt, The Goal, 1984 
 
 Turning this around we get the corollory that optimizations made to areas other than the constraint only serve to worsen the constraint. 
 Agile practices, and particularly Scrum and SAFe , have been widely adopted in large enterprises over the last…

 Plans are worthless, but planning is everything – Dwight D. Eisenhower 
 
 The value of a process is primarily derived from the process itself, not the output. 
 Producing a slide deck or document on a topic requires hours of thought, multiple drafts and revisions, wordsmithing, and lots of research. 
 This iterative process helps to clarify your thinking around a…
If your sign needs a sign explaining the sign then it’s a poorly-designed sign. 
 Let me present a few examples. I’ll start with the intersection at Bloor and Parkside in Toronto shown below. 
 
 There are four lights in this image: one for the through traffic, one for the cyclists, and two for the right-turn traffic. Both the bicycle signal and the right-turn signal have…
Non-Functional Requirements (NFRs) are used extensively in enterprise software to define things like performance requirements and availability expectations but it’s important to be specific about what we’re asking for. 
 I spend a lot of time with my clients helping them understand why the details matter for NFRs so let’s walk through an example to demonstrate what I’m…
I’m currently working with a large retail banking client to help them modernize their payments infrastructure. The word “modernize” is used in just about every client interaction. It appears in all the slide decks. It’s part of the business case justification. 
 But modernization is a relative term. 
 The big question is: What does the client mean by modernization?…
A moral hazard is when an.. 
 
 …actor has an incentive to increase its exposure to risk because it does not bear the full costs of that risk. 
 
 It’s similar to perverse incentives . 
 
 A perverse incentive is an incentive that has an unintended and undesirable result that is contrary to the intentions of its designers. 
 
 I have spent the last 6…
QA organisations have come a long way in the last decade or two. In the early 2000s, automated unit testing was just gaining popularity and QA was performed manually by armies of testers. The QA process was time-consuming and arduous, and the testing timelines were the first thing to be compressed when development took longer than planned (as it almost always did). 
 By the 2010s, many…
What is it like to work at your company? Think about it carefully. How do your people spend their time? What culture and behaviours do you incentivize? Is it a good place to work? 
 Culture in this context describes how people interact at work, the processes and policies, productivity friction, meeting efficiency, et cetera. Your company’s culture describes what it is like to work for…
I’m working for a client that has separate teams for architecture and engineering. Architecture is responsible for defining the long-term direction of the platform and engineering is responsible making that dream a reality, in addition to their day-to-day sprint work. Each engineering pod has a representative from architecture as one of its members but their role is mostly about producing…
Before COVID-19 and ubiquitous work-from-home, we used to have meetings in a room where people would sit around and discuss the matter at hand. The start time had some flexibility because people had to physically move from one location to another, often between floors or buildings. Whiteboards helped focus the conversation. People could interject organically without having to raise a hand like in…
The backend-for-frontend (BFF) pattern is when a backend API is designed specifically for the needs of a frontend consumer. The BFF is intended to make frontend development simple, moving all the complexity and “business logic” to the backend and allowing the frontend to deal with a single backend. The backend BFF API closely resembles the flows and screen designs of the frontend.…
Consider the following statement: 
 
 Our consultancy operates on a 50% margin. 
 
 Margin is how much extra the consultancy charges on top of their costs to cover the consultancy’s costs, operating expenses, and profits. Most consultancies have a minimum margin that they’ll consider acceptable when bidding on work. 
 But the details matter when it comes to…
Documentation is one of the most valuable artifacts of any technology project or platform. It provides context to new joiners, avoids duplicating responses via Slack/Teams, and facilitates asynchronous communication, but it also requires constant care and feeding. 
 
 Confluence is where documentation goes to die 
– Unknown 
 
 Most of the large enterprises that…
New technologies generate a lot of noise as they work their way through the hype cycle and it’s hard for newcomers to figure out what they should learn. Only a small number of these new technologies will survive the test of time, most will be forgotton, but the FOMO is real. 
 While there’s value in the process of learning the new hotness, I think you’ll see a higher lifetime…
One thing that development teams constantly struggle with is striking a balance between building features, fixing bugs, paying down tech debt, and embarking on more ambitious activities like replacing core components in their architecture. It’s also something that Agile tries to solve but I’ve never seen it solved to everyone’s satisfaction. 
 And I think it’s because…
Software should do one thing, and do it well. Each piece of software should have a clearly-stated goal that is used to determine whether a particular feature should be implemented or not. When a proposed feature does not fit with the software’s stated goal then don’t implemented it. Just don’t. 
 Like adding source control to your product. We already have several perfectly…
I’ve been working on re-platforming the online banking system for a Canadian retail bank for over two years. Leading up to the initial launch, The Business decided to defer a few features to the next release which was scheduled for about a month later. We created a release branch to support defect fixes found in testing, and the development team continued adding features to the develop…
Remember the Great Equifax Hack back in Sept 2017? Equifax came under a lot of fire for the way they handled the breach and one of their mistakes was using the custom domain equifaxsecurity2017.com for “customers” to check whether their personal information had been compromised. Shortly after the breach, several other lookalike domains were registered including securityequifax2017.com…

 A trucker delivering palletized cargo to a pier would have to remove each item from the pallet
and place it on the dock. Longshoreman would then replace the items on the pallet for lowering
into the hold, where other longshoreman would break down the pallet once more and stow each individual
item - all at a cost so high that shippers knew not to send pallets to begin with.…
I’m currently reading The Box by Marc Levinson. It is a fascinating book that chronicles the changes in the shipping industry brought about through the introduction of shipping containers. It sounds dry, but it’s not. The innovators faced huge barriers, including governments, labour unions, and standards committees. I have such deep respect for Malcom McLean for persisting through the…
When I first heard about the so-called UK Challenger Banks like Monzo and Atom , I was amazed that there wasn’t a similar offering in Canada. The Canadian retail banking sector desperately needs new players bring compelling products to the market but nobody was doing it. There are some options like PC Financial and Tangerine but they’re both backed by one of the Big Banks (CIBC and…
Michael Feathers says that legacy code is any code without tests but I’d go a step further and say that legacy code is any code that is still running even though the original developer(s) are no longer working on it. And there is certainly plenty of that in financial institutions. There are other characteristics too, such as: 
 
 unreproducible production environment 
 incomplete…
The Pragmatic Programmer is one of the most influential books that I have read as a software developer. It is right up there with Software Craftsmanship and Clean Code. Andy Hunt recently gave an interview that was peppered with several poignent quotes that struck a chord with me. 
 
 You need to understand how to work with other people, both with teammates and with those pesky users 
…
Your email address identifies you in this online world. Companies use it to verify who you are, to communicate with you and for resetting passwords. You may also use the same email address to correspond with your friends and family, and it may even be linked to your calendar too. 
 It makes sense to separate your personal email from your work email - you don’t send personal emails from…
This is a continuation of my post about clean tea , except this time I analysed the offerings from Tealyra . 
 Tealyra by the numbers: 
 
 490 teas (excluding kits and samplers) 
 175 contain sugar and/or flavourings 
 187 caffeine-free 
 
 So I filtered the list to only show teas with: 
 
 No caffeine 
 No sugar 
 No stevia 
 No flavourings 
…
I recently had an unexpectedly great support experience from a company that one does not usually associate with excellent customer support: Microsoft. 
 I had been running Windows 10 as a VirtualBox VM on my Linux laptop for quite some time. I needed Windows for a few things like my accounting software (Quickbooks) and remote access to the office but the setup wasn’t working as cleanly…
This is a continuation of my post about clean tea , except this time I analysed the offerings from Teavana® (a Starbucks company). 
 Teavana® by the numbers: 
 
 101 teas (excluding kits and samplers) 
 70 contain sugar and/or flavourings 
 31 caffeine-free 
 4 had no ingredients listed 
 
 So I filtered the list to only show teas with: 
 
 No caffeine 
…
I recently weaned myself off coffee. My daily intake levels were well above normal levels, as was my tolerance. The only thing it was doing for me was preventing me from getting a good night’s sleep. So I decided to quit. I spent two weeks cutting back, and then went cold turkey over the Labour Day weekend. 
 I’m now sleeping much better, and no longer need that morning jolt to get…
This is a quick cheat sheet taken from a great little book called “The 22 Immutable Laws of Marketing” by Al Ries & Jack Trout. I highly recommend this book for anyone interested in marketing … even developers! 
 The Law of Leadership 
It’s better to be first than it is to be better. 
 The Law of the Category 
If you can’t be first in a category, set…
Configuring Hubot to work with a self-hosted HipChat server took a bit of tweaking, so here’s a quickstart guide based on what I discovered along the way. 
 First of all, follow Atlassian’s guide to create a copy of Hubot. This will download the source code including the HipChat adapter. 
 $ npm install -g yo generator-hubot
$ mkdir myhubot
$ cd myhubot
$ yo hubot…

 Me: Why is this report different to the one in production?
SysAdmin: Dunno. I guess they must have fixed it production and forgot to check it back into source control. 
 
 If I had a dollar for every time I’ve had that conversation I’d be a rich man. It is usually the result of some late-night troubleshooting and finally the system is working as expected and everyone…
There’s nothing that beats the feeling of being part of an exceptional team and yet it is strangely difficult to define exactly what makes one team great and another team not-so-great. Google recently set out to learn how to build the perfect team and came up with some interesting, albeit previously discovered, answers. 
 To summarize their findings, Google’s Project Aristotle…
I’ve been pushing large enterprises to adopt agile development practices for years so I was very excited when I began seeing many of them embarking upon ambitious Agile Transformation projects where they attempt to not only change the way they build software, but completely revolutionise the entire IT process from inception, finance, HR, delivery and operations. 
 But they rarely discuss…
Agile has gained a lot of traction in large enterprises in recent years but I’m concerned about the specifics of how teams are implementing it. I’ve seen everything from traditional eXtreme Programming (XP) practices to Scrum, but nothing scares me more than the teams that self-identify as “agile” but do nothing more than hold a daily team meeting. 
 Agile means…
I have used automated build tools on all my projects since 2000. Back then it was CruiseControl in all its XML-configuration glory. Today it is usually Jenkins , or sometimes TeamCity , and I recently tried out ThoughtWorks Go . The user interfaces have generally improved over time, and now there is probably a “plugin for that” thing you used to script manually, but overall not much…
Externalizing application configuration values into a properties file is a common pattern in enterprise applications, because it gets the environment-specific settings out of the code and avoids the need for environment-specific builds. Being able to deploy the same binary to multiple environments (Dev, QA, UAT, Production) is a Good Thing. 
 I came across an interesting quirk in an…
The question of location comes up a lot in software consulting. Will the work be done on the client’s premises, or the consultant’s? There’s no right answer. Some clients don’t have the office space to accommodate an entire development team. Others already have a large IT department and want the consultancy’s team co-located with their existing staff. 
 Working at…
A thread appeared on Hacker News recently about how successful people operate. The comment below really struck a chord with me. 
 
 
 Don’t waste time. 
 Be mission/vision focused. 
 Be polite to everyone always. 
 Be helpful whenever possible. 
 Be insanely organized. 
 Seek and respond to constructive feedback on your work. 
 Do the shit work without…
I’ve been using DVCSs for more than four years and I love them. Both Git and Mercurial are excellent source control tools, each with their strong points and their warts. The biggest difference between the two is the learning curve. I was very comfortable with Mercurial after only a few weeks and the same has held true wherever I’ve introduced it. 
 It took me about six months to…
I came across an interesting problem recently in some JDBC code that was inserting rows into a Netezza database. 
 The Java code was doing something like this: 
 Statement stmt ...
for( SomeObject o : listOfObjects) {
	String sql = "INSERT INTO tbl(col1, col2) values (?,?)";
	...
	stmt.addBatch(sql);
}
stmt.executeBatch();
 
 On the…
A bi-temporal data model is a fancy way of saying that all tables have 2 pairs of dates: business from/to, and audit from/to. The business dates track expected day-over-day changes in business data such as the varying quantities of widgets in stock. The audit dates are used to track when the data was loaded into the database, and any data fixes applied by IT. 
 In essence, every table contains…