Books read in January 2021

  • Post author:
  • Post category:Book

Its been 10 years since I've read enough to write one of these summary posts... Which I guess means something. This month I've been thinking a lot about systems design and how to avoid Second Systems effect while growing a product, which guided my reading choices a fair bit. A fair bit of that reading has been in the form of blog posts and twitter threads, so I am going to start including those in these listings of things I've read. Social media posts of note: A better Kubernetes from the ground up Systems Design Explains the World, Volume 1 This twitter thread about why Google Cloud isn't winning in the cloud platform wars Stevey's Google Platforms Rant OKRs -- Secrets to Success Goals Gone Wild Books: The Mythical Man-Month Bolos 1: Honor of the Regiment (re-read, in the hope that learning about artificially intelligent super tanks killing aliens would help me with motivational techniques for my team). Bolos 2: The Unconquerable (another re-read).

Continue ReadingBooks read in January 2021

Shaken Fist 0.4.1

I don't blog about every Shaken Fist release here, but I do feel like the 0.4 release (and the subsequent minor bug fix release 0.4.1) are a pretty big deal in the life of the project. The focus of the v0.4 series is reliability -- we've used behaviour in the continuous integration pipeline as a proxy for that, but it should be a significant improvement in the real world as well. This has included: much more extensive continuous integration coverage, including several new jobs. checksumming image downloads, and retrying images where the checksum fails. reworked locking. etcd reliability improvements. refactoring instances and networks to a new "non-volatile" object model where only immutable values are cached. images now track a state much like instances and networks. a reworked state model for instances, where its clearer why an instance ended up in an error state. This is documented inĀ our developer docs. In terms of new features, we also added: a network ping API, which will emit ICMP ping packets on the network node onto your virtual network. We use this in testing to ensure instances booted and ended up online. networks are now checked to ensure that they have a reasonable minimum…

Continue ReadingShaken Fist 0.4.1

Goals Gone Wild

  • Post author:
  • Post category:Management

In 2009 Harvard Business School published a draft paper entitled "Goals Gone Wild", and its abstract is quite concerning. For example: "We identify specific side effects associated with goal setting, including a narrow focus that neglects non-goal areas, a rise in unethical behavior, distorted risk preferences, corrosion of organizational culture, and reduced intrinsic motivation." Are we doomed? Is all goal setting harmful? Interestingly, I came across this paper while reading Measure What Matters, which argues the exact opposite point -- that OKRs provide a meaningful way to improve the productivity of an organization. The paper starts by listing a series of examples of goal setting gone wrong: Sears' auto repair in the early 1900s over charging customers to meet hourly billable goals; Enron's sales targets based solely on volume and revenue and not profit; and Ford Motor Company's goal of shipping a car at a specific target price point which resulted in significant safety failures. The paper then provides specific examples of how goals can go wrong: By being too specific and causing other important features of a task to be ignored -- for example shipping on a specific deadline but ignoring testing adequately to achieve that deadline. By being…

Continue ReadingGoals Gone Wild

A super simple sourdough loaf

  • Post author:
  • Post category:Cooking

This is the fourth in a series of posts documenting my adventures in making bread during the COVID-19 shutdown. This post has been a while coming, but my sister in law was interested in the sourdough loaf last night, so I figured I should finally document my process. First off you need to have a sourdough starter, which I wrote up in a previous post. I am sure less cheaty ways will work too, but the cheating was where it was at for me. Then, you basically follow the process I use for my super simple non-breadmaker loaf, but tweaked a little to use the starter. For the loaf itself: 2 cups of bakers flour (not plain white flour) 1 tea spoon of salt 2 cups of the sourdough starter 1 cup water Similarly to the super simple loaf, you want the dough to be a bit tacky when mixed -- it gets runnier as the yeast does its thing, so it will be too runny if it doesn't start out tacky. I then just leave it on the kitchen bench under a cover for the day. In the evening its baked like the super simple loaf -- heat a…

Continue ReadingA super simple sourdough loaf

The Mythical Man-Month

  • Post author:
  • Post category:Book

I expect everyone (well, almost everyone) involved in some way in software engineering has heard of this book. I decided that it was time to finally read it, largely prompted by this excellent blog post by apenwarr which discusses second systems effect among other things. Now, you can buy this book for a surprisingly large amount of money, but as Michael Carden pointed out, the PDF is also made available for free by the Internet Archive. I’d recommend going that route.

The book is composed of a series of essays, which discuss the trials of the OS/360 team in the mid-1960s, and uses those experiences to attempt to form a series of more general observations on the art of software development and systems engineering.

(more…)

The Mythical Man-month Book Cover The Mythical Man-month
Frederick Phillips Brooks, Frederick P. Brooks, Jr.,
Computer programming
Reading, Mass. ; Don Mills, Ont. : Addison-Wesley Publishing Company
1975
195

Continue ReadingThe Mythical Man-Month

Deciding when to filter out large scale refactorings from code analysis

  • Post author:
  • Post category:OpenStack

I want to be able to see the level of change between OpenStack releases. However, there are a relatively small number of changes with simply huge amounts of delta in them -- they're generally large refactors or the delete which happens when part of a repository is spun out into its own project. I therefore wanted to explore what was a reasonable size for a change in OpenStack so that I could decide what maximum size to filter away as likely to be a refactor. After playing with a couple of approaches, including just randomly picking a number, it seems the logical way to decide is to simply plot a histogram of the various sizes, and then pick a reasonable place on the curve as the cutoff. Due to the large range of values (from zero lines of change to over a million!), I ended up deciding a logarithmic axis was the way to go. For the projects listed in the OpenStack compute starter kit reference set, that produces the following histogram:I feel that filtering out commits over 10,000 lines of delta feels justified based on that graph. For reference, the raw histogram buckets are:

Continue ReadingDeciding when to filter out large scale refactorings from code analysis

A quick summary of OpenStack release tags

I wanted a quick summary of OpenStack git release tags for a talk I am working on, and it turned out to be way more complicated than I expected. I ended up having to compile a table, and then turn that into a code snippet. In case its useful to anyone else, here it is: Or in python form for those so inclined: RELEASE_TAGS = { 'austin': {'all': '2010.1'}, 'bexar': {'all': '2011.1'}, 'cactus': {'all': '2011.2'}, 'diablo': {'all': '2011.3'}, 'essex': {'all': '2012.1.3'}, 'folsom': {'all': '2012.2.4'}, 'grizzly': {'all': '2013.1.5'}, 'havana': {'all': '2013.2.4'}, 'icehouse': {'all': '2014.1.5'}, 'juno': {'all': '2014.2.4'}, 'kilo': {'all': '2015.1.4'}, 'liberty': { 'glance': '11.0.2', 'keystone': '8.1.2', 'neutron': '7.2.0', 'nova': '12.0.6' }, 'mitaka': { 'glance': '12.0.0', 'keystone': '9.3.0', 'neutron': '8.4.0', 'nova': '13.1.4' }, 'newton': { 'glance': '13.0.0', 'keystone': '10.0.3', 'neutron': '9.4.1', 'nova': '14.1.0' }, 'ocata': { 'glance': '14.0.1', 'keystone': '11.0.4', 'neutron': '10.0.7', 'nova': '15.1.5' }, 'pike': { 'glance': '15.0.2', 'keystone': '12.0.3', 'neutron': '11.0.8', 'nova': '16.1.8' }, 'queens': { 'glance': '16.0.1', 'keystone': '13.0.4', 'neutron': '12.1.1', 'nova': '17.0.13' }, 'rocky': { 'glance': '17.0.1', 'keystone': '14.2.0', 'neutron': '13.0.7', 'nova': '18.3.0' }, 'stein': { 'glance': '18.0.1', 'keystone': '15.0.1', 'neutron': '14.4.2', 'nova': '19.3.2' }, 'train': { 'glance': '19.0.4', 'keystone': '16.0.1', 'neutron': '15.3.0', 'nova': '20.4.1' }, 'ussuri': {…

Continue ReadingA quick summary of OpenStack release tags

Rejected talk proposal: Shaken Fist, thought experiments in simpler IaaS clouds

This proposal was submitted for FOSDEM 2021. Given that acceptances were meant to be sent out on 25 December and its basically a week later I think we can assume that its been rejected. I've recently been writing up my rejected proposals, partially because I've put in the effort to write them and they might be useful elsewhere, but also because I think its important to demonstrate that its not unusual for experienced speakers to be rejected from these events. OpenStack today is a complicated beast -- not only does it try to perform well for large clusters, but it also embraces a diverse set of possible implementations from hypervisors, storage, networking, and more. This was a deliberate tactical choice made by the OpenStack community years ago, forming a so called "Big Tent" for vendors to collaborate in to build Open Source cloud options. It made a lot of sense at the time to be honest. However, OpenStack today finds itself constrained by the large number of permutations it must support, ten years of software and backwards compatability legacy, and a decreasing investment from those same vendors that OpenStack courted so actively. Shaken Fist makes a series of simplifying assumptions…

Continue ReadingRejected talk proposal: Shaken Fist, thought experiments in simpler IaaS clouds

pngtools, code that can nearly drink in the US

  • Post author:
  • Post category:Pngtools

I was recently contacted about availability problems with the code for pngtools. Frankly, I'm mildly surprised anyone still uses this code, but I am happy for them to do so. I have resurrected the code, placed it on github, and included the note below on all relevant posts: A historical note from November 2020: this code is quite old, but still actively used. I have therefore converted the old subversion repository to git and it is hosted at https://github.com/mikalstill/pngtools. I will monitor there for issues and patches and try my best to remember what I was thinking 20 years ago...

Continue Readingpngtools, code that can nearly drink in the US

Shaken Fist 0.2.0

The other day we released Shaken Fist version 0.2, and I never got around to announcing it here. In fact, we've done a minor release since then and have another minor release in the wings ready to go out in the next day or so. So what's changed in Shaken Fist between version 0.1 and 0.2? Well, actually kind of a lot... We moved from MySQL to etcd for storage of persistant state. This was partially done because we wanted distributed locking, but it was also because MySQL was a pain to work with. We rearranged our repositories -- the main repository is now in its own github organisation, and the golang REST client, terrform provider, and deployment tooling have moved into their own repositories in that organisation. There is also a prototype javascript client now as well. Some work has gone into making the API service more production grade, although there is still some work to be done there probably in the 0.3 release -- specifically there is a timeout if a response takes more than 300 seconds, which can be the case in launch large VMs where the disk images are not in cache. There were also some…

Continue ReadingShaken Fist 0.2.0

End of content

No more pages to load