List of article summaries
Building an AI generated game with Stable Diffusion and data from Wikipedia
Last week I released a game called Doodle:ai.
In the game you’re shown AI generated images and you have to guess the Wikipedia topic it used to create the game.
Easiest way to optimise images for web
Here is how I optimise all pngs and jpgs in a folder for publishing to the web.
Start tracking DORA metrics for your team in just 15 minutes with Apache Dev Lake
DORA (DevOps Research and Assessment) metrics are an excellent way for engineering organisations to measure and improve their performance.
Up until now, monitoring the DORA metrics across Github, Jira, Azure Devops etc required custom tooling or a tedious manual process.
With Apache Dev Lake you can get beautiful reporting for DORA metrics on your local machine in as little as 15 minutes (honestly!).
A summary of NDC Sydney 2022 Developer Conference
I attended my first in-person conference for more than 3 years last week! NDC is one of the more well-known developer conferences in Australia and New Zealand. It’s a 5 day conference with 3 days of talks and 2 days of workshops.
There’s so much to learn across all the streams so I try to take notes for each of the talks to quickly reference them later. This post contains all my notes. I’ll add the relevant videos to talks later if they’re released.
A reminder that these notes are just my notes. They’re paraphrased and summarised from what the speaker actually said. Each speakers would have provided must more clarity and went into more detail during their pressos!
4 Surprising uses for GitHub as a cloud datastore
GitHub is a great place to store code. But it’s also a great place to store any data that you need backed up, versioned, accessible from anywhere and easy to use.
In this post I’ll show you some surprising uses for GitHub as a datastore like…
- as a comments system for a website
- as an operating system configuration management tool
- as a datastore for personal data management
- as a software update delivery platform
- as a host for sharing any kind of raw file online
Obsidian - A free personal data management system on windows, mac and mobile
Obsidian is a free personal data management system based on markdown notes. Because it’s based on markdown it’s perfect for developers or other power users.
Obsidian has a healthy plugin ecosystem for extending the base functionality. There are plugins for mind mapping, kanban boards, importing amazon kindle highlights, daily notes and using git as a backend.
Obsidian has a powerful search engine that allows you to search for notes by their content, tags, and even the content of the notes they link to. This linking technology is what makes Obsidian so powerful.
How add comments to your Gatsby site with utterances
If you want to add comments to your blog quickly there is a nice tool called utterances that uses a GitHub Repo as the api.
Here is how I setup utterances for my gatsby blog in typescript.
Should you work for a consultancy or a product company?
I’ve recently crossed over 2 years in a software consultancy. Previously I spent around 10 years working in product companies.
As you can imagine there are some differences between them and I wanted to write down some of the things I’ve noticed.
PostgreSQL and typeorm - Caching
With most web applications you can drastically increase performance by using caching for data that’s frequently read across network boundaries. This lesson will explore some common caching techniques, you’ll learn how some common tools and libraries provide caching for us.
While caching helps with performance it can also cause some surprises and bugs in applications and i’ll discuss some of those too.
How to run Monica personal CRM on Dokku
I left my home country right after university and I worked and lived in a few countries since then. I’ve met lots of amazing people but I’ve always struggled to remember contact details and important dates for everyone.
Find 20% of missing site traffic with plausible analytics and some proxying
Google Analytics (GA) has been a force in web site metrics since 2005. The metrics have always been incredibly useful but it’s a “free” product so you pay for it by providing all your site data to Google for tracking and advertising.
With Google Analytics your metrics are tightly coupled with tracking and advertising so when ad-blockers kick in to block tracking they also block your metrics!
The good news is that this is all fixable!
Open Telemetry in NestJs (and React)
Open Telemetry is good enough to use in production projects now and most cloud providers and telemetry services have integrated open telemetry into their products.
PostgreSQL and typeorm - Relational data
PostgreSQL and typeorm - Tips, tricks and common issues
PostgreSQL and typeorm - A glossary for database administration
PostgreSQL and typeorm - Practical transactions
PostgreSQL and typeorm - Advanced Querying - (Aggregations, AND, OR, BETWEEN for Dates)
PostgreSQL and typeorm - Storing single table data
PostgreSQL and typeorm - Getting a local Postgres instance
PostgreSQL and typeorm - Intro to persistence
How engineers can help deliver software effectively
Delivery managers and team leads have the responsibility to deliver a software system via an engineering team.
Your customer wants every feature to work perfectly and they want it delivered yesterday. Your team wants to learn and grow.
It’s a tough role managing all the stakeholders and creators in a project.
Engineers can help drive great delivery by empathising with and supporting the delivery manager or leads in a project team.
Engineering systems for consistency and impact
Your most impactful engineering is done before you write any code.
It’s important to have some systems around how you approach problems to make sure you’re consistent every time.
These are some of the techniques I use to make sure I’m covering as many angles as possible when doing my pre-coding engineering.
How software engineers can avoid commoditisation
Engineers spend most of their learning time on technical implementation content. Things like new frameworks, languages or cloud platforms.
But turning solutions into code is a tiny part of what you do and it’s getting less valuable year by year.
As we’ve seen with “no-code” and tools like GitHub Copilot, the implementation part of our role is increasingly becoming commoditised.
You could generalise that the value an engineer brings to a team is their ability to analyse problems and synthesise context. The part of your role as an engineer that will never be replaced by “no-code” or AI is this high level cognition.
The true human aspect of being an engineer is working in a team and considering other people’s ideas, emotions and thoughts while solving these problems.
So shouldn’t you train these meta-cognition skills as much as you train the specific technologies?
Every engineer should spend time learning and applying general tools for thinking. These tools are applicable to almost all problems so the compounded payback on your invested time is huge.
Clearer thinking will amplify all the other skills you have and any frameworks or tools you learn will give you results for the rest of your career.
Like any skill, improving the way you think takes deliberate study and practice.
These are some of the tools and systems for thinking that I refer back to all the time.
20 questions for a valuable code review
I recently had an interesting discussion around the value of doing code reviews and the value of mandatory code reviews.
I think code reviews are extremely valuable and should be done by most organisations and teams.
A valuable code review will
- pass institutional knowledge around the org
- help all engineers grow their skills
- maintain quality in the face of all the other time pressures your team faces
But how do you keep a code review valuable?
10 Useful product-thinking lessons for engineers
Have you ever struggled to explain the business value of a piece of engineering? Like why a particular piece of tech debt needs to be paid down now?
Engineers can learn from the techniques and rigour that product management practice has created in the past few years to
- To show business value in their own engineering work where it’s not easy to articulate
- To empathise better with customers of the software their building
- To understand the business context you’re in
For example, how can you know that you’re building something useful for your customer? How can you convince others that you’re not ahead of your time with an engineering solution?
For engineers there are some product development lessons that will improve your empathy and communication with non-engineers in your org.
Minimum viable discovery and software estimation for engineering work
I recently had to estimate 6 months of work for a new product after just 2 hours of discovery. This is a short deadline for an accurate estimate and I felt uncomfortable providing a number.
I ultimately gave a gut feeling estimate for the work because that’s my job and we needed one by the next day. I did specify it was at least 20-30% wrong and highlighted the major risk I saw - a new third party integration that we had never integrated with before.
The whole scenario got me thinking about what works and doesn’t work for me when estimating larger pieces of work. Here are some of the thoughts, tips, tricks and learnings from 10 years of providing dodgy software estimates!
Which http status code to use for no search results found?
I was implementing a search REST API and was thinking about the no results status. There are a couple of options that are somewhat valid. There is no perfectly “right” answer and the discussion exposes care for API design, knowledge of http and care for developers who will be consuming the api.
10 RFP response signals to watch out for
When you’re reviewing RFP (Request for proposal) responses you make sure that the provider has met all your specified requirements. A provider missing a requirement on the proposal is a bad signal. Then you weigh the response details against each other and finally the price gets calculated and you choose.
But here are 10 specific signals outside of the standard stuff above that I look for.
Here are the things I noticed with some descriptions.
Refactoring conditionals to strategies (in .Net/C#)
I’m doing some work on a legacy code base and there are some common refactorings I do over and over. One of my favourite improvements is making long lists of conditionals easier to read and especially test.
I use the common refactor-to-strategies pattern from Martin Fowler to deal with these.
Deliver 30% more PRs to production by having developers own their own testing
Is testing “slow” in your team? Do tickets pile up in the “ready to test” column every sprint?
If you think that the testers on your team need to fix this you’re wrong!
In a cross-functional product development team balancing the cadence and handover between development and testing is often a pain point. Read on as to why this is team problem and it’s best resolved by getting developers to thoroughly test their own work.
Be careful of the JWT hype train
I’ve been researching using Node.js as a back end for a few months now and SO MANY Node.js articles, courses and project “starters” on GitHub suggest using JWT on your client facing API as a session token.
I think there’s way too much hype around it and people are using JWT because it’s shiny!