This year I’ve been spending a lot more time learning how to contribute to the block editor in WordPress, and nowadays much of my time at work is spent in the Gutenberg repo. For most folks working with WordPress, you likely won’t need to worry about debugging issues between the block editor and the core media library, however if you’re contributing to Gutenberg or investigating bugs, you just might find yourself needing to debug the plugin and the core media library at the same time.
The other week, I worked on a bug fix in Gutenberg related to the media library, and it took me a little while to understand how everything is hooked together between the React code in Gutenberg, and the Backbone JS based code of the core media library. I thought I’d write up these notes in case they help anyone else debugging this part of Gutenberg / WordPress for the first time.
How is the media library hooked up into Gutenberg?
In blocks like the Gallery and Image blocks, the MediaPlaceholder component is used for the block’s placeholder state. The Media Library button is rendered in the placeholder via the MediaUpload component, by passing it a render prop that renders the button. The callback passed to the render prop receives an open function, which is used in the onClick handler of the button itself here.
At first glance the block editor’s MediaUpload component can be a little confusing. It’s a placeholder component that returns null, but is expected to be replaced by the editor.MediaUpload filter, and any component added to that filter should conform to the interface defined in the MediaUpload’s readme file.
Since the actual core media library is written in Backbone JS, this adds a layer of abstraction that keeps the current media library implementation encapsulated from the rest of the block editor components, while also allowing it to be overridden with other media library implementations.
For example, in WordPress.com, in wpcom-block-editor which lives in the Calypso repo, if the editor is running in the Calypso iframe, then the editor.MediaUpload filter is used to swap out the core media library for the React-based Calypso one here. In the WordPress.com implementation, you can see much of the interface of MediaUpload being used within openModal, and the render prop gets called passing in the openModal function to the open prop discussed earlier.
Getting back to Gutenberg, by default, in the post, site, and widget editors, the empty placeholder for the MediaUpload component is replaced with the MediaUpload component from @wordpress/media-utils — this is the one that bridges the React code and the core media library’s Backbone JS by calling methods on the global wp.media object.
In packages/media-utils/src/components/media-upload/index.js, this is where the “real” MediaUpload component lives, that is responsible for configuring the media library, setting state, and dealing with events like opening the media library, selecting media, and closing the library. It’s here where we debug the Gutenberg-side of the media library.
Debugging the media library in core and Gutenberg at the same time
When debugging the media library in Gutenberg, it isn’t always clear whether an issue exists in Gutenberg, in the core media library, or if it’s to do with how we’re calling the library.
I found it helpful to run watch commands for both Gutenberg and wordpress-develop at the same time, so that I could log out values from either side and fairly quickly get a sense of what was happening on either side of the React / Backbone divide. There’s a bunch of different ways to set up your local environment (I’ve taken to VVV a bit lately), but the most straightforward way for me was to use the Docker-based wp-env, which is included in the Gutenberg repo. I used the following steps:
Clone wordpress-develop to a folder adjacent to the Gutenberg repo. E.g. my folders are set up like:
Add a .wp-env.override.json file in the Gutenberg repo with a core field that points to the build directory in wordpress-develop as described in the wp-env docs. This will ensure that the WordPress core files are loaded from your local checkout, and the additional override file is excluded from source control. The rest of the settings in .wp-env.json will be unaffected. The file should look like this:
In one terminal window, go to the wordpress-develop directory, install npm dependencies (npm install) and then run the watch command (npm run dev). This will take a while until it’s built all the JS and is ready to watch for changes.
Once that’s ready, open another terminal window / tab and go to the gutenberg directory.
Follow the Gutenberg repo’s instructions on setting up your local dev environment if you haven’t already. If you have, you should be able to run wp-env start (or npm run wp-env start if you haven’t installed wp-env globally), and once Docker has started up, run npm run dev to start the Gutenberg dev build and watch for changes.
You should now be able to make changes to either the media library code in core, or the media utilities in Gutenberg, and after a few seconds (or so) be able to reload your test site and see your changes. If you’re anything like me, this means popping a lot of console.log and debugger statements in the code to investigate how things are put together.
A few notes on the media library
The core media library is written in Backbone JS, a framework that I’m not very familiar with to be honest! It uses a model view controller (MVC) pattern, and from hacking around in the code, I found it a gentle reminder that the best tools, frameworks, and “best practices” of today, might seem quaint in only a few years’ time. For a long-lived project like WordPress, components need to be continually maintained and replaced over time. With all the effort in modernising the editor, I’m quite impressed with the approach of wrapping the media library in Gutenberg, so that the React and Backbone code can happily co-exist (most of the time!). It’s a pragmatic approach for the project, given that it’ll be a lot of work to modernise if and when the time comes to port it to another framework.
The media library is made available in the editor via a global wp.media variable, which is exposed via the files in /src/js/_enqueues/wp/media/ — this exposes the public API for things like the media library’s views, controllers, and models, enabling us to configure the media library how we want to when opening it for the gallery block, for example. In Gutenberg, a good place to see how this is used is to look at the getGalleryDetailsMediaFrame function, which configures its own custom details frame (a composite view containing multiple regions).
Once the media library is configured, we can then access the current frame, and retrieve or manipulate its state, and do things like set the currently selected media. It’s useful to know that while there’s quite a lot of custom code in the media library, the underlying Backbone objects have heaps of methods available (including proxying to Underscore.js), so there’s lots that we can do to manipulate the data. I’ve found it helpful to regularly look up the docs on Backbone Collections and Models as reference while hacking around.
Then, over in wordpress-develop, the main places I’ve been poking around has been in the models, controllers, and views directories, and in particular the Attachments and Query models (for looking at how media is fetched), and the Selection model and the GalleryAdd controller for looking into how to manipulate the current state of selected media. It was through hacking around here and adding a bunch of console.log() calls that I managed to come up with a fix in Gutenberg for the Gallery block where currently selected images were not appearing when opening the media library.
I’m still quite new to hacking around with the media library, but hopefully some of the notes here might be of use to someone else digging around and trying to see how it’s all hooked together. At the very least, I found this to be a good example of where it’s possible to come up with a fix for a problem without having a deep understanding of the framework in use — by treading carefully, and reading up on just enough of the framework and source code pertaining to the problem so that you can come up with a fix, and have a reasonable idea of what kind of impact your change might have. And then, do lots of testing to make sure you haven’t broken anything!
I saw the most wonderful art exhibition a couple years ago at a gallery run by the local council here in Bayside suburbs in Melbourne. Pets are people too was an exhibition of artworks made about pets. Some of the artwork wasn’t the most technically proficient, but what was true of all of it, was that it was heartfelt and captured something of the private, domestic relationship we have with our pets. The very close, personal bond that we share, but that can be really hard to adequately convey in words and which becomes even harder to express when we lose our pets.
Sadly, losing our pets is part of the deal we sign up for. To get to share our lives with our beloved furry friends means to go through the whole cycle of life and death, and the latter part is especially painful.
I hadn’t yet lost a pet that I was still close to as an adult by the time I saw the exhibition, but the works touched me nonetheless. Whenever I’ve travelled overseas or interstate, I think about my pets, not just for the love I hold for them, or their companionship, but that the world I inhabit with them captures the very essence of what the concept of “home” feels like to me.
We’ve since lost two pets. One suddenly in August of 2019, my beloved Harry, who used to sleep in the crook of my elbow or sometimes right up in my armpit, particularly in the cooler months. If I stayed up late, he’d come over and meow at me until I’d go to bed with him. He was a curious, gentle and mysterious cat. Whenever he came inside, it was always as if he’d just returned from some adventure and wanted to tell us all about it. That adventure was probably sleeping in the neighbours’ bushes, but an adventure all the same. Losing him was heartbreaking beyond words, but I don’t regret a minute I spent with him, and the hurt of losing him was worth it for all the time we got to spend together.
In April of this year, we lost another cat, Gizmo. The matriarch of our household, an elderly cat who ran the show, and would let you know all about it. With a heart as big as her meow, she sounded grumpy, but she’d purr at the faintest touch, scream for a lap to sit on, and tap you like you were misbehaving when she wanted a pat. In short, we loved her.
Losing her wasn’t sudden. She’d been old for the past six years; we’d been through so many times over the years wondering if it was the end, but she’d bounce back. In August of last year we nearly lost her, and she spent two nights at the vet, but pulled through. The last eight months, and this summer just past, were a gift and a wonderful opportunity to enjoy our time together. Lazy days of her curled up in the sun, and evenings curled up on our laps while we read or watched TV or a movie.
All these things are simple, mundane even to describe. Yet those artists at that local exhibition managed to convey the depth of feeling of these moments alone with our animals. Our pets share our inner world with us, so are very deeply part of our families.
During the pandemic, one of the things we’ve gotten into has been watching YouTubers that focus on arts and crafts and making things. A recent favouite has been watching Christine McConnell and her incredibly detailed and imaginative creations. But one video in particular, where she spent a month doing the most exquisite oil painting of her beloved cat who passed away really resonated. It’s well worth a watch.
For me, I’ve been enjoying returning to drawing from time to time, for the joy of it, and also to engage with my memory of Harry and the feeling of being with him. It’s a feeling I carry with me for the rest of my life, just as now Gizmo is a part of me. And I find great comfort in thinking of and imagining them.
I’ve managed to come up with a kind of cartoon likeness for Harry, that isn’t quite him, but is also very much his energy, and I love immersing myself in that when I draw him. It’s a delightful blend of hobby and artistic practice for me, something with no goal other than to enjoy making a little drawing and thinking of my furry friend. Seeing that exhibition a couple of years ago helped unlock the idea of drawing for the sake of exploring this connection to a memory or feeling, rather than needing to turn everything I make into a proper “project”. And for that I’ve enjoyed making things a whole lot more than I used to.
I look forward now to doing the same with Gizmo and my memories and thoughts of her. She was a very unusual cat, and I think it’s going to be a bigger challenge trying to capture her likeness, or a sense of her. But doing so will be part of the healing process, and eventually just part of life, looking back on what at the time was our good and long lives together, but that in hindsight was always so finite.
Anyway, pets are the best, even if they’re little heartbreakers. And our lives are so much richer for their presence, even once they’re gone. But, like the brochure that the vets gave us when we said goodbye to Gizmo tells us, they’re still with us, just a little further away.
I have a personal principle I try to go by, which is that in any given six month period, it’s best not to make more than one big life change. If you change jobs, move house, or do any other life changing thing that you might experience as positive or negative, or a mix of the two, try to give yourself some breathing room before doing the next thing.
I tend to be way more conservative than that, and when it comes to switching jobs, over the past decade, I’ve only done it once every four years or so. From finishing university in 2007 to this year, I only worked in two different workplaces. If I’m in a good place, I like to stay put!
Thinking of changing jobs
For the past eleven years, I worked at ACMI, a film museum in Melbourne. (Also videogames, art, and digital culture, but the shorthand film museum tends to be easier to get the idea across). I joined when I was 24, working in customer service before moving on to ticketing. I supervised in ticketing for a few years, before moving over to a web developer role for another four years. It was a fascinating place to work, but calling the job interesting or good is kind of hard, because it feels like trying to describe or explain a decade of your life. For most of that time I couldn’t really imagine working anywhere else. It was a cool museum, what they were trying to do aligned with my interests (the intersection of education, creative industries, and presenting moving image works and exhibitions to audiences), I got to work on some really fun and creative projects, and they also sent me to some rad conferences!
In my spare time, I’d been working with the novelist Anna McIlwraith on her book releases and website, and I started to get a feel for the sheer variety of communities that utilise WordPress. Then, I happened to read about Automattic open sourcing the Calypso editor for WordPress.com. It planted a seed in my mind that one day I would love to work on problems that weren’t just for a single institution, but instead contributed to a broader platform that helps many, many users build websites, tell stories, sell books, or otherwise share their work.
While I loved working at ACMI, and would often say that it’s the only place in Melbourne where I could really see having a fulfilling career, I started to feel that one day I’d like to take the leap and try something new. I also loved the idea of working remotely and decoupling where I live from where I work. And I’m certainly not the only one! A recent Digital Ocean survey found that for a lot of developers, remote work is the new normal.
I’m giving you an idea of how I felt about my old job, because I think it’s interesting context for applying for this particular job, and the interview process that followed.
In the Arts / state government agencies, where I previously worked up until this point in my life, hiring was a fairly straightforward if bureaucratic process. A hiring manager would put together a position description and organise with HR to define the role, somewhere along the way there’d be budget approval to recruit, and the position would be advertised on the website along with key selection criteria. Applications were reviewed by these key selection criteria, and applicants would be short-listed for a set of 1 hour interviews. You’d interview maybe 5 or 6 people, with a panel of 3 to 4 staff doing the interviewing and, based on behavioural questions and possibly a presentation by the candidate, the interviewee would be ranked and a successful candidate would be given an offer.
It always felt like a somewhat flawed process. The interview process could feel artificial, and you really can’t tell that much about someone in just an hour, but we tried to make the best of it. We’d try to think of the best questions to ask, try to genuinely see what someone might be like to work with, and get a sense of their experience, but it was difficult. From both sides, either as a candidate, or as the person hiring, it feels like a bit of a risk to switch jobs or hire someone based on meeting them for only one hour.
And for me, thinking about leaving a workplace that I loved and a place I’d worked for eleven years, I couldn’t imagine interviewing for one hour and feeling like I had enough information to commit to leaving a really great job.
Applying for Automattic
All this is to give you some context for why I appreciated Automattic’s longer than usual hiring process, and why it was really good for someone in my position where I was cautious about switching jobs.
I applied in December of 2018 a week or so before Christmas, following the instructions on the Work With Us page especially carefully, and heard back a few weeks later in January by email, with an invitation to book in for a 90 minute interview by text chat.
A couple of weeks later, they invited me to join their Slack as a single-channel guest, and it was time for the interview! It started off with a bit of getting to know each other, and then into questions about my experience and how I approached different technical problems, but it was by no means a dreaded technical interview, there was no live coding or whiteboard-like brain teasers, just some good, well-structured questions. And the second half of the interview I had heaps of time to ask all the questions I liked, about company culture, communication in a distributed organisation across timezones, and how they manage deployments at such a large scale. Interviews can be intimidating, but I really enjoyed this one, and it was wonderful getting to hear all about the company and the sorts of challenges for new hires (like making sure to switch off at the end of the day, and not just keeping on working because you can and you’re at home).
The next day, I heard back by email that they’d like to move me to the next stage in the process, the coding exercise. You’re given a week to do it, but the idea is that you spend 4–6 hours in your spare time on the tasks. It’s designed to be something you can do in your spare time, in the way that you might actually work on a coding problem, instead of the pressure of testing your coding skills in an artificial environment like an interview. For me, a take-home coding exercise is so much more preferable to having to come up with code solutions in the moment, or endure a full day of interviews. I took around eight hours over the course of the week, but the first two were just to look over the code and tasks and make sure I fully understood what was expected of me. The people doing the hiring were also super flexible, and flagged that if you’re busy or have other commitments, you can take longer than the week.
The coding exercise was all done in Github, with my changes submitted as pull requests, and by the end of the week I’d submitted my proposed changes. I got some feedback, and there were a couple of small things that I’d missed. After fixing up those issues and submitting further changes, they recommended me for the next stage in the process, a trial project with the company!
The trial project
Throughout the hiring process, all communication was done in Slack on the same channel I’d done my initial interview. And at each stage, more staff would join the channel and I’d get to ‘meet’ them, with a different staff member leading that part of the hiring process. The effect is that you feel like you gradually get to know them, and they get to know you. And because you’re all on the one Slack channel, it’s all one big discussion.
If you’ve read any other stories of people joining Automattic, you might have heard about the trial projects. The purpose behind the trial project is to give both you and the company the experience of working with each other, on a close-to-real-but-not-quite project so that you can mutually get a good feeling for what it’d be like to work together. It’s paid, at a flat rate for everyone that has no bearing on what your future salary might be. For someone like me who was feeling very cautious about the risk of changing jobs, this was an ideal way to confirm that Automattic would be my dream place to work like I’d hoped.
By this point in the process, they give you access to their internal resources and systems, like the Automattic Field Guide where you can read more about the company and all the myriad projects, and watercooler and developer channels on Slack. To help give a better sense of what it’s like to work and ‘hang out’ with coworkers, they also added me to a Slack channel with other people doing their trial projects at the same time, where we could chat, introduce ourselves, and generally empathise with each other through the challenging, exciting, and slightly anxiety inducing process of getting to work with the company. They went to great lengths to contextualise that chatting with others doing their trial was all about getting to know each other, and it was by no means a competition. For me, this was in stark contrast to any other hiring experience I’ve had, where you really feel like you’re vying for a very limited pool of jobs.
Here, it felt like everyone in the hiring process was there to help, and each of them wanted to see us succeed. By the time you’re doing a trial project, it’s pretty clear that they’ve invested time in you, just as you’ve invested time in them, and you’re all hoping you’ll be a good fit.
I can’t say too much about the trial project itself, just that it’s designed to take roughly 40 hours, and you can take as long or as short a time as you need to do it. Some people work on it in the evenings, or just on weekends, and do a different amount of time on it each week. The people hiring consistently acknowledge that it’s a big commitment to take this on; they know people already have jobs! They genuinely want to make sure it isn’t too disruptive to your personal life. I was in a really fortunate position to be able to spend my evenings and weekends on the project, which isn’t something everyone is able to do.
I averaged working on the trial project for around 8–10 hours a week, with a little bit of work in the evenings, but mostly working on it at the weekends. Although it was pretty nerve-wracking, it was fun and interesting, too. It involved not only writing code, but also writing up architectural ideas and working closely with my hiring lead and code reviewers in implementing their feedback, or going in a different direction.
Wrapping up the trial and joining the company
My trial project wrapped up after around a month, and they recommended me to the CEO for a full-time role. Not too long after that, someone from HR got in touch to schedule a chat, where we discussed the trial project, I had an opportunity to ask more questions, and confirmed that I’d be happy travelling 2–3 weeks a year internationally for company meetups, and we discussed compensation and a starting date. Later that day, they sent me an offer letter, and after celebrating that weekend, I then faced the daunting prospect of resigning from a job that I loved so that I could begin a new chapter in my life in a new job that I would also love! (Please forgive me if it is sickening to read how much I’ve enjoyed my jobs, I have been stupendously lucky to get to work at some wonderful places.)
Having worked in the one place for 11 years, I’ve very rarely resigned jobs, and switching jobs, even when it’s for a good reason, is an incredibly stressful thing to do. I gave as much notice as I could to do a decent handover, and also give myself a couple of weeks downtime to prepare for the new role. It sounds odd to say, but I’m so grateful for the long and involved hiring process with Automattic, because it allowed me to process at each step of the way the gravity of the situation in contemplating switching jobs, and it allowed me to evaluate what the change would be like for me at the same time as them seeing what I would be like to work with. Through the trial process at Automattic, I became fully certain that I would love remote-life and that this would be a place where I could grow and learn for many years to come.
It was painful and difficult leaving my old job, and I miss my old colleagues dearly, but I’m so glad I took the chance, applied, and gave the hiring process my best shot. I have been happily working at Automattic for a couple of months now, I’ve gotten to know my new colleagues who are based all around the world, and while I’m still very new to the company, and there is just so much to learn, I couldn’t be more excited or happy to be working there.
Thanks for reading! Applying for jobs is hard, and going through interview processes is hard, and changing jobs is hard, too! But Automattic do a pretty great job of making it a respectful process for all parties, and have built a really unique fully-distributed work culture, and build great products to boot! If working there sounds interesting to you, I’d recommend taking a look at the currently open positions on their website, and then have a listen to the CEO, Matt Mullenweg‘s podcast Distributed, particularly the episode where he talks about founding Automattic, distributed work, and the future of the company.
This has been my favourite book of the year, and one of the best parts is that the audiobook is read by the author herself. Spending 19 hours listening to Michelle Obama speak is an experience in itself… without meaning to, I spent almost every free moment for a week with my headphones in, following along with the story of her life.
She charts the course from her early years growing up in a poor neighbourhood in South Chicago, filled with family and friends, music and a close community, to her dedication to learning, her career, getting into Princeton and then Harvard, and becoming a lawyer. You could read all this trivia on Wikipedia, but the story she tells is a deeply personal one. There are so many details and anecdotes, like when she learned to play piano on her great aunt’s chipped piano, downstairs from her family’s small apartment, with a chip in the middle C key. Since she spent all her time practicing on that piano, by the time she had to perform at a recital, she couldn’t find where to put her hands. But that same great aunt came over and put her hands in place, and set her right. She cited piano as the thing that taught her the relationship between practice, hard work, and getting better at a skill.
Her life, she describes, was an unswerving path toward professional success, and she always had a plan. But by the time she became a lawyer, she started having doubts about that plan, and was influenced by what she describes as Barack’s constant swerving. She wanted her life to have more meaning. She ended up moving to City Hall, and then to a leadership position with the University of Chicago Medical Center where she was responsible for getting the university and its health services better connected with their local community. While best known as being the First Lady of the United States, before that, she already had an incredibly impressive career.
Their lives, hers and Barack’s were already so full before he even ran for the presidency. She gives us intimate glimpses into their personal lives, from meeting a young Barack when he was a summer associate at the law firm where she worked. These are all stories we might have heard before, but here there are so many personal and unique and endearing details, like the yellow Datsun Barack drove as a student, that had a rusted out hole in the floor. Or the boyfriend Michelle had in college whose life’s ambition was to become a basketball team’s mascot.
One detail I found interesting in this book is a discrepancy between her story and Barack’s in The Audacity of Hope. Before running for the US senate, Michelle describes giving him an ultimatum that if he doesn’t get into Congress, he’ll give up politics for good and get a job with sensible hours, like working at a foundation. Barack’s story in The Audacity of Hope is that this was his idea. Details like that make me smile — a small moment where you get a glimpse into the dynamics of their relationship. These are real people in a real family that deeply care about each other, and have complicated, real, and sometimes messy lives. And they were about to leave a relatively normal existence for good.
By the time they reach the White House, we’ve spent so much time through Michelle’s life that the sheer scale and enormity of the presidency is hammered home. Going from their little lives and middle class success in Chicago to every moment of their day planned and scheduled, with motorcades and helicopters always at the ready, the detail is nearly overwhelming. Details like — the president always travels with a personal physician and a bag of blood of the correct blood type, just in case.
You get the sense that they never took the privilege and responsibility of their roles as leaders for granted, and always strived to give their kids as normal an upbringing as they could, while being “the first family”.
By the end of the book, Michelle draws the connection between her own upbringing, to the causes that mattered to her most during her time at the White House, from childhood education, health and nutrition, to tackling gun violence and the generational effects of segregation. This isn’t a book about the presidency, she doesn’t go into foreign policy, or too much into politics itself — she said that she’s never had any love for politics. But she writes passionately about the issues she cares about, and used her time in the White House to do as much good for people as she could. She writes with warmth and passion, grounding her unusual life in relatable stories, like her mother, who didn’t want to leave her small place in South Chicago and move-in to the White House, because she’d miss her community. There are also breathtakingly sad stories of gun and racial violence in the US, and she describes with great insight the challenges of progress, with reactionary politics and the machinations of political life, which she described as being no place for a good person.
Even if you have no real interest in politics, I’d whole-heartedly recommend giving this book a read. It’s relatable and personal, and is a beautifully told story of her life, her career, her marriage and her family, and a powerful expression of what it means to grow and change — what she describes as becoming.
Satya Nadella’s book on transforming the culture at Microsoft, Hit Refresh, is a fascinating read. I know many people with long-held anti-Microsoft sentiment, but I’d say it’s well-worth a read, even if you don’t like the company. Nadella has overseen the company through recent, and unusual or especially out of character initiatives for Microsoft, such as Microsoft Loves Linux. At least from what he covers in the book, his role as CEO has shifted the company by honing in on what they see as their value to businesses and society through collaboration, in contrast to the 90s and 2000s era of promoting Windows at all costs.
But the more interesting focus of the book is on empathy. It’s a theme that runs throughout the book, beginning with his story of immigrating to the US, to raising children with disabilities, to working on initiatives to encourage economic growth for the poorest in African countries, and using their machine learning technology for medical research. While I’d just encourage you to go read the book if you’re remotely interested in leadership, technology, and the impact of multi-national corporations in a post-digital world, here are some of my highlights.
Nadella cites the 1960s civil rights movement in the US as the main cultural change that enabled a success story such as his. Prior to the 1960s, and lifting the country of origin cap on immigration, only a few hundred Indians were allowed to migrate to the US each year. By the 1990s, with the introduction of H1B visas, engineers such as he and his friends could go over to the US and study, get jobs, and eventually rise up to lead some of the richest companies in the world. His story of the challenges he and his wife Anu went through to be together in Washington state gives a personal side to stories of immigration that is especially timely. It feels like one of the main reasons Nadella wrote the book was to showcase how immigration dovetails into American values of innovation, opportunity and the idea of the American dream in the face of particularly xenophobic times.
In contrast to the usual capitalist success story, he doesn’t promote a ruthless approach to career advancement. Instead he talks of his mother’s philosophy of “Doing your thing. At your pace. Pace comes when you do your thing, so long as you enjoy it, do it mindfully and well and have an honest purpose behind it, and life won’t fail you.” He was also inspired by his Marxist father, and through much of the book he talks of leadership and team building, and the success of teams and communities over that of the individual. He uses cricket as a metaphor, and describes brilliant but arrogant players who are difficult to work with and ultimately bring the team down: “You don’t want to work with people like that.”
He says that real leadership plays the long game, describing leaders who step in when needed, but then give responsibility back to less experienced people to help build and rebuild their confidence.
In going for the CEO job at Microsoft, he didn’t chase after it, and from his earlier experiences when he’d side-stepped promotions to learn from those more experienced than he is, he really captures an attitude toward relishing learning and growing, over attaining or succeeding. What I found most inspiring about this, is the narrative of someone who has managed to grow their career over time, while maintaining their own values, personality, and it seems, integrity. One quote from the book that I really liked, which was advice from one of his friends, a fellow engineer was, “I must work hard not to climb the ladder, but to do important work.”
In discussing building trust in teams, he describes an equation. Empathy + shared values and reliability equals trust over time. Trust isn’t something that happens immediately, that you can ask for of people, but something that grows over time thanks to reliability, shared values and empathy.
He expands on the idea of trust to talk more broadly about the trust we place in tech companies, governments, and surveillance, highlighting San Bernadino, and Edward Snowden. The principal challenge, he explains is balancing the trust in personal privacy and 4th amendment rights versus the trust in ensuring public safety. The responsibility of large companies to society weighs heavily throughout the book. This book came out late last year, but the chapter was especially relevant in light of Microsoft employees recently complaining about the company’s involvement with ICE in the US. Books like these of course give a positive light to the author’s approach, but it was refreshing to see that these are issues that seem to weigh heavily on the CEO’s mind.
This question of responsibility fed into a long-term view of the future, and the impact of automation. He says that we need to move from a labour reduction and automation mindset to one of a maker and creative mindset — AI and new technologies should augment the human experience and allow us to work on higher level work, and avoid dangerous manual work like mining — instead of cutting costs for big businesses. He describes the anxieties that have played into recent elections and Brexit, and that the solutions for governments and multi-national corporations like Microsoft is to invest in and foster local innovation and startups, education, and career re-training, with a particular focus on inclusion and diversity. For example, in Vancouver, Microsoft has a paid 6-8 month contract position for women who’ve been out of the work-force for at least 12 months, to provide an opportunity to up-skill and re-enter the workforce.
I’m always a bit skeptical of stories from big companies, giving overly positive visions of the future. Particularly as they seemingly focus their efforts on worldwide issues and revenue generation when there is great income inequality in their own neighbourhoods, with Seattle in particular (home to so many of these companies) facing a massive homelessness crisis.
It’s refreshing to hear one of the big tech companies’ CEOs talk about these issues, though, and the impact of wealth inequality, and strategies for companies and governments to take to address it, even if it feels very big-picture.
On a personal level, as a developer who’s focussed a lot of time and energy on building my skills over the past few years, it was very grounding to read a book on the importance of learning and going at your own pace, instead of the usual advice of hustling, grit and succeeding at all costs.
Nadella is setting a good example by leading with empathy and inclusion, collaboration over personal greed and ambition. I hope that the optimistic future he describes, one where new technologies help us address things like climate change and enable economic growth for all, is one that Microsoft and the other tech companies jump on-board and commit to.
The only part I majorly disagreed with (aside from bits that were a bit too “trickle down economics” for my tastes) was the Elon Musk quote that if we don’t find a way to interface our brains with computing technology and AI, we will become “little more than house cats.”
I don’t know about you, but my vision of personal happiness is most certainly to be “little more than a house cat.”
I’m happiest when I’m in the middle of reading a good book. Lately, life’s been busy between work and home, and it’s felt hard to find time to squeeze in reading. It’s not always the time, after a full day in front of a screen, spending a couple of hours with my face a foot or so away from text doesn’t sound all that appealing.
But the flip side is being able to count on two hands the number of books I’ll read this year, which means an easy calculation to the number of books I’ll read this decade. I find that idea really sad — just think of the sheer range of ideas, stories, and worlds missed out on by not making enough time for reading.
This year I decided to give audio books a shot. It’s taken a little while to get used to, but with the quality of narration on Audible, it isn’t just fun, it’s allowed me to read books I never would have made time for otherwise.
It feels like a whole new world of reading has opened up. It’s freeing up so many parts of the day where it’s otherwise impossible, or wildly dangerous to read a book:
While working out at the gym
While doing the dishes
While shopping for groceries
While sitting in the dark
While at lunch (without getting food all over your book)
I still love curling up on the couch and reading a good book. But I feel like that isn’t the only way to devour a novel… and now, I’m starting to think that maybe I won’t miss out on so many great books.
I got to travel to Vancouver for work a couple of months ago. It was only my second time overseas, and I took thousands of photos… I’m still going through them from time to time, and I’m already finding myself becoming one of those insufferable people who constantly talks about their great trip, and how you “just have to go!” I’ve been on the receiving end of that for much of my life, but I finally get what people mean now! I can’t wait to go back to Vancouver one day, it’s a wonderful place.
Anyway, for some reason, I really like signs, and these ones stuck with me.
I’m working backwards through Dave Rupert and Chris Coyier’s podcast Shop Talk Show. In episode 304, Dave talks about the problem with trying to accurately estimate how long software development work will take, referencing the You Are Not So Smart podcast and the episode on Optimism Bias. The idea is that we’re prone to thinking optimistically about our own goals, and that everything will go as planned and that we will succeed, but we tend to be more realistic when looking at other people’s goals. I love the way that listening to one interesting podcast leads to other interesting podcasts!
Someone made an animated Magic Eye on Codepen using THREE.js — my favourite Codepens are ones like these, where I can’t think of any practical application, but you end up looking at it and thinking, “Wow, that’s possible?”
Jen Simmons wrote a Twitter thread on selecting technology stacks based on the community and people surrounding that technology, saying “It’s not the technology that matters. It’s the humans that matter.” I just found out about her Youtube channel Layout Land where she has heaps of great videos on Flexbox and Grid. Along with Rachel Andrew’s Grid By Example, I’m looking forward to catching up on CSS developments of the past couple of years and how to best integrate new features while providing safe fallbacks for older browsers.
Only just discovered that there’s a free cloud-based environment for running Scrapy, the Python-based framework for web scraping, on Scrapinghub called Scrapy Cloud. This could be a fun and quick way to crawl some data from the web for analysis or building front end prototypes.
I installed WordPress on Digital Ocean this week and am having lots of fun trying out their new Gutenberg editor. I’ve been following along on Github for a while now, and reading posts on WP Tavern. While I understand that the plugin is controversial in the WP community because it’ll replace the core editor, I didn’t realise the extent to which existing users are concerned about the big change — the one star reviews on the WP plugin directory are pretty brutal. It’s an interesting problem, and I feel for the core team. To users new to WordPress, or coming back to it from a long absence, the new editor feels modern and familiar when compared to things like Medium, while allowing a level of control you can only get from running your own blog. I really want to see this succeed because I think it has the potential to be a big deal for people running their own websites and blogs, so I’m looking forward to learning more about what people like about the old editor and what the new one doesn’t do for them.
Reading books (non-fiction)
Reading books (fiction)
I’m halfway through book one of Ilona Andrews’ The Edge series at the moment. I haven’t read much paranormal romance, but this one has me hooked — a magical world that sits at the edge of our world, good characters and writing that’s vivid enough to inspire your imagination, but moves quickly to keep you reading.
That’s it for this week, it’s been fun writing up some of the things I’ve been reading and thinking about. Not sure if I’ll manage to do this every week (or even every month), but already this has been a helpful way to jot down some things I’d otherwise forget!
WordPress is incredibly difficult to ignore, and I’ve found myself looking over the fence fondly for the past couple of years at all the marvelous work going on in the WP community. Progress on the Medium-style Gutenberg editor has been exciting to watch, and I eventually realised that I’d spent so much time watching from afar, and nowhere near enough time jumping in and having a play with all the toys.
I started listening to Shop Talk Show last week, the front end design & development podcast with Dave Rupert and Chris Coyier. After listening to their episode with Tammie Lister and Matias Ventura from Automattic talking about progress on the Gutenberg editor, I decided to finally take Gutenberg for a spin on a public-facing website, outside of my endless testing environments. I’ve really fallen for the Shop Talk Show mantra of “just build websites” and not overthinking things.
Last year I made a first pass of spinning up a WordPress site for this blog, and fell down a rabbit hole of using Bedrock and Trellis, the very clever opinionated approaches for deploying WP sites using Composer, and Ansible for server configuration. At the surface, this sounded like a great way to modernise the WordPress stack, and turn it into something with a more structured DevOps approach. But I never really got a handle on using it.
The thing is, when you work full-time as a developer, the last thing you really want to be doing in your spare time is mess around with DevOps workflows. It’s way more fun to spend time making things.
Tonight I spent an hour with the Digital Ocean docs, spun up a 1-click WordPress install, added Lets Encrypt for SSL, popped my theme I’d been working on last year into its own Github repo, logged into the server via SSH, and cloned the Git repo into the wp-content/themes directory. ‘Deploying’ updates to the theme will be a matter of SSHing in to the server and running git pull. Sure, there are heaps of ways to ‘improve’ this, but for hobby projects, there’s a fine-line between automating something to make it easier, and automating something so that you’re spending all your time fixing the automation. And even when something is working smoothly, I hate the nagging feeling that you don’t quite understand the build pipeline, and if something were to go wrong, you wouldn’t know how to fix it.
So here we are, a simple WordPress site, no Docker, no fancy build tools, just a one-click install from Digital Ocean, and I’m editing this on the Gutenberg beta plugin. There’s apparently been quite a bit of controversy in the WordPress community over the new editor (which makes sense, there are millions of WordPress users and it’s a big change!) But for an outsider, the editor feels so fresh and fun to write in, and it’s made me excited again to spend a bit of time hacking on a personal site.