One of the little secrets of computer programming is that it is actually quite a bit of fun. You discover little intellectual puzzles to wrestle with and solve on your way to building something bigger. And then instead of throwing away the puzzle solution like Saturday’s completed Sudoku, you get to tuck it into your app and keep it around in your bag of tricks.

I have a couple recent examples that can give a flavor of these experiences.

The app I am working on, for a variety of reasons, occasionally needs to be able to take a census block…


By DMGualtieri — Own work, CC BY-SA 4.0

I have been trying for a while to come up with a way of organizing the most critical insights and intuitions I end up using when I construct new systems or analyze existing ones.

The “design pattern” community categorizes and enumerates 100’s of patterns but I have never found those collections especially useful. I never go looking for software pattern #217 to help me solve some problem or understand why a system I am looking at was built the way it was.

As I thought about it, the most useful intuitions are a small enough set that I have internalized…


I couldn’t resist commenting on this interview with Evernote’s CEO about the project to rewrite Evernote.

First, disclaimer. I managed the Microsoft OneNote dev team from 2003 on for about a decade and am still a huge fan with much of my life recorded in OneNote. I’ve also written about OneNote internals in a number of posts and am friends with many on the team.

The interview referenced above describes the Evernote code base as a “monolith” that had grown “big and complex” and a “crufty, complex relic of a once-great app”.

I read those quotes through a couple different…


There have been a number of interesting and thoughtful retrospectives on the 10th anniversary of the iPad’s announcement. Steven Sinofsky used a Twitter thread (gathered into this post) to talk about the Windows team response to the iPad announcement. John Gruber, Jean-Louis Gassée and Ben Thompson also had interesting takes. Those last posts express disappointment, especially with recent attempts to expose a (rather unintuitive) multi-window, multi-tasking user interface on the iPad.

I thought I’d reflect a bit on my experience from the Microsoft Office side. I had been running development in Office for about four years and was working on…


I’ve stayed away from politics in this blog but was struck by a recent editorial by Thomas Friedman in the New York Times that is relevant to any organization. The key passage was:

When administrations are not constantly forced to answer hard questions from the outside about what they’re thinking strategically and morally — when questioners are dismissed as unpatriotic — that administrations’ inside thinking gets sloppy, their intelligence gets manipulated and trouble follows.

Never assume that people who are in charge know what they are doing just because they are in charge.

In my Vista post, as I discussed…


I’ve been looking for a reason to use the above quote in a blog title. It is apocryphally associated with Albert Einstein although there seems to be no actual valid citation. In any case…

I really enjoyed this post by LucidChart engineering on some recent troubles they encountered when enabling HTTP/2 on their service. The problems they ran into were basically “everything happening at once” which is one kind of problem you can run into in building asynchronous systems. …


A friend passed on a reference to Falcor, a JavaScript framework that manages data exchange between a client application and a backend server. It was open-sourced by Netflix and is in current use as a core part of their client applications.

He passed it along because he knew my interest (or more likely skepticism) would be piqued by their “One Model Everywhere” claim that

“You code the same way no matter where the data is, whether in memory on the client or over the network on the server.

One of the deepest principles I reinforced with any developer I worked…


There is a famous long-running discussion in software engineering that goes under the title “Worse is Better”. I’ve never gotten my two cents in, so I thought I’d talk about it a bit here. This is also an opportunity to try to apply the perspective from my experience with software development at Microsoft.

This discussion was first framed by Richard Gabriel. He characterized the two different approaches as the “MIT” vs. the “New Jersey” approach. These labels came from the approach taken by the Common Lisp and Scheme groups out of MIT and the contrasting Unix approach coming out of…


It’s always interesting to try to debug a software problem you run into in daily life and see whether you can figure out the root cause. I recently ran into a problem with insurance coverage (who hasn’t?) that seemed to arise from a pretty classic software design issue. I think the example gives insight into how easily things can get complicated when software models the real world.

If you studied computer science in school, one thing that might not have appeared obvious as you first learned about sorted arrays or binary search trees, hash tables or any other interesting data…


The recent issues with the quality of Windows releases has reopened discussions of what it means to deliver “Windows as a Service”. When Windows 10 was released, Microsoft made a big deal that this was “the last version of Windows”. From now on, Windows would be delivered as a series of continuous ongoing incremental feature releases rather than as a big bang release every 3 years or so.

Peter Bright’s article on Arstechnica that I linked to above tries to debug what is going on with Windows. The point he makes in the article is that the problem is not…

Terry Crowley

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store