Programming Tutorials

Practical programming tutorials with clear examples and best practices for Python, C++, JavaScript and more. Learn design, testing and performance.

Postmortems That Actually Change Something

A postmortem is easy to hold and hard to make useful. The meeting happens, a document is written, four action items are recorded, and six months later the same failure occurs and somebody finds the old document while searching for something else. The word “blameless” gets most of the attention in discussions of this,...

Software Escrow: Who Actually Needs It

Software escrow exists to answer a reasonable fear: the supplier who built and runs your critical system goes out of business, and you are left with something you depend on and cannot maintain. An escrow agreement puts the source code with a third party who releases it to you if that happens. The fear is legitimate....

Fixed Price Contract or Time and Materials?

The choice between a fixed price contract and time and materials is usually framed as a choice about risk, which is correct, and then immediately mishandled, because both sides assume the risk goes away rather than moving. It does not go away. In a fixed price arrangement the supplier carries the risk of the estimate...

API Versioning: When to Break and How Not To

API versioning arguments usually start at the wrong end, with where the version number goes. That is the least consequential decision in the whole subject. What matters is which changes require a new version at all, and most teams get that wrong in the direction of complacency: they ship something they believe is...

How to Write a Software RFP That Gets Useful Quotes

A software RFP is supposed to make suppliers comparable. Most achieve the opposite, because they specify a solution in enough detail to constrain the answer while leaving out the information anybody would need to price it. The result is five quotes spanning an order of magnitude, all technically responsive, none of...

Software Maintenance Cost: What Nobody Budgets For

Software maintenance cost is the number that turns a successful project into a difficult conversation eighteen months later. The build was budgeted, approved and delivered. What happens after it goes live was described as “support” and given a figure somebody guessed at, and that figure was almost always too small. The...

Technical Due Diligence: What Buyers Actually Look For

Technical due diligence is not a code quality competition, and teams preparing for one usually spend their time on the wrong thing. Nobody buying a company is grading your abstractions. They are trying to work out what it will cost to own this system, and how badly it can go wrong after the money changes hands. That...

Database Performance: Finding the Query That Is Killing You

Database performance work usually begins with someone proposing a bigger instance, and it usually ends with the discovery that one query was doing a sequential scan over four million rows on every page load. The hardware was never the constraint. The plan was. That pattern is consistent enough to be worth stating as a...