Lucas' Laws of Project Management
A project's goal rarely has anything to do with implementing a list of features. It is usually about solving a problem for users, the business, or both. The original specification is a guess about...
Hot takes and cold truths on software, startups, and the lies we tell ourselves.
A project's goal rarely has anything to do with implementing a list of features. It is usually about solving a problem for users, the business, or both. The original specification is a guess about...
There are two obvious ways to use coding agents. Both are bad. The first is to let the LLM run unattended and hope the repository survives. This is fast, exciting, and stupid. It leads to bugs, conf...
Somewhere in your company's Google Drive, there's a design doc from six months ago. It describes a system that doesn't exist. It was outdated by the second sprint and abandoned by the third. Fourteen...
Every team must believe in improvement, even when it no longer happens. That’s what retrospectives are for. Most teams also use retrospectives for documenting problems that nobody has time to fix. T...
When it comes to writing, the #1 question I usually get asked is how do I get so many HN front pages with this blog. This week, another one of my projects got to the front page for the first time, a...
Do you remember your backlog ever shrinking? Of course you don't. Backlogs _never_ shrink. Backlogs never shrink because the list of things we'd _eventually_ like to do never shrinks, and that's wha...
The problem with Scrum is that it usually works. In tech, we hate that. What we like is to give talks, prepare slide decks, and, most importantly, to invent things ourselves. Just like creating your...
Why did you choose Scrum instead of Kanban? If you can't answer that question, you didn't choose Scrum. Someone else chose it for you. Even in the rare case people can answer this question, they rev...
Deadlines are the bane of every software engineer's existence. We've all been there: the project is "due" in two weeks, and we're nowhere near done. So we pull all-nighters, do poor testing, and cut ...
Here's my horoscope for today: > Things should improve for you as the day progresses, Taurus. You shouldn't depend on something that may not pan out the way you want. As you can see, it's useless, ...
> If you have played Ragnarok Online before, you might want to listen to this song while reading. I got into programming at the age of 14. At that time, my friends and I used to play an online MMORP...
Let me be clear: if they tell you it's a great idea but don't give you their credit card, they don't want it. To validate an idea, you need to sell it. To sell an idea, you should, ideally, show peo...
Welcome to Ultra Bikeshed Co. Please come in. Here, we know it feels _terrible_ when actual results get in the way of following processes. Instead of building a product and talking to customers, we ...
Large enterprises aren't slow because they're large. They're slow because whenever a decision needs to be made, information travels eight thousand layers of management up and then eight thousand laye...
Daily stand-ups are a classic example of learned helplessness. We all know they're useless, but we tell ourselves "that's just how things are" and do nothing about it. These days, we do stand-ups be...
Uncertainty is _not_ necessarily bad. It's not necessarily good either. Uncertainty simply exists, and it affects a product's economics, regardless of whether you choose to ignore it — as many produc...
In this post, I'll present a robust and disruptive Agile framework. It's called "talk to your customers" — or, in short, _TTYC_. Soon I'll be selling a 500-page book with enough diagrams to convince...
Let's be honest. When you read this post's title, you thought it was obvious. Yet, most people don't follow this simple piece of advice. You know that too, and that's probably what led you here. Wha...
Yearly software development plans are my favourite genre of fiction. In the fabulous world of yearly plans, product developers assume they know exactly what product they must build and how long each ...
This is Beigel Bake, in Brick Lane, London. Beigel Bake is notorious for its salt beef beigels and humongous queues. In this blog post, I'll use Beigel Bake to explain how capacity utilisation im...
Most technical people choose GUIs not because GUIs are the best tool for the job. People choose GUIs because the CLI alternatives usually suck. That's my hunch. In this blog post, I'll cover good U...
I spent 2020 writing a 500-pages book about JavaScript Testing. In this blog post, I'll explain my writing routine — or system, whatever you want to call it — and other seemingly unrelated habits th...
This blog post is about how to explain things in writing. You should learn to explain things in writing because it's the most efficient way of conveying an idea to a large, distributed audience. Whe...
There are many ways of estimating how long a software project will take. All of them are a waste of time. Some prefer to spend days analysing and planning their changes so that they can estimate mor...
In the past thousand sprints, you've been consistently delivering plenty of code. By now, your caffeine intake is on the thousands of milligrams, and you've forgotten whether your yellowish keycaps h...
Specifications work in two ways: they inform developers what needs to be built, and they constrain the problem space so that tasks become approachable. Without clear specifications, developers may b...
When writing JavaScript applications, you describe its dependencies using a `package.json` file. This file contains all of your applications direct dependencies and their versions. If you're buildin...
It's Monday. The first of the seven alarms you've set on your phone soars louder than the Big Ben. It sends chills down your spine announcing the impending doom: your 8 AM commute. You put on that wh...
Not delivering early and frequently makes writing software as difficult as writing books. Publishing books is hard because the feedback loop is long and slow. You can't validate a book unless you ha...
I love streams because I don't like software. I always try to build less software. Less software means you have to spend less time updating it, less time fixing it, and less time thinking about it. ...
> TL;DR: Here are my dotfiles. Use them and have fun. GUIs are bloatware. I've said it before. However, rather than just complaining about IDEs I'd like to provide an understandable guide to a much ...
This post aims to demystify bitwise operations in JavaScript, as they can be useful for a myriad of applications. They are also very useful, for example, when building emulators, an exercise I'd defi...
Counterintuitively, test-driven development is not about tests. Test-driven development is about being able to take gradual and small steps towards a solution. Taking small steps allows you to solve...
This is the second blog post in my series about Lambda Calculus. To make sure you'll have the necessary knowledge about Lambda Calculus' syntax you will probably want to read the first post in this s...
I often joke that graphical interfaces are bloatware. GUIs are, of course, very useful for a great variety of applications and plain-text is not always appropriate for every kind of information. How...
Even though lots of people nowadays advocate for applying functional programming principles to JavaScript, not many of them know the principles of Lambda Calculus and how it all started. Theory of c...
In this post, we will talk about one of the most beautiful ideas in computer science: the Y-Combinator. And no, I'm not talking about the VC firm in Silicon Valley, even though this post will explain...
I am not good with words. I feel tempted to say most people aren't. But as an engineer and because I know Akin's first law of spacecraft design: Engineering is done with numbers. Analysis witho...
Git's `bisect` command is one of those things you will wish you've known since you started using `git` at all. I don't use it that often, but whenever I do I ask myself how did I live without this f...
Complaining about JS Fatigue is just like complaining about the fact that humanity has created too many tools to solve the problems we have, from email to airplanes and spaceships. Last week I've ...
In this blog post I will prove you will never be able to write an algorithm that scales better than a pigeon and also teach you some basic concepts when it comes to Big O notation. Big O is often ...
Recently everyone seems to be really excited about functional programming and its concepts. However, many people don't talk about recursion and, especially, about proper tail calls, which is really...
Hi, everyone! The new Shared Memory proposal has reached stage 4 recently and I got really excited about it after reading a few blog posts on this subject, such as Dr. Axel's excellent post on his...
Hello, everyone! Recently I've been working a lot with Node and I felt the urgent need to write a blog post about how to write good API tests. In those tests, all I do is send a request to an insta...
Hi, friends! Sorry for taking too long to post something new, but I have come back from the UK recently, where I've had a great day with some friends at Voxxed Days Bristol. Recently, I have also ...
Hi, everyone! After a few weeks without writing about JavaScript, it's about time we talk about it again! This time we're going to talk about errors and stack traces and how to manipulate them. S...
Hi, everyone! As you may have noticed I'm really interested into Go and since I fell in love with this language I'd like to write about it more frequently. If you don't know Go yet I really think...
Hello, everyone! This week I'm a bit out of ideas for blog posts about programming, so I decided to write about vIM! I have already written a blog post teaching people how to get started with it, bu...
Hello, everyone! Today I'm gonna do something a little bit different from what I usually do. I'm not going to write about JavaScript, I'm going to write about Go! Recently I have been writing Go ...
Hi, friends! Today I'm going to write about assertions. I won't be talking about JavaScript, I'll be talking about assertions in general and this knowledge can be applied doesn't matter what lang...