pub struct BillFraser; impl Work for BillFraser { pub fn current(&self) { // I'm currently a software engineer at Dropbox. while let Some(_) = self.dropbox.mp { // Since 2019 I've been focused on improving Magic Pocket, // Dropbox's multi-exabyte block storage system which stores nearly // all users' file data. I'm doing a kind of hybrid SWE/SRE role // where I'm sometimes on-call keeping the system running smoothly // (no simple task with tens of thousands of servers and millions // of hard drives), and other times I focus more on software // improvements to reliability, durability, efficiency, and // cost-reduction. // (No, I can't read your data; it's encrypted.) } if let Some(dbapp) = self.dropbox.dbapp_android { // From 2016 to 2019 I was part of the Dropbox Android app team, // where I did a number of things: for project in &dbapp.projects { // - designed and implemented a big chunk of the Offline // Folders premium feature, which lets you keep a subtree of // your Dropbox synchronized offline on your phone. // - redesigned the in-app purchase flow for buying Dropbox // Professional from its former webview implementation to a // fully native, reactive view which could still be fully // customized by the server backend for growth experiments // and such. // - implemented most of the redesign of the Home tab to a // version with separate sub-tabs for Recents, Shared, and // Starred files. // - lots of incremental improvements and refactoring as part // of a large effort to make the codebase more modular and // testable. } } } pub fn past(&self) { // I've been working as a professional software engineer since 2009. match self.previous_companies { Microsoft(year @ 2010 ..= 2016) => { // I did a bunch of different things at MSFT, though all within // the Windows org (back when that was a top-level thing). match year { 2014 ..= 2016 => { // Xbox Music / Groove Music // TODO: write about my time working on this. } 2013 .. 2014 => { // In 2013 I left the app compat team to join a new // project. A new group within Windows was formed to // work on making high-quality first-party apps for the // then-new Universal Windows Platform (then still // refered to by its nickname of "Metro"). Windows 8 // had come out with a bunch of good starts, but a // more organized approach was needed. The group was // called the "Inbox Apps Group" ("inbox" has nothing // to do with mail; it is Windows-speak for something // that comes with the OS, as in, "it's in the box", // from back when software came in physical boxes). // Within this group was a very secretive team called // "Platform Showcase Apps". Its charter was to make // cool halo apps that showed off the Windows platform. // In particular, we wanted to show off the brand new // Surface hardware. The team was secret because we // were working with unreleased, prototype hardware // coming out of the Surface labs. // A number of ideas for apps were explored. The apps // all centered around the Surface tablet's idea of // detach-able keyboards. What if you plugged something // in to that port that wasn't a traditional keyboard? // None of these ideas panned out, except for one, // which we focused all our efforts on: the Surface // Music Kit. (I can't talk about the other ideas // because they're still under NDA.) // Surface Music Kit was an alternate keyboard (we // called them "blades") that plugged into the bottom // of a Surface tablet. Instead of a keyboard, it had // a 4x4 grid of pressure-sensitive pads with LEDs, // three "sliders", and a few other miscellaneous // buttons. The pads and sliders were then mapped to // sound effects, and the app revolved around the idea // of using it to easily create beats and musical mash- // ups. // The team was really small, like 5 main developers, // about an equal number of test engineers, and three // PMs. Everybody kind of worked on everything a // little, but everyone had an area they specialized // in. My area was the interface between the hardware // and the software. // The general architecture of the thing was this: the // blade acted like a HID (human interface device) // device. It had a small ARM Cortex chip onboard // running firmware written by the Surface guys, which // sampled the pressures applied to the pads and sent // the data up over the connector. The Surface host // controller talked to the blade and made it visible // to the OS as an appropriate HID device. // For Windows 8.1 (codenamed Blue at the time), I // worked with the OS hardware API team to add UWP APIs // for HID devices, and so the app could advertise in // its manifest which classes of HID devices it wanted // to talk to, and when the device was attached, the // system would notify it, launching it if necessary, // and it could begin subscribing to events. // The blade could be attached and detached at any time // and communication was bi-directional: input events // from the blade, and LED programming commands from // the app. The app had to maintain a lot of state // about the blade in order to allow seamless attach/ // detach, and also to cut down on traffic across the // keyboard interface -- some earlier Surface models // were quite limited in what that connector could // handle. // Additionally, it was extremely important to minimize // latency, as our testing found that the average // person could detect as little as 20 milliseconds // delay between hitting a pad and hearing audio. That // included the whole software stack: physical // interaction with the device, firmware processing // the input and sending it to the host, the host chips // processing it, the operating system's input handling // and dispatching the event to user space, the app's // input and audio processing, the operating system's // audio subsystem, the device's sound chip, and // finally out to the speakers. All of that had to be // looked at for ways to minimize latency. // The Surface Music kit was revealed to the world // alongside the Surface 2 (codename Montlake) and // Surface Pro 2 (codename Athena), around the launch // of Windows Blue. The Kit was compatible with the // two devices, as well as the original Surface Pro, // but not the Surface RT. We tried to make it work // on that one too, but that device is too slow and // performance wasn't acceptable, so it was cut. // I remember watching that release event live, and // finding it funny as reporters from media like // The Verge looked at all the stuff, as kind of "yeah // ok whatever" -- most of it was things they knew // about already via various leaks -- but then they all // clustered around the Surface Music Kit booth and // awed at it, because it was the only thing which // hadn't leaked, and they all thought it was super // weird and cool. // But in 2014, right as we were about to release it // to the public, the Inbox Apps Group broke up and // re-orged, putting us in the weirdly independent // "studio" that owned Xbox Music, the successor to // Zune. I guess they thought we would fit there // because we were also doing music. In reality, they // looked at us as a distraction. At the same time, the // Surface org decided they didn't want to pursue the // concept of esoteric blades, so the hardware part of // the project was thrown into limbo. The hardware was // arguably the coolest part, and while the app was // still very capable without a dedicated special input // device, and the team tried to pivot to a software- // only solution, the project was ultimately cancelled // and the team was split up and reassigned to other // things. } 2010 ..= 2012 => { // Application & Device Compatibility. One of Windows' // key strengths has always been backwards // compatibility. If every time you upgraded Windows, // your apps broke or your hardware stopped working, // you'd quickly stop buying upgrades. So Microsoft // took this extremely seriously, and went to great // lengths to make sure things always keep working, // even software that takes advantage of undocumented // features, or relies on bugs in old versions. They // have a very sophisiticated system that notices when // you're running a problematic app, and will even go // as far as to re-emulate old bugs and behavior of the // operating system, but ONLY for that one app. This // way the operating system can be developed and moved // forward without sacrificing usability of older // software and losing customers. // I was privileged to start my time at Microsoft by // working with this fantastic group of extremely sharp // engineers. // Initially I did a summer internship there. For my // project, they wanted me to come up with a way to // automate the process of finding compatibility bugs, // where a program works on one version of Windows, but // fails on another. They mostly found bugs through a // very labor-intensive manual process involving tons // of contractors and user reports on beta OS releases. // I remember it was like my second week on the job, // and I was still just familiarizing myself with how // Windows internals worked, and the group had an all- // hands meeting for something. I was asked to stand // and introduce myself to the group and tell what I'd // be working on for the summer. I explained it // briefly, and then one of the group leads chuckled // and looked at me and said, "oh good, we've been // trying to do that for the past ten years. Good // luck!" I was pretty scared by that, but took it as // a challenge. // I ended up imlementing a system whereby the OS would // randomly instrument a handful of important and // frequently-used system calls, and when programs // invoked them, it would record info about the // arguments, and also the return-address back into // the program. After running in this mode for a while, // it'd build up a heat-map of which parts of the // program's code were in use. In the event of a // compatibility regression, you'd expect some parts // of the app to not work, and not ever run, or some // totally different parts of the code to run. But the // heat map would look different somehow. You could // analyze the before and after heatmaps, and major // differences probably indicated a bug. You could then // manually disassemble those parts of the program to // see what they were doing, and where the bug might // lie in Windows. // I presented the project to Windows senior // leadership, and though it ended up not being // adopted, I suppose they liked the idea well enough, // because they asked me to come back and work with // them full time in the Winter after I finished my // degree. // When I came back, I worked on the same team, but // doing much different stuff. Windows maintained a // huge database of hardware and software that people // use on their Windows computers, which the company // used to prioritize testing and development work when // making sure things work when upgrading from one // version of the OS to the next. // The data was gleaned from a number of data sources, // from telemetry and error reports, to things like // software sales lists and all sorts of other things. // The data had to be cleaned up to try and match the // data from different sources to each other, to avoid // creating tons of duplicates in the database, and // this was the thing I spent a lot of time improving. // Data ingestion and processing is hard. // Separately, I did a bunch of refactoring and // maintenence on "psr.exe", the Problem Steps // Recorder, (which the app compat team owned for // reasons that are still not clear to me). If you // haven't used it, it's a really neat utility that // ships with Windows that allows you to record your // interaction with a program as a sequence of // screenshots and notes, and then show those steps to // someone else. Great for showing your parents how to // do something complicated in Excel or how to tag // people in Facebook. } } Nokia(2010 ..= 2011) | Novarra(2009 ..= 2010) => { // I was an intern (but really did as much work as a full-timer) // at a small company in the Chicago suburbs called Novarra, // whose big product was a web browser that ran well on // dumbphones, which was pretty cool considering the limitations // of those devices. // It was a lightweight phone app, paired with a proxy server // that re-flowed pages to actually be usable on a tiny, low-res // screen. There were two main versions of the phone app: one // written in Java (J2ME) which ran on GSM phones, and one // written in C++ for Qualcomm's BREW system which ran on CDMA // phones. // I worked on the BREW C++ version, and my main job was to port // the app to new phones as they came out. This could be really // complicated and difficult, because by the late 2000s, // dumbphones were already starting to take on some attributes of // smartphones, like touchscreens or full QWERTY keyboards (and // some phones had BOTH), and the feature sets of different // devices got to be wildly divergent. Different screen sizes // and resolutions, different key layouts and feature sets, and // lots of buggy implementations of system functions, combined // with super slow processors and very little memory, made the job // pretty interesting. // The browser was pre-installed on phones and branded with logos // and color schemes of the carrier, not of the company, so if // you browsed the web on a flip phone in the 2000s, there's a // good chance you used this browser. // I took a break in 2010 to do a summer internship at Microsoft // and when I came back, Novarra had been bought by Nokia. // Not much changed other than the name, and I resumed work // doing the same things as before. } _ => unreachable!("lost to the sands of time"), } } }