« Simulated Annealing

Learning to build better software from maps

Applying cartographic concepts to tech

Recently, I’ve been learning about mapmaking during the lockdown. I started these studies as a form of escapism, one that lets me imagine and explore huge regions of outside while being stuck inside.

As I’ve been studying, I noticed similarities between the fundamentals of modern cartography and software engineering. Maybe it’s not so surprising given how both practices have a common underlying approach – transforming complex data using a rigorous, analytical methodology into a form that is easy to interact with and understand.

Cartography by Kenneth Field gives an overview of important concepts in the field. In the introduction, Field establishes his cartographic principles:

  1. Do it right. There’s rarely a shortcut.
  2. When in doubt, follow what’s gone before. Best practice has been developed by many people over many decades and serves you well.
  3. Always go beyond the default. Defaults are inevitable and can be a good starting point but knowing something of cartography helps you adapt them to your needs.
  4. Quality trumps quantity. People like maps but they are drawn to great maps. Quality attracts, inspires, sells, and invites a second look.
  5. Study great maps. Learn from these maps held in high esteem so you can appreciate the value of them and why they work so well.
  6. Give and take critique. Learning how to assess cartographic quality helps you recognise greatness and do more of it. Learn to accept constructive criticism. It’s vital.
  7. Break the rules when necessary. If you know the rules, you’ll know when you can break them, by how much, and to what effect.
  8. Recognise cartographic lineage. Not much is genuinely new. That’s OK. Learn from it, use it, and cite it without trying to claim it.
  9. Accept that the map is rarely finished. You have to learn when you’re done. There will always be tweaks but the old adage of 90% taking 10% of the time and the last 10% taking 90% of the time is often true.
  10. Own your work. Put your name on it. Share it and get eyes on it. Build a portfolio.
  11. Take it to 11. Making maps can make you incredibly frustrated at times but put your heart into yout work and learn to enjoy the ride. The end result is worth it.

cartography_book Not so much a traditional textbook as a “nonlinear journey” across various mapmaking subjects and topics.


Field’s principles of cartography can be converted almost directly into principles for good software engineering. I’ve adapted them with only minor adjustments:

  1. Do it right. There’s rarely a shortcut.
  2. When in doubt, follow what’s gone before. Battle-tested libraries and paradigms help avoid buggy software and costly rewrites.
  3. Always go beyond the default. Excellence in software engineering means executing at a high level across UX, stability, and performance.
  4. Quality trumps quantity. People like new features but will return to software that does the core job well.
  5. Study great software. Learn from products and tools that are valued by engineering peers and the larger community to understand why they work so well.
  6. Give and take critique. Code quality and code reviews are integral parts of the software development process. Learn to give and accept constructive criticism.
  7. Break the rules when necessary. If you know the rules, you’ll know when you can break them, by how much, and to what effect. Real-world software development is about making constant tradeoffs given limited time and resources.
  8. Recognise software lineage. Not much is genuinely new. Knowing historical developments in software languages and patterns means you can understand and utilize them more effectively.
  9. Accept that the software is rarely finished. There is always room to make the software easier to use, more reliable, and more performant.
  10. Own your work. Put your name on it. Share it and get eyes on it. Build a portfolio of products and tools you’ve created.
  11. Take it to 11. Making software can be incredibly frustrating at times, but put your heart into your work and learn to enjoy the ride.

A coworker helped put the time scale of software development into perspective for me. Humans have been constructing buildings and houses for millenia, and we have collectively established a wealth of knowledge around architectural and civil engineering best practices. In contrast, we have only been building software for a few decades. While the knowledge base have progressed leaps and bounds in that time, we may be barely scratching the surface at our understanding on how to build good software.

The craft of software engineering can learn a lot from other practices that stretch back thousands of years into humanity’s past. The development of cartography may be even older than our ability to construct buildings, with the earliest known maps and map-like representations materializing in cave paintings and rock carvings. Now, modern cartographic techniques themselves are deeply incorporating software, with the creation of Google Maps and other digital mapping tools. As we continue to expand software engineering knowledge, the fundamentals of cartography can help us formulate and confirm ways to build better and better software.


This article was last updated on 10/18/2020. v1 is 842 words and took 1.5 hours to write and edit.