About Incremental Design and Development in Software Engineering

This is the story of Stanley, a former Uber software engineer, who takes us to the re-engineering journey rewriting the entire Uber app from Objective-c to Swift.

Nope, this is not Swift code 😉

I relate deeply to his story because I am really not a big fan of changing a language or a system that works. People tend to put it all on the language or on the original design and want to rewrite it all, forgetting that some choices that were made are good.

I have seen engineers pushing rewriting just because of the buzz of a new language (Functional Programming for example). That’s not the right approach. I believe we should first try to fix thing incrementally and in the lightest possible way, and if not possible, try to understand why.

We need two kinds of tooling for Incremental Design and Development.

  • Preventive Tooling: i.e. design tactics and strategies, methodologies that will help you to design new things right. DDD is one of those.
  • Curative Tooling: i.e. code analyzers, transpilers, and such that will help you to understand what can be done to fix a design issue (for example, get rid of an outdated library or API). You can achieve this with JSweet for example.