Day 29: Death to Superman

Have you ever worked with a large team on a complex project? Usually there is a mix of experience levels, and those with more experience create the application design as well as the workflow that everyone will use. They also serve as the disseminators of information, especially when a new member joins the team. They are the resources that help everyone become more productive

At least that’s how it’s supposed to work. In a company with a good development culture, knowledge is freely shared, and the goal of the senior developers is to help create new senior developers.

In other situations, there is a different dynamic: the overall knowledge of the project is in the brains of a select few developers, and they consider the intricacies of the application their domain. Often it isn’t a group, but rather a single individual in that role. They begin to act like Superman: swooping in to save the day in a manner that only they can do.

This is common in companies without a healthy developer culture. Typically there is a sole developer assigned to create an application, so of course they are the only one who knows how it works. Or the project could have started with a small team, and eventually everyone leaves the project except for one. Other teams that need that functionality need to go through this person, who is now the bottleneck, the gatekeeper. As new people are added to the team, this one developer keeps them dependent on him (yeah, it’s usually a man) by only sharing bits of knowledge only as needed, and not educating the new members. He tends to treat the other developers as inferior, and as a result, no one else feels competent to handle the work that Superman can do.

Back in the ’90s when I was a junior developer I was placed on a team that had exactly that dynamic. Someone would have a great idea, but nobody would act on it until that one lead dev signed off on it. People were even a little afraid to say that they thought it was a good idea, because if this Superman figure didn’t like it, he wouldn’t simply explain why. Instead he’d make you feel dumb for not understanding every implication your change would have.

Of course, when he wanted to change something, he just did it without involving anyone else. It wasn’t unusual to come in one day to find the part of the code you’d been working on had been changed, or sometimes even deleted. Needless to say, there was a general unhappiness on the team.

After a few months, Superman started throwing his weight around with our boss, taking the attitude “you can’t afford to lose me”. It worked for a while, but after one particularly obnoxious outburst, our boss called his bluff, and Superman quit on the spot and stormed out. Everyone on the team was both relieved that the source of tension was gone, and also afraid of how much more work this would mean for us. We were all afraid that the project would founder, and we would have to re-hire Superman, who would then be even more insufferable.

To our surprise, it wasn’t all that bad at all. Everyone started exploring the code base a bit more, now that we didn’t have Superman to supply that knowledge and make those changes. We started talking among ourselves about things we thought needed to be changed, and team members who were always quiet began to speak up more. The entire dynamic of the team changed for the better. And instead of the project falling apart without Superman to lead the way, it got better. Maybe no single person knew the entire code base like he did, but we all learned a lot more, and with people working together, got more done. We divvied up the code so that each person was responsible for learning that part well enough to be a resource to the others. Knowledge was once again being shared.

So while it’s good to have some knowledgeable people on a team to serve as guides for the newer members, it can become toxic with the wrong people and the wrong environment. If you’re on a team with such a toxic member (or members), don’t worry about what would happen if they left the project. Inevitably, the team will be better off without them. Speak with your manager if they aren’t already aware of the situation, and try to come up with a plan to spread the knowledge around better. And if you are told that they think things are fine the way they are, that’s a very strong signal that it’s time to update your resume. It’s not worth the mental toll to remain in a toxic environment.

Day 10: Missed Opportunity

It’s been a little over 2 months since I became one of the 40 million people in the US who lost their job as a result of the COVID-19 pandemic. In that time I’ve been reaching out to people in my network, tracking LinkedIn regularly, and keeping an eye out for a new opportunity.

I’ve applied to over a dozen companies, and out of all of those, only one even bothered to write back that they didn’t think I was a good fit for them. For the rest, it was as if my application had been sucked into a black hole.

Until yesterday. I got an email from a well-know tech company saying that they were impressed by my experience, and so we arranged for a video interview with the hiring manager. Finally, it seemed, the world of employment wasn’t looking so bleak!

For the record, it is not my intention to embarrass this company, so I shall not name them. They seemed genuinely interested, and the people I dealt with were both professional and pleasant.

The interview yesterday went well. I was impressed with the hiring manager, who seemed very sharp. I got the impression he was likewise impressed with me, since he told me he would refer me forward to the next phase of the interview process.

A couple of hours later, though, I got a call from someone in HR at this company. The hiring manager had mentioned to him that I was looking for remote work, which I always state clearly up front. It turns out that even though their entire company is working remotely now due to the pandemic, once that’s over they expect everyone to work from one of their offices. In other words, though working remotely has kept the company running, they will not hire anyone who isn’t located where their offices are. As I am not in a position to relocate now (and besides, I love San Antonio!), I politely declined to continue the hiring process. The HR person mentioned that there is talk of opening up the company to hiring remote workers, so I told them that if that ever happens and I’m still available, I would be glad to help them transition to a remote-friendly culture, as I do have a bit of experience with it.

Before the pandemic, it had been very difficult for me to understand why so many tech companies resisted remote work. I suppose its the old “if I can’t see you, how do I know that you’re working?” attitude. But now that they have been forced to do it by circumstances, you’d think that they’d realize that there is no reason not to embrace it, and many reasons to do so:

  • You now have access to a much wider pool of talent
  • Relocation expenses are eliminated for most hires
  • The amount of office space you need to run your business is kept low
  • Processes are documented better
  • Workers are generally happier

One of the supposed advantages of working in an office is the spontaneous conversations that happen – the proverbial “water cooler” discussions. Sure, these can be helpful, but all too often the fruit of those discussions is never recorded. When you work with a distributed team, it forces you to document these things, usually in email or a Google doc. Such documentation is helpful for preventing misunderstandings down the road.

Unfortunately, it seems that many companies are cutting edge of tech, but very slow learners when it comes to hiring remote workers. So I’m back to looking for openings and filling out applications. And that company is back to looking for the talent they need to grow.

Damned If You Do

The recent spate of canceled conferences, sporting events, etc., due to concerns about spreading infection of the coronavirus COVID-19 has made me think about what will happen if these efforts are successful.

Back in the late 1990s, people realized that a lot of software written in the mid-20th century had a problem: due to the expense of storage, programmers shortened the way years were stored, so that something like 1978 would be stored as 78, with the century assumed. This was fine, but as that software aged, and the coming change of century approached, it was realized that many critical software problems would go from December 31, 1999, to January 1, 1900. This was the Year 2000 problem, commonly abbreviated as Y2K.

Having recognized the issue, most software companies invested heavily in updating their software to use full 4-digit representations for the year. It was tedious work; I personally had to write a series of tests for my projects that verified that things would continue to work in the year 2000. But because the warning was heeded, by the time that January 1, 2000 came most software had been updated. As a result, all of the doomsday scenarios (such as planes dropping from the sky) had been avoided. Yes, there were some billing glitches that were missed, but because of the intense efforts to address this problem, there were no serious problems.

What was the public’s reaction to this? Did they laud the developers for successfully averting a potential problem? Of course not. Instead, they reacted with disdain: “I thought this was going to be the end of the world! Nothing happened!”.

And that’s the point: because the warnings were heeded, and action was taken, nothing catastrophic happened. It didn’t mean that the problem wasn’t real; it just meant that the tech community understood the problem, and addressed it head-on.

So I’m wondering what will happen if the common-sense steps we are taking now to avoid spreading this virus ends up that not that many people get sick or die: will the Fox News people start complaining that it was all a politically-inspired hoax? That the liberal media tried to make Trump look bad by crying wolf? It almost makes me think that if there is a terrible body count, people will be ridiculed for taking ineffective steps, but if there isn’t such a terrible outcome, the steps that were taken will be ridiculed as overreaction, or, even worse, a political stunt.

Damned if you do; damned if you dont.

Why Go to a Tech Conference?

Good question! It does seem unnecessary, especially since most major conferences record every talk and make them freely available online. PyCon has been doing this for many years, and are so good at it that the talks are available online shortly after they are finished! So there’s no real penalty for waiting until you can watch it online.

I suppose that if you look at tech conferences as simply dry tutorials on some new tool or technique, the answer would be “no, you should save your money and watch the sessions at home”. But there are much bigger benefits to attending a conference than just the knowledge available at the talks. I like to think of it as pressing the restart button on my thinking as a developer. By taking advantage of these additional avenues of learning, I come away with a different perspective on things: new tools, new ways of using existing tools, different approaches to solving development issues, and so much more that is intangible. Limiting yourself to the tangible resources of a conference means that you’re missing out. So what are these intangible things?

One of the most important is meeting people. Not so much to build your social network, but more to expand your understanding of different approaches to development. The people there may be strangers, but you know that you have at least one thing in common with them, so it’s easy to start conversations. I’ve been to 14 PyCons, and at lunch I make it a point to sit at tables where I don’t know anyone, and ask the people there “So what do you use Python for?”. Invariably they use it in ways that I had never thought about, or to solve problems that I had never worked on. The conversation can then move on to “Where are you from?”; people usually love to brag about their home town, and you might learn a few interesting things about a place you’ve never been to. Many people also go out to dinner in groups, usually with people who know each other, but I always try to look for people who are alone, and invite them to join our group.

Another major benefit of attending in person is what is known as the “hallway track”. These are the unscheduled discussions that occur in the hallways between sessions; sometimes they are a continuation of discussions that were held in a previous talk, and other times they are simply a bunch of people exchanging ideas. Some of the best technical takeaways I’ve gotten from conferences have come from these hallway discussions. When you’ve been to as many PyCons as I have, there are many people I run into who I haven’t seen since the last PyCon, and we can catch up on what’s new in each other’s lives and careers. Like the lunchtime table discussions, these are opportunities to learn about techniques and approaches that are different than what you regularly do.

Closely related to the above is the “bar track”. Most conferences have a main hotel for attendees, and in the evening you can find lots of people hanging out in the bar. The discussions there tend to have a bit less technical content, for obvious reasons, but I’ve been part of some very technical discussions where the participants are all on their third beer or so. But even if you don’t drink alcohol, you can certainly enjoy hanging out with your fellow developers in the evening. Or, of course, you can use that time to recharge your mental batteries.

Yet another opportunity at a conference is to enhance your career. There is usually some form of formal recruiting; if you’re looking for a change of career, this can be a valuable place to start. I’ve heard some managers say that they won’t send their developers to conferences because they are afraid that someone will hire them; it makes you wonder why they think their developers are not happy with their current job! But even if you’re not looking to make a career move at the moment, establishing relationships with others in your field can come in handy in the future if your job suddenly disappears. You can also learn what companies are looking for skills that match yours; I was surprised to learn that companies as diverse as Disney, Capital One, Yelp, and Bloomberg are all looking for Python talent. As an example, back at PyCon 2016 I met with some people recruiting for DataRobot, and while I didn’t pursue things then, they made a good impression on me. When I was looking for a change last year and got a LinkedIn message from a recruiter at DataRobot, I remembered them well, and this time I followed up, with the result that I’m now happily employed by DataRobot!

Unfortunately, I’ve seen people who arrive to a conference with a group of co-workers, attend the sessions, eat with each other at lunch, and then go out to dinner together. By isolating themselves and confining their learning to the scheduled talks, they are missing out on the most valuable part of attending a conference: interacting with your community, and sharing knowledge with your peers. If this sounds like you, I would advise you to try out some of the things I’ve mentioned here. I’m sure you will find that your conference experience is greatly improved!

Moving On

It’s been a great run, but my days in the OpenStack world are coming to an end. As some of you know already, I have accepted an offer to work for DataRobot. I only know bits and pieces of what I will be working on there, but one thing’s for sure: it won’t be on OpenStack. And that’s OK with me, as I’ve been working on OpenStack in one form or another for 10 years now.

Wait a moment, you say – OpenStack is only 9 years old! Well, before the OpenStack project was started, I worked on Swift briefly when it was an internal, proprietary project at Rackspace. After that I switched to the Cloud Servers team, which was the team that started Nova with NASA. So yeah, it’s been a full decade. That’s a loooonnnnggg time to be on any development project!

So the feelings of burnout combined with the shift away from OpenStack within IBM made moving to DataRobot a very attractive option. And after having done several video interviews with the people there and getting their impression of life at DataRobot, I’m that much more excited to be joining that team. I’m sure that for the first few months it will be like drinking from the proverbial fire hose, and that’s perfectly fine by me. It’s been much too long since I’ve pushed the reset button for my career.

Over these past 10 years I have made many professional contacts, some of whom I consider true friends. I will miss the OpenStack community, and I hope to run into many of you at future tech events – PyCon, anyone?