Jake Savin Posts

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:

1/ Apple has a software problem. Here's how it plans to fix it. https://t.co/dJaikfRhs7 via @markgurman // Let’s take a step back and talk about the broader context and product development at scale. Lots follows…

I’m going to start tagging my political posts. There’s so much to follow, that it’s hard to tell what’s important and what isn’t. My hope is that this will help me and maybe others, even just a little, to keep our eye on the ball.

For example stories that just won’t die but have little leverage against Trump and his cronies, like the voter fraud thing, I’ll tag as distractions.

Here are some of the tags I’m thinking of. Let me know if you think I should add any:

#distraction – These issues just don’t matter in the long run.

#obfuscation – Important things, couched in some other issue.

#troll – Incendiary remarks from the Trump administration.

These stories, while deserving of our attention and often disgust, seem to me often to be side-issues that don’t directly address how the Trump “administration” is destroying our government, our trust in our government, and the trust of the United States by the rest of the world.

On the other end of the spectrum, there are actions Trump and Bannon are taking daily which are eroding our government itself. The State Department purges, attempts to silence or discredit the press, damaging of relationships with our allies, and cozying up with dictators:

#treason – Stories or speculation about Trump’s treasonous deals.

#kleptocracy – Abuse of the presidency for personal gain.

#dissent – Insiders standing up against Trump.

#resist – Citizens taking action or speaking out against Trump.

We have lots of energy and motivation right now, but we need focus and strategy very badly. So far Trump has been pretty successful at keeping us confused and misaligned. Let’s fix that!

When it comes to fighting back against Trump, there are so many issues it may be hard to figure out what to focus on first. Here’s my take:

Choose the issue or issues that have the following attributes, specifically for you:

You are passionate about the issue.

You have applicable knowledge or skills.

You know or can find people to help you.

These are more important than whether it’s the biggest issue or the one generating the biggest controversy, or even the worst effects.
If you have knowledge and passion about an issue, and can find ways to connect with other like-minded activists, you can become an effective advocate. If not, you risk wasting time and energy that you would more effectively invest elsewhere.

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.)

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…

Right now, I’m not particularly optimistic about democracy and political discourse in the United States. There are so many things to love about our country, but She has been quite broken for most of my politically aware lifetime, and I have trouble imagining a nearby future in which this changes meaningfully.

I left a long comment tonight on a Facebook post made by a friend about a hotly debated issue in American politics. The post referenced a popular but not recent, oversimplified news story that was only tangentially related to the issue.

The comment thread on Facebook quickly latched onto the tangential story instead of the more current and much more important issue itself, and commenters fell back to lazily repeating polarized talking points from the side they happened to agree with. In this specific case the more polarized comments happened to be the right-leaning ones, but both sides are guilty of this behavior depending on the issue.

Instead of ignoring the post or jumping into the fray to argue with people whose minds I’m nearly certain I had no chance of changing, I thought (probably naively) that I might do more good by attempting to elevate the level of discourse.

The rest of this post is that comment…

I won’t bother with jumping in on the “man-who” fallacies, except to say that the real truth in all of it is almost certainly somewhere in the middle, and is more complex than most are willing to bother to think too deeply about. Stories like [this] are like the UV bait light in the center of a bug-zapper. We see the glow, and can’t resist flying straight in.

The older I get, the more certain I am that polarization (even radicalization) of opinion in this country on LGBT issues, guns, political speech, size of government, healthcare, religious freedom, immigration, and on and on and on…, is deeply hurting our country through a lost sense of shared values and community, and has been for decades.

We as a nation of individual citizens have to start to realize that we have so much more in common than not. We have to find ways to allow ourselves be more tolerant and understanding. We need to be able to communicate – even disagree and debate – with sensitivity to those with different opinions than our own. If we can’t do this we will continue to spend our money, time, and energy on fear-based, straw-man, defensive, 24-hour-news-cycle bullshit, with no real hope to change anything for the better. We keep on doing this instead of seeking out and implementing real pragmatic improvements, based instead on the common ground and understanding that are the highest aspects of our shared cultural heritage and our core values as Americans.

I still hope we believe in democracy, but these days it’s sometimes hard to believe we even know what it is.

Policy and politics should not be an “us vs them”, winner-take-all activity. It’s ALL US! It’s our own responsibility as individuals to respect each other and ourselves enough to tackle real issues and work to resolve our differences, rather than attack people we’ve never met just because someone said something about them that we find disagreeable.

The political class and the media (mainstream or otherwise) are reflections of our own attitudes and actions. If we want better government and less biased reporting, we have to invest ourselves into the future of our culture, our government and our community.

On the other hand, we could just keep screaming at each other and not listening to anyone who disagrees with us.