Category: Uncategorized

A couple of months ago, I started work on a new project – it’s big and complex, with a lot of smart and opinionated people involved, an enormous amount of “legacy” code (mostly C++), and tools and systems that are sorely in need of an update.

In situations like this it’s always really tempting to start over with a completely clean slate, using modern tools and programming techniques. In truth there’s still enormous value in all that legacy code, and throwing it out would be a terrible idea. This is almost always the case in situations like this. Instead the trick is to figure out how to preserve as much of that legacy value as possible, while also unburdening the team and the product from the worst parts of the legacy tool-chain. Evolution, not revolution.

User data needs to be preserved, as does the way it’s used by the system. Systems built on that data need to continue to function. Performance characteristics need to improve, or at least not degrade. A space needs to be carved out where we can safely build new features. But we don’t have to build any new features using those legacy tools – new stuff can exist in parallel or “on top of” the old. We might need to create new interfaces in old code so that the new system can leverage existing functionality, and we might even need to refactor some old code to make that possible. What we shouldn’t do is boil the ocean.

The transition ahead isn’t dissimilar to some of the transitions Apple has made over the last couple of decades, the most significant being the shift from the old “Classic” MacOS to the current POSIX system which came from the Unix/Linux universe, and the Cocoa UI framework which came from NeXT. It took careful management and an iterative approach over more than a decade, but Apple was able to (nearly) completely replace their base OS, UI framework/runtime, and primary programming languages on way to transitioning to the universe we now live in with billions of people using iPhones and iPads every day, running the same base system that Apple’s desktop machines use. They were able to do this while bringing the most important developers along into the new universe (though not without casualties), for the very reason that they chose to iterate in a long-term way instead of starting again from scratch.

While I was working at Microsoft, the company tried to make a similar transition from the legacy OS and programming model, to a new one that was centered the then new WinRT API and the Metro design language. They thought they had to do this in order for their ARM-based Surface devices to successfully compete against iPad. The shift to relatively inexpensive tablets and mobile devices was perceived by some as an existential threat, and the response was partly reactionary. Microsoft failed badly, at least initially, to drive the transition it intended, in no small part because they couldn’t bring their developer community along. Too much changed too fast, and a clear path to the new ecosystem wasn’t communicated clearly enough. The new APIs weren’t compatible, and yet at least on some devices, the old APIs were no longer alowed. By playing catch-up instead of playing their own version of the iteration game, Microsoft alienated many developers who quickly jumped-ship to the Web and to the iOS and Android ecosystems.

Steven Sinofsky was the head of Windows during the second half of my time at Microsoft, and is now at Andreessen Horowitz. Last week he posted a long thread on Twitter about some of the changes Apple is now considering, and naïve criticism of their approach in recent years.

That’s what got me thinking about this post, and I think it’s well-worth a read:

 

Uncategorized

Someone was asking at work earlier about what computers people had owned or programmed on. I don’t think I’d ever made a list before, so I decided to make one. This list includes computers I’ve programmed on outside of a professional capacity, or owned personally.

There are lots more machines I’ve used to greater or lesser extents in my professional life. The ones listed here are the machines I feel a personal connection with. (Yeah, I just said that I have a personal connection with some computers.)

Here’s what I came up with roughly in chronological order:

[Edit: Added links]

 

Uncategorized

I’ve said this in a few other places:

There are potentially important conflicts of interest in Microsoft now owning LinkedIn. A few examples:

  • Microsoft will gain visibility into private profiles and hidden information in public profiles, job listings, applications, etc. for many thousands of competitors and their employees.
  • Microsoft could potentially watch for changes to private profiles of current Microsoft employees to see who is thinking of leaving.
  • Microsoft could monitor interactions between current employees and recruiters, other companies, job applications, etc.

Any of these things could be done in aggregate without violating any laws or privacy policies. More troubling is that these powers could also be misused either in an official capacity or seriptiously by unscruplous employees or managers.

Microsoft monitoring employee behavior isn’t unprecedented. I’d heard that in the mid-2000’s, there were instances where security would be called to escort people out of the building if their manager found out that they’d accepted a position at Google. It also was (is?) a fireable offense in some teams if engineers were caught reading patents or looking at code from open source projects.

I have no evidence that Microsoft will actually do any of those things, but…

I. Don’t. Like it.

Microsoft Privacy Uncategorized

I submitted the form to have my site added to the Facebook Instant Articles (FBIA) crawler on April 11.

Nothing. Nada. Zilch.

A web that depends on large corporations to determine your site is worthy of inclusion is not the web I signed up for.

Uncategorized

As a software project manager, I often run project retrospective meetings with my teams. Sometimes they feel like this:

Most of the time, we actually do ship, even with only one wing. 😉

Uncategorized

Video (screen capture + audio) of the talk I did at Seattle Xcoders a couple of weeks ago is live:

I shared some lessons learned on projects that went off the rails, in spite of having a plan that we thought we could execute on.

No promises on it being a particularly good talk. 😉 YMMV.

How to Fail by Following the Plan (Jake Savin, March 10, 2016)

Uncategorized

I was living in Dallas when Katrina hit. I was infuriated that so many people were left stranded in such a desperate situation, and baffled by the seeming total lack of urgency to help them.

I still remember vividly welling up with tears of anger and sadness while driving down I-35, at a first-hand report I heard on This American Life shortly after the hurricane while the city was still under water. I considered trying to go to New Orleans myself to help, but realizing how futile and possibly even foolhardy that would have likely been, I stayed put.

Like many others, I gave money to the Red Cross, and we prepared to accept strangers into our home if that opportunity presented itself. I even got involved in state politics, but the candidate I supported was ousted by Delay’s (probably illegal) gerrymandering.

That was around the time we decided it was time to get the heck out of Texas. (No offense to friends and family in Texas: There’s a lot to like, but for us the Pacific Northwest is a better fit.)

Originally written as a comment on a Facebook post by Dave Winer.

Uncategorized

To me, it feels like there’s some kind of inflection point being reached, but I base this on not much more than my own subjective, albeit at least somewhat informed experience.

The obviously important recent SCOTUS decisions are out there of course, but we have multiple justices over age 80, going into a presidential election with a big potential for a backlash, leading to a potential for appointments that could reverse a lot of positive progress.

We had a huge financial meltdown and now 6+ years later a lot more of the general public is well aware that real justice has yet to be served to many of those responsible. Some of the changes we’re seeing may be a result of this.

Some Evangelicals are aligning more and more with liberals and progressives on protecting the Earth and the environment, and are deeply concerned about limiting the impending damage that will be caused by climate change.

And we have generational changes in social norms coming to a head around the world, at a time when mass communication over most of the globe has never been more accessible, in spite of corporate and government attempts to control or curtail it—at least so far.

Look at how many videos are going online all over the country and the world, of police misconduct, racism, and brutally. That this is happening is far from new. That neither the media nor many governments can really control who knows about it is new. The information has been becoming more available for decades, but the visceral reality in these videos has only been widely visible for the last few years.

In Arthur C. Clarke’s world of 2010, wars between nations ended after the abolition of long distance phone charges, which led to many average people having friends all over the world. You can’t attack a country filled with so many people that are loved by your own citizens—that was the thinking. While it’s not working out in quite the way that Clarke envisioned, there is still huge potential in making information from primary sources available globally, at massive scale, and for such little cost.

At the same time the Internet has also led some (many perhaps) into isolated enclaves—information deserts (borrowing from the idea of food deserts in American urban areas), where the only ideas that flow freely are the ones that a clique agrees with, along with a few refrains that they abhor and can use as foils and straw men, to “argue” about how wrong or even evil the other side is.

I for one am cautiously optimistic.

Ps. This post is in response to an online discussion about a Kevin Garcia piece on bedlammag.com.

Uncategorized

My friend Brent Simmons has recently written a series of blog posts—seven parts so far—on How Not to Crash, for Cocoa and iOS developers. Brent is an experienced and thoughtful programmer, and these are well worth a read. Most are probably useful even to programmers working in other languages.

Check them out!

How Not to Crash #1: KVO and Manual Bindings
How Not to Crash #2: Mutation Exceptions
How Not to Crash #3: NSNotification
How Not to Crash #4: Threading
How Not to Crash #5: Threading, part 2
How Not to Crash #6: Properties and Accessors
How Not to Crash #7: Dealing with Nothing

Update: Brent added two more How Not to Crash posts since I originally wrote this:

How Not to Crash #8: Infrastructure
How Not to Crash #9: Mindset

… and wrapped them all up in this post on inessential.com.

CocoaDev Development Uncategorized

Simon Wardley: Evolution, diffusion, hype cycle and early failures:

“I looked at many techniques to measure change and found all of them wanting. I spent years finding out that lots of things weren’t useful for describing evolution. This is why I spent so long in the British Library cataloguing many thousands of publications. There was no effective means of describing the process of evolution until I’d done this work and found a process that seemed to work.”

See also: On mapping and the evolution axis

Uncategorized