On process

Today I’m leading a session for Lead Dev Together on what makes a good process. LeadDev Together is a seven-part virtual event series featuring talks and panels from engineering leaders on topics like building motivation, increasing alignment, leading big projects, and building inclusive companies. Each session gives you and your team the opportunity to discuss what you’ve learned in a structured manner, using prompts, exercises, and discussion questions provided by speakers.

I am fortunate to get to kick-off the third part of the series on defining, refining, and aligning processes. I get to ask “What makes a good process?” and dive into three aspects of a good process that I’ve identified.

There’s still time to get a ticket to Lead Dev Together, which gives you access to all of the content, including a recording of my talk and my discussion questions. Today on the blog I’m sharing some new writing on process, inspired by that question: what makes a good process? Hope you enjoy it!

“I hate process.”

Have you ever heard anyone say that? I have. It’s a little surprising every time I hear it, because it’s so broad and vague. It’s kind of like saying “I hate books”. Or “I hate music.” Okay… but what kind? And in what context? Can you give me any more detail?

In my experience, people who say they hate process have worked in toxic environments where “process” emerged from a host of dysfunctions. They’ve worked on teams where slow, inflexible, and bloated processes festered in disorganization and bad leadership. On unhealthy teams, processes are scapegoated as the problem, when in reality process is undermined by other big issues, like micromanagement, pervasive fear and threat, poor communication, bullying, failure that leads to blame, poor inter-team dynamics, low alignment, and favoritism, among others. Ugly stuff.

So when I hear someone say “I hate process”, I get curious. Do they really hate the process itself? It’s possible, especially if the process was created without their input or buy-in and couldn’t be changed or challenged. I get it: I’d wither too.

But more often than not, they don’t hate the process: they just hate the way it’s been applied on teams they’ve been part of. They hate not having a say. They really hate what they’ve seen as waste: wasted time, communication, and cycles. Process is just an easy thing to blame: “if only our process had been better.” But this misses the point. Healthy processes rarely emerge from toxic environments.

The “by and buy”

The good news is, it doesn’t have to be this way. You can create processes that aren’t bloated, bureaucratic, inflexible, and full of waste. You can create, maintain, and modify processes that have buy-in and work for your team. You do this by asking the people closest to the work what’s working for them and where they need change.

I call it “the by and buy”: the process is created by the people who use it, and as a result, it has built-in buy-in. The first aspect of a good process is that it is created for and by the people who use it.

the Sharp End

Here I want to introduce an analogy from practitioners of resilience and safety in complex systems. In their book “Behind Human Error”, authors David D. Woods, Sidney Dekker, Richard Cook, Leila Johannesen, and Nadine Sarter identify groups of people called “the sharp end” and “the blunt end”.

At the sharp end, practitioners, such as pilots, spacecraft controllers, and, in medicine, as nurses, physicians, technicians, pharmacists, directly interact with the hazardous process. At the blunt end of the system regulators, administrators, economic policy makers, and technology suppliers control the resources, constraints, and multiple incentives and demands that sharp-end practitioners must integrate and balance.

At the sharp end, we have the practitioners: those closest to the work, doing the work. At the blunt end, we have the folks who dictate resources and constraints. When you see “sharp end”, think of the developers, designers, and DevOps engineers on your team: the people closest to the work, doing the work. When you see “blunt end” think of the managers, VPs, and executives: the folks who have historically been able to exert out-sized influence on products and processes, without feeling the direct pain of implementation.

And yet, the sharp end do so much more than just follow rules and processes.

(They) resolve conflicts, anticipate hazards, accommodate variation and change, cope with surprise, work around obstacles, close gaps between plans and real situations, detect and recover from miscommunications and misassessments.

Even when that’s not necessarily part of their job description.

Our folks on the sharp end, then, are the best equipped to tell us what is and isn’t working in our process and suggest changes and improvements. It’s likely that they’re already working around certain processes (or lack thereof) in order to get their work done. Inviting them to be co-creators of process with us just makes good sense.

Let’s partner with our “sharp end” to create processes that have buy-in and really work for all of us. The question for those of us on the “blunt end”: will we willingly cede our “power”, accept influence, and listen? We will put our ears to the ground, provide institutional support, and change as a result?

The word “change” is a good transition to the second aspect of a good process.

A good process is changeable.

As engineers, we understand the importance of building “change tolerance” into our software. Fundamentally, we understand and expect software to change.

In an article on Design, Jim Shore, author of The Art of Agile Development, defines high-quality software architecture this way:

“A good software design minimizes the time required to create, modify, and maintain the software while achieving acceptable run-time performance.”

And in their book Implementing Lean Software Development — a book about process – Mary and Tom Poppendieck say it well:

“Almost everything we know about good software architecture has to do with making software easy to change.”

Let’s apply the same principle to our processes. Like software, let’s expect them to change. Like input from our users, we’ll receive feedback from our teams and organization about what is and isn’t working. For our processes to have continued buy-in, they must reflect the changing reality of our teams and goals. As our teams grow and change, we must examine our processes and be willing to change them.

A good process is documented.

Software and processes both create artifacts of our work together. One artifact of software is code. One artifact of process is documentation. We can build in both change tolerance and inclusion by taking the time to document our processes.

Documenting our processes means writing down how we want to work together in the interest of consistency, transparency, and visibility. We don’t have to write long and overly formal documents. And we certainly don’t need to nail them to the door. Let’s instead create useful guiding artifacts that reflect our goals and values that we can look at when it’s time to reflect and change.

Taking the time to write these artifacts helps us, but the impact is felt beyond our team. This is because documenting the way we work together makes our work more accessible to folks outside of our team. Documenting our processes means taking the time to write playbooks, onboarding guides, tutorials, and SLAs. It means making it clear how to contribute to our work, what steps to take, how to file an issue, and where to go to get help. When we do these things, we write documentation. And when we write docs, we make it easier for others to join us.

These things do take time, but the investment yields big gains in our alignment as a team and org.

A good process has reflection and evaluation built in.

Our willingness to put in the work to create healthy, useful processes leads into the third aspect of a good process: our willingness to reflect and evaluation. Before change, comes thoughtful reflection. Here I think of the analogy of a code review or Pull Request.

When someone requests our review in Github, we don’t just open it and immediately click “Request Changes”. Nor do we rubber stamp it with LGTM. Instead, we take the time to read the PR, try it out in a test environment, and leave comments. We do this because while it might seem quicker to skip the work, we’ll have a higher rate of error and misalignment, which causes us to move slower.

Our processes deserve the same kind of thoughtful review. Because they are created for and by the people who use them, and reflect the changing reality of our teams and goals, we must be willing to build in time to reflect on our processes and consider how they are and aren’t working for us.

Talk one-on-one and talk as a team, too. You can use part of a 1:1 to discuss with your manager if a particular process is causing you pain. You can use sprint retrospectives or incident reviews to discuss how certain processes were part of the problem or solution. I also recommend that managers schedule time quarterly to meet and discuss larger team processes as a group.

On process… and writing this doc

In closing, I want to share a little story from the process of writing this doc. I wrote it as I’ve written many others: in a Google doc. I titled the doc “On Process” and the date, which made me laugh… because about ten years ago when I was writing my Master’s thesis I created a Google doc with basically the same name, but in a very different context. My Master’s thesis was on process philosophy, and in the context of the seminary where I earned my degree, on process theology. 

Process philosophy is based on the premise that reality itself is dynamic: that we experience our world and ourselves as continuously changing. Process points to the “processive” nature of Being or Existence, or how we are always changing and growing. In process philosophy, process is not a dirty word, nor is it something to fear or minimize. Instead, process is something to embrace, because it is our reality.

It’s not worth it to fight reality and the inevitability of change. When I create and evaluate processes, I’d rather embrace my lived experience. So I remember that all processes are above all by and for the people who use them: created by us to support us. It’s why I work to ensure processes are easily changeable–which coheres with reality itself, not to mention the principles of good software architecture. And finally, it’s why I build reflection and evaluation into the processes I manage, so that we are routinely and intentionally asking if the process still serves us. Things change, after all.

I went to a liberal arts school and a seminary, where they prided themselves on teaching us how to think, not what to think. If we cultivate these four healthy attitudes about process, we’ll avoid dogmatism and dysfunction and create supporting structures that make sense. In doing so, we’ll create a process that not only works for our teams, but in a deeply philosophical and metaphysical way, coheres with (one view) of reality itself. And how cool is that?

Thanks for reading.

Special thanks to my friend Matt Davis, known on Twitter as @dtauvdiodr, for introducing me via his work in the resilience community to David Woods’ concept of Sharp End / Blunt End.

Five years since Django Girls Atlanta

Today, it’s been five years since I hosted Atlanta’s first two-day Python programming intensive for women: Django Girls ATL. Since then, the women, coaches, and I have all grown so much.

I hope you’ll join me in revisiting the post I made then and celebrating how far we’ve come.

But today I also want to share a story from that day. Something I’ve talked about in keynotes — PyOhio comes to mind — but isn’t too widely known.

The night I launched Django Girls — after months of solo effort — I was crying in the bathroom because I found out I didn’t get yet another job as a developer.

Yeah.

You see, my goal was to make Django Girls Atlanta the friendliest, most supportive, and most caring introduction to code these women could have. I wanted to give them the Cadillac of coding workshops. I wanted them to have the world! I found the most empathetic coaches. The coolest space. The cheeriest decorations. The best prizes, before prizes were even really a thing. And of course this former chef would make sure the food was incredible–it was! You read the post, right?!

Django Girls Atlanta really became a model for other Django Girls events in many ways.

I wanted to give the women a Cadillac experience because I felt like that was the kind of introduction to Python they deserved. If they were going to do the hard work of learning to code, I was going to try to make them feel as supported and comfortable and safe as possible.

Django Girls was a truly special experience for me that I am so proud of. Many women went on to become full-time developers. It was a huge success. Looking back from five years, I am in awe.

But here’s the part of the story you haven’t heard–very few people have.

At the same time that I was learning to code and running PyLadies ATL and giving presentations at PyATL and planning Django Girls Atlanta… I was also trying to get my first job as a developer. Because of course I was! It was my dream!

I was a career-changer doing phone screens and tech interviews and in persons and building and deploying projects. I’d interviewed a lot over the last few months and was so full of hope that my dream of becoming  a developer would soon come true. After all, I’d quit my job six months prior to pursue this dream, and was living on dwindling savings. I even asked friends for help with my rent at one point.

Django Girls was a two day workshop. The first night everyone gathered together for a big meal, party, and time to set up your local dev environment. The balloons were blown up, the decorations were just right. People were arriving all smiles, so excited to get started.

Coaches were rolling in, too. And one of the coaches was the hiring manager for a job I’d just had an in-person interview for. I wanted this job so badly y’all! I hadn’t heard anything and it had been about a week, so I asked him about it.

We stepped into the hall. I could see our students excitedly meeting each other and the coaches. Squealing about the cute decorations, the cupcakes I’d made from scratch just that morning. Joy was in the air.

And he let me know that they would not be moving forward with me.

I was crestfallen. I remember exactly what I said:

“Ok, I understand. Thank you for letting me know. And thank you for being here tonight to coach Django Girls. I think it’s going to be a wonderful experience for so many and I’m glad you’re part of it.”

He thanked me too and went back inside.

I broke down. Sobbing, I rushed to the bathroom. I didn’t want to be seen. Minutes before our amazing workshop, I was crying in the bathroom, feeling like a huge failure.

Feelings I’d been struggling with for a while surfaced violently. Through PyLadiesATL and Django Girls I was devoting myself to getting other women excited about learning to code, saying “you can learn to code! You can change your life!”

I was telling women they could learn to code and change their lives and get jobs as developers…and yet here I was, jobless.  Just a learner with a blog and a willingness to spend all her free hours organizing coding meetups and workshops. Not “successful” in the way I wanted to be: as a developer.

I wrestled with this. Obviously, I wasn’t successful. But I held tightly to this belief, this hope, this faith, that if we all just kept working and supporting one another we would eventually get there together. If we had each other, we’d be okay.

And so I dried my eyes, went back into the workshop, and gave the women that Cadillac experience I’d planned.

We had a wonderful two days together. I checked in with each of them: how are you doing? How are things with your coach? Where are you in the tutorial? Can I get you anything?

And though I’d planned every little detail, it wasn’t the fun decorations or the tasty food or the cool space that the women kept bringing up to me. Of course they said they were thankful for these things. What they kept saying was how warm and welcoming I had been to them. How safe they felt. How I really made them feel like they could do this.

These women had no idea that the night before I was crying in the bathroom because I didn’t get a job as a developer.

I didn’t need to feel conflicted about encouraging others to pursue something I hadn’t yet done. This “problem” was merely an opportunity to be honest with others about how hard it really was. And in being honest, I could build an even bigger community.

I became an early advocate of talking openly about just how hard it is to learn to code. Of being real about the journey, and using frank language with each other about how challenging it is. How painful it can be. How isolating it can feel. How vulnerable you can feel asking for help. And why, because of these things, it is so very important to be supportive of the courageous people who are doing this very very hard thing.

So many people related to this message. More people spoke up, talked about how hard it had been for them. People who were struggling and frustrated felt comforted. More people felt willing to take the risk to learn. And so our community grew.

I share this story because my success and growth has always been inextricably intertwined with giving back & helping others. At every step as I sought to advance, I wanted to bring others with me. Even in the earliest, hardest, gnarliest and most hopeless days.

And you know what?

It was completely worth it.


Did you participate in Django Girls Atlanta 2015 and want to update the community? Please message me on Twitter at @adriennefriend, or use my Contact page on this site to give me an update. I would love to hear from you.

Leading senior engineers: lessons learned

As an engineering manager I’ve been fortunate to manage some extraordinary senior engineers: folks I personally looked up to prior to managing, recruiting, and hiring. (I’m not naming names in this post, but you can check my LinkedIn for ideas.) Over the years I’ve learned a few lessons about how to support them. It’s different in some key ways, but familiar and constant in others.

This blog post is for engineering managers who find themselves managing very senior engineers and want direction on how to be more effective. Read on for a compassionate dose of reality and actionable advice. 

Senior engineers are humble… but they still appreciate appreciation. 

In my experience, some of the most senior folks you will work with are also the least showy. You’ll rarely hear them crow about their accomplishments, despite the fact that they have accomplished a lot. And some may even seem to shy from the spotlight.

None of this exempts you from making sure they hear that their contributions matter. There’s no “one size fits all” when it comes to thanks, so take time to learn their appreciation style and communicate in a way that is meaningful to them. Ask how they feel valued, make note of it, and follow up. Some senior engineers need to hear “thank you” and a few words about how they made a difference. Others feel appreciated when you take something off their plate or take time to break down a big project with them. You won’t know unless you ask.

They do NOT expect you to be the smartest engineer in the room… but they do expect you to show up for them. 

Very senior engineers know better than to expect that you’re the smartest engineer in the room. You’re not the first EM they’ve had, and they’ve already seen how hard it is to balance contributing code and managing a team and how badly that can go (and likely, they’ve had to do it before, too). Their long career means they’ve seen a lot of dysfunction and have a keen sense of what they will and won’t tolerate on a team.

This means they expect you to be a strong leader for the team and address issues as they come up. Support your seniors by leveraging your strong communication skills to address and heal team dysfunctions and increase collaboration and alignment toward shared goals. Behave ethically and communicate transparently. Use your 1:1s to let them know what’s going on with the company and the team. Ask for their expertise and take their concerns to heart. 

And when they make a request of you, take them seriously. As I said, they’ve been around the block and know what they want. This is awesome because your senior is where she is because she is flexible, adaptable, great to work with, and has made a great name for herself through collaboration and excellence in her work. She’s a delight to work with and she doesn’t make too many demands. So when she does make a (rare) request, take it really seriously and show the heck up. 

Senior engineers know their work style… support it, even if it challenges your ideas about “how work gets done”. 

Senior engineers have been in the game for a while and know their work style and preferences. For example, one senior engineer I managed stressed the importance of Deep Work time. (I even read Cal Newport’s book Deep Work for better ideas of how to support them!) Another very senior engineer said they needed meetings to be scheduled, rather than ad hoc. When your engineers share their work style with them, it’s important to take them seriously. Remember, they know these things because they are accomplished professionals who have figured out how to be effective.

Managing exceptional individuals means expanding your ideas about how work gets done. It may mean flexibility on hours, location, co-working spaces, blocks of time unavailable, etc. When recruiting these folks, be realistic about what your company can and cannot offer in this area. (Don’t pitch your team as flexible if it isn’t.) This may mean challenging your preconceived notions about “how work gets done”. Allow yourself to be challenged. The trust you build in the process will be your reward. 

Senior engineers have seen some stuff… promote safety on your team by encouraging them to share their stories.

If you’re working on a team of mixed levels (very senior and very junior) it’s very common for the junior folks to be nervous about making mistakes in front of the very senior folks. This is not weird or unusual: most people don’t want to look stupid or careless in front of people they respect. And while this isn’t obvious to more junior folks, senior engineers know in their bones that they got to where they are by trying lots of things… and making lots of mistakes! Honor your senior engineer’s experience and humanity by encouraging them to get real with the team and tell their stories.

Build safety into your team by inviting your senior engineers to talk about their own growth path. When they share how they deleted the prod db (that didn’t have backups) it helps your team by humanizing them and making them more relatable. It reminds those junior folks that seniors are not infallible, and that making a mistake is an occasion for growth, not punishment or shame. It also helps the senior engineer by driving home that this is a team where it’s still safe to grow–where learning and experimentation is actively encouraged and rewarded. Taken together, this means a better connected, authentic team. 

Senior engineers have a LOT going on outside of work… make room for it on your team.

Senior engineers often get to where they are not only by excelling in their paid work, but by cultivating relationships and opportunities in our field outside of their day job. They’re mentors, board members, keynote speakers, authors, and open source contributors. No kidding: one developer I managed wrote Essential SQLAlchemy and taught courses for an online platform, while another served on both the Python and Jupyter Steering Councils. Supporting your senior means knowing them as a whole person, being aware of these commitments, and finding ways to make room for their passion at work. 

Why? Engagement. Cultivating a rewarding career or advancement path for very senior engineers can be a challenge for a lot of managers, and so often they just don’t do it… or they do it poorly. But seniors deserve better from us–they deserve the same kind of support we’d offer someone early- or mid-career. 

The thing is, it just looks different. Don’t just take advantage of their decade + experience by only having them cut code. Take seriously how they spend their time outside of work and find ways for them to make an impact on your team doing similar work: mentoring, teaching, writing, leading deep dives, and beyond. If FOSS is important to them and your company allows, support them in open-sourcing and sharing their work. And don’t ever forget that your senior engineer’s dedication to non-profit and open source work outside of their daily routine enriches the whole ecosystem that you live and work in. When they give, everybody wins. 

Related: remember, they’ve got options. 

If you’ve got a highly senior engineer working for you, they’re probably highly sought after. And if their inbox isn’t filled with recruiters, they’re definitely already well-connected. You need to make sure you’re providing an environment where they want to work: where they feel heard, respected, and like they’re growing, too.

That said:

Senior engineers are just like you and me… foster a team where they feel safe to fail, learn, and grow.

The danger of focusing on how senior engineers are different is that it will turn into hero worship, or will paint them as this precious object who needs to be protected and catered to. It will obscure this crucial point: that senior engineers deserve to be treated like everyone else on the team. This means creating a safe place to fail, learn, and grow. As much as you may respect and look up to them professionally, this highly motivated, successful, generous senior engineer you’re managing is still a human.

Being human means doing human things, like making mistakes, saying confusing things and getting frustrated. Your exceptional senior is going to screw up. They’re going to make annoying and obscure remarks. They’re going to have days where they don’t really look very productive.

Just because they’ve had a decorated career or gave six keynotes last year or were Engineering Hire 1 at your org doesn’t mean they don’t still want or deserve the same level of care and engagement you’d give others on your team. This means giving context, coaching, and feedback. I know what you’re thinking: really?! They care what I think? Yes! I can’t tell you how many times senior engineers said they learned something from me: a new way of approaching a problem, a different perspective, important context, etc. (And yes: it feels amazing every time.)

Your seniors are where they are because they have committed to their own growth. Don’t put them on a pedestal or expect them to be self-maintaining. I know a manager who said “I don’t need to do 1:1s with my seniors” because he felt this way. What a missed opportunity. Senior engineers need and deserve dedicated 1:1 time, career conversations, and a place to hear and share feedback. Make sure you are providing an environment where they still feel like they’re learning and growing.

By sharing feedback and context, appreciating their contributions, taking their work style and concerns seriously, and looking for ways to authentically support them, you can create an environment where senior engineers grow and thrive.

What’s next

Hey everyone, exciting news: I’m looking for a new job! Read on to learn more about me and what I hope to find.

In my two most recent roles, I directly managed the core engineering and Dev/Ops teams and reported to the CTO. I have a bias to action and growth mindset, and work well with leadership that shares these traits. The teams I’ve managed over the past three years have been remote and extremely senior.  For the past five years I’ve also advocated for, mentored, and sponsored early-career and underrepresented folks in tech through a variety of formal and informal initiatives and non-profits. Since 2015 I’ve given over two dozen talks and keynotes to technical and engineering leadership audiences.

I’m looking for a senior engineering management position where I can continue to build high-performing, inclusive teams founded in trust, transparent processes, and creative freedom and ownership. I excel at motivating engineers, increasing alignment, leading difficult conversations, and improving communication and collaboration. My goal is to enable, empower, and inspire developers to do some of the best work of their lives.

If you’re my direct report, you can expect me to bring joy, courage, and safety to our interactions. I’ll listen carefully and take what you have to say seriously. I’ll help you set goals and meet them, and then I’ll celebrate your wins with gusto—or quietly, if that’s more your style. And when we do incident reviews, I’ll create a space where your voice isn’t marginalized and you’re not afraid to share.

I’m excited to get to know your tech stack and tooling, even if it’s new to me. As a docs-taught career changer who went from Python and JavaScript to Kubernetes and Kafka, I’m up for a challenge. I even served as technical editor of a Python textbook! That said, I’ve never aspired to be the cleverest engineer in the room: as a developer, I have a growth mindset and am happy writing readable code, reliable tests, and doing thorough code reviews. Where I really shine is as a people manager, partnering with top engineers to make sound technical and architectural decisions.

I’ve been leading remote teams (across four time zones) for over three years and plan to stay remote, based in Nashville Tennessee. If your team is remote or is transitioning to remote and could benefit from a remote-first senior leader, let me know.

Sound like a fit? Awesome! Please check out my LinkedIn and send me a message. While you’re there, please read my Recommendations, as many are from former direct reports who offered to write about me.

Thanks for reading! Stay safe and healthy.

Updates and what’s next

Hey everyone,

A lot has changed in my professional life in recent months, so I wanted to share a quick update and some ideas about what’s next!

Saying goodbye to Verica

I am no longer working at Verica. I’m grateful for what I learned while directing engineering and ops at a very early-stage startup. Taken with my previous experience leading engineering and DevOps at a mature SaaS, I have a more well-rounded view of the challenges and opportunities of different remote teams–and three years leading them.

Kicking off Lead Dev’s Asynchronous AMA series

As we all grapple with the new reality that is a post-COVID world, Lead Dev is thoughtfully adjusting the way they deliver programming to support their huge audience of tech leads, engineering managers, and CTOs. I was honored to kick off their newest effort, Asynchronous AMA (Ask Me Anything), answering questions like how to get buy-in for 1:1s, how to discuss non-work challenges in light of COVID, and how to go beyond status reports to have meetings that matter.

Speaking at Python Web Conf

I’ve given over two dozen talks at tech conferences around the world, but it wasn’t until June that I gave my first talk at a fully online event: Python Web Conf! I had an outstanding experience. Read my thoughts on this event, and how to evaluate other online events, here.

Giving back at The Collab Lab

As a senior engineering manager working largely with very senior engineers for the last three years, I’d recently been looking for a new way to give back to the community: and I found one! I joined The Collab Lab as a Mentor, leading a cohort of exceptional early-career developers through a fully-remote eight-week intensive where they learn critical collaboration skills while building a production app. I’d love it if you read my recap about the transformative work we did together!

Becoming a Lead Dev author

Yep, the word is out… I’m now a Featured Contributor and Author at The Lead Dev! Over the next year I’ll be writing articles for an audience of tech leads, lead developers, senior engineers, and engineering managers, and CTOs on topics like performance management, compassionate feedback, and fostering a diverse and inclusive team and environment. My first articles will be coming out soon. Edit/update 8/21: my first post is up! Read “1:1 Foundations: best practices for conversations that count” at LeadDev.com.

Moderating Lead Dev Live panel on 1:1s — this week!

Join me and three other experienced engineering managers this Wednesday, August 12, at Lead Dev Live: a free, one-day virtual conference featuring talks and interactive panels from engineering leaders all over the world. I’ll be moderating a panel on 1:1s with Alexandra Sobhani (Google), Kwasi Ohene-Adu (Groovetime), and Spencer Norman (Mailchimp). We met up last week to go over what we’re going to discuss and let me tell you, it is going to be GOOD: we’ve got some amazing tips and resources to share.

And yes… I am now looking for a new team!

I’m excited to find a new senior management role on a team where I can have impact and improve communication and collaboration. Read more about what I’m looking for in this post.

Thanks so much for reading my updates! Of course, this is just the professional stuff. Like you, I’ve also been adjusting to life under a global pandemic and quarantine while missing my friends, family, and the most mundane parts of my “old” routine: the gym in the morning, spur-of-the-moment lattes, weekly grocery trips. My father passed away in July–I still don’t have words to describe the loss, but I’m hugely grateful for the outpouring of support I got from my friends in tech. I’m hanging in there, trying to stay positive and do as much good as I can. ❤️

The Collab Lab: Recap and retro

You might recall that in May I joined The Collab Lab as a Mentor, leading a cohort of exceptional early-career developers through a fully-remote eight-week intensive where they learned critical collaboration skills while building a production app. Well, guess what? THEY DID IT!

thats-a-wrap-collablab-Screen Shot 2020-07-26 at 12.03.52 PM

Shajia, Lily, Ali, and Luka built the product by pairing weekly. They opened, reviewed, and merged PRs. Each week they demoed their work in production in an engaging and thorough way. They were active participants in retros, openly sharing their joys, appreciations, wins, and thoughts on how things could be improved. They attended learning modules to level up on accessibility, effective code reviews, pair programming, and technical writing. Read our cohort’s official recap from mentor Stacie on dev.to.

Not only did they achieve all of the goals of the program, but they also followed the “campsite rule”: they’re leaving the place better than they found it. Yes, the Collab Lab is already a terrific program. But Shajia, Lily, Ali and Luka made it better by flagging opportunities to make the Github Issues and Acceptance Criteria more clear, and by filing new Issues for things we could to improve the program for all future cohorts.

The Collab Lab offered me a unique opportunity to offer the same kind of encouragement, enthusiastic support, clear communication, and compassionate feedback that I’d typically devote to my high-performing professional development teams, but at a non-profit. As a result, these incredible early-career developers now know exactly what it is like to work on a highly effective, psychologically safe team. It’s my hope that Shajia, Lily, Ali and Luka will use this experience as their playbook for the future, because they now know firsthand just how effective a safe, supportive team can be.

BIG thanks to founder Andrew and Stacie for inviting me to mentor, and for trusting and empowering me to lead. We worked great as a team, covering for each other when needed. As I said repeatedly, I am in absolute awe of the quality, thoughtfulness, and intentionality of the program that they have put together and continued to refine. Andrew and Stacie are the real deal, y’all — true allies, advocates, sponsors, mentors, speakers of truth to power. They care like few others, and they put in the work to show it.

So, to recap: would I recommend The Collab Lab? Will I mentor again? A-B-S-O-L-U-T-E-L-Y!

If you’re an early career developer with coding chops who wants to learn the collaboration side of code, you owe it to yourself to apply for the program. If you know someone who would benefit from learning the ins and outs of pair programming and code reviews in a safe, supportive environment, please let them know about The Collab Lab. And if you want to support our work (we are a non-profit!) please support us on Github Sponsors. It’s worth following Collab Lab on Twitter, too.

What’s next for me and Collab Lab? Well, I just can’t quit. I’m joining Cohort 9 as the Code of Conduct responder… and I expect it won’t be long before I sign up to Mentor again.

The Zen of Python Teams: COVID-19 edition

Recently I gave a talk at Python Web Conf called “The Zen of Python Teams: New Lessons (for a post-COVID world)”. My goal was to revisit the wisdom of the Zen of Python and use it to encourage developers and teams adjusting to working together in our new reality. Here’s how I think it can help.

The Zen of Python Teams: New Lessons for a Post-COVID World

It’s harder than ever to focus at work. Many of us have been thrust into remote work for the first time, or are balancing work-life integration like never before. Those of us who are still working, that is. Many of us have been laid off. And if we haven’t, we know someone who has: a friend, a spouse, a relative. We and our loved ones are dealing with some pretty heavy stuff, and it all makes work harder than ever. Communication is harder than ever. Conflict seems more frequent. We’re tired and stressed.

What could I or the Zen of Python say that would possibly make a difference?

We’re all doing the best we can right now. And I certainly don’t have all the answers, I’d like to try to help. I’m an experienced engineering manager who has been leading remote Python teams for over three years. No, I’ve never faced a global pandemic before, but I have learned some solid lessons about communication and conflict, building inclusive teams and transparent processes, and improving psychological safety among engineers. And reinterpreting the Zen of Python for teams is a strategy that gives me further clarity.

I’d like to help you adopt attitudes, processes, and practices that will help you grow and be part of happier teams who deliver better software, faster. Yep: even during a Global Pandemic. I want to give you tools to improve your communication, collaboration, and productivity so that you can deliver useful software and feel successful and connected during this incredibly stressful time.

Deliver useful software? Yeah. We’re still here to do that. I believe in shipping and the positive feedback loop it creates. This quote sums it up for me, from Intercom’s VP of Engineering:

“Shipping is your company’s heartbeat. Software only becomes valuable when you ship it to customers. Before then it’s just a costly accumulation of hard work and assumptions. Shipping unlocks a feedback loop that confirms or challenges those assumptions. It makes new things possible… (and) brings life to your team, product, and customers.” — Darragh Curran

Don’t forget that a healthy culture is critical to helping engineers ship software in any environment. You deserve to work and collaborate on a team where you feel heard, safe, and respected. And in our current crisis, a healthy team culture is more important than ever. Thankfully, the Zen of Python has lots to say about healthy culture.

So let’s talk about how to build healthy, psychologically safe teams that ship, informed by the Zen of Python.

In this post, I’ll introduce and cover six of the Zen’s famous lines. While these were originally written about software development, I’m interpreting them for teams.

“Beautiful is better than Ugly”

Words like “beautiful” and “ugly” are tricky, because we implicitly understand how subjective they are. That is, they require context to make meaning, and even then we could argue about it: one person’s “clean code” is someone else’s cave painting.

Where I come from, the word “ugly” doesn’t just mean the opposite of pretty. When applied to behavior, it means misbehavin’, being disrespectful, or making trouble. My grandma would say, “Stop actin’ ugly and behave!” Do you believe behavior can be “ugly”?

Have you ever seen “ugly” behavior on your development teams? Actions taken that have caused conflict or pain? Here are a couple of things I’ve seen: hoarding information—that’s when someone knows something helpful that they could share, but they don’t. I’ve also seen bitter, cutting code reviews—when the goal should be to critique code, not cut down people.

This kind of ugly behavior makes me recall Ron Westrum’s typology of organization cultures. Westrum wrote about three types of leadership that give rise to different types of team culture and communication. His types are pathological, bureaucratic, and generative. A team’s type will be reflective in its leadership, the way it approaches problems and conflict, and the way communication flows or does not flow.

We see the most ugly behavior on pathological and bureaucratic teams. On pathological teams, information is viewed as a person resource to be used in political power struggles, and the environment is characterized by fear and threat. People may hoard or distort information, or shy from taking responsibility for their actions, because they are scared. On bureaucratic teams, folks feel more loyalty toward their immediate team than they do toward their company and its goals. They insist on their own rules, on maintaining turf, at the expense of others and the organization.

On generative teams, in contrast, the leader emphasizes the company’s mission and they rally people around that mission. They ask, how can we accomplish our goal together? People feel like they can take risks, because they feel like risks will be shared, and they won’t be scapegoated. Failure leads to inquiry rather than blame or root cause analysis.

Westrum noted that leaders set the tone for their team, but we’re all still responsible for our own actions. So ask yourself, what kind of team do you want to be on?

We could debate “Beautiful” code all day; thankfully, kind behavior is more obvious. Being explicitly welcoming, sharing information freely, and making it safe to fail are just a few hallmarks of a healthy, generative team. In the examples to follow, I’ll cover specific strategies for improving communication, transparency, and psychological safety.

Explicit is better than implicit

Explicit is better than implicit makes me think of how important documentation is. Healthy teams document their processes and expectations. They provide playbooks and resources and onboarding guides and tutorials. They make it clear how to contribute, what steps to take, and what to do when you’re confused. They do this because documenting your processes makes it easier for others to join you.

Without good docs, people who already know each other can probably figure out how to get what that need. That’s because they’re sort of cheating by leaning on existing relationships to get unblocked and get their questions answered. But what if you’re a new person? You don’t have that shared context. You don’t know the back channels.

Documenting our processes makes our work more accessible to people who don’t look like us, or don’t already know us. If you want a diverse and inclusive team, you’ve got to take the time to document your process.

It’s also critical to be explicitly welcoming and clear about what you value and behavior your team will or won’t accept. Write a Contributing Guide for your project that outlines what steps need to be taken to get a PR merged, or how to open an issue, how to get help, or how Code of Conduct issues will be handled. Tell new Contributors explicitly that you want them there and need their help. If you feel your team has an issue with diversity & inclusion, raise it.

Screen Shot 2020-08-09 at 3.41.23 PM

Now is the time to be explicit about what you value.

Keep conversation about code in a public place, such as Slack, or on the Pull Request, is another way to lower the barrier to entry. If you use Slack or a similar tool, this means keeping your conversation about code in the main #engineering, #ops, or #feature channels, not hidden in Direct Messages or ephemeral group chats. Putting it in the open also makes it possible for anyone to learn from it, or jump in and help. This kind of documentation and transparency is critical on a remote team.

Simple is better than complex.

Developers build complicated features and solve complex requirements with sets of smaller, more straight-forward features. As humans, we build meaningful relationships and work through tough issues on a foundation of small interactions that increase trust with each other.

Small interactions like getting coffee and catching up. Talking about something other than work or code. Asking about a new game or movie you know they enjoy. Asking to pair program on a hobby project. Sharing recipes.

But wait, you say: we’re all working remotely now! The coffee shops are closed! SOCIAL DISTANCING!! There’s no passing in the hallway or catching up in the shared kitchen anymore. What are my options?

When I manage remote teams, I like to organize something called remote happy hour. Every week we meet for about an hour just to talk about our lives and get to know each other better. It’s easy and relaxing. And alcohol does not have to be involved (make mine matcha, please).

For some people it might feel tempting to skip a meeting like this one because you don’t really see the immediate value, but this kind of interaction counts as a deposit in your emotional bank account that you’re building with your teammates. You’re building that trust and that familiarity that you can lean on when things get tough. Because things will get tough.

“Here’s the thing about real work: it’s messy. It’s continually filled with trade-offs, goal conflicts, time pressure, uncertainty, ambiguity, vague goals, high stakes, organizational constraints, and team coordination requirements.” — John Allspaw

Real work is messy, and its messiness and pressure and ambiguity is frustrating and hard and painful and disappointing. “Real work” takes a real toll in the best of times, and these are far from the best of times. Let’s invest in our relationships and strengthen them. Let’s build up our emotional bank account so we’re ready when the real world makes withdrawals: when deadlines, stress, and team conflict threaten to deplete us.

Our relationships with each other are the most complex and complicated features of our lives. Like software, let’s build them with small but meaningful actions that show we care.

Errors should never pass silently.

With code, we can write more code to raise and log errors.

With humans, we have to rely other humans to tell us when we broke them.

Feedback is the tool we have to help others understand the impact that they have on us. We owe it to ourselves and each other to give timely, actionable feedback that describes what happened and the impact it had. On a healthy team, if someone screws up, they shouldn’t feel like they need to hide it. Or from it. We understand that people make mistakes and feelings get hurt, but we value each other enough to take responsibility for our actions and try to improve.

We don’t let issues pass silently, because we know that letting things pass silently damages trust on teams. The pain of giving or receiving negative personal feedback is only painful in the moment, but that’s temporary. Allowing it to pass silently is something that can accrue and damage teams permanently.

Screen Shot 2020-08-09 at 3.57.37 PM

Here’s a tweet I shared about how to respond to a developer who is feeling overwhelmed with shame for making a mistake. In this example, a developer approached me and said: “Oh my goodness, I am so sorry, I broke this thing, I fixed this thing, but I feel awful about it.” They were feeling shame for making a mistake.

But mistakes are normal, and I want folks on my team to feel safe to make them. I said you should respond my listening and hearing them, affirming and appreciating them, and reminding them that mistakes help us grow. I was careful about the way I responded because I love working on a team where we can be open with each other about our mistakes.

donttouchmygarbage-possum

It’s a signal that your that your team is on the right track if they can talk about their mistakes. If they’re hiding, yelling “don’t touch my garbage”, that can indicate that they’re scared. But if they want to show you their trash, that can indicate that they trust you.

So be kind to people when they show your their trash. It was probably hard for them. And let’s show enough of our trash that we get so used to it that showing our trash becomes something we enjoy doing.

It gets easier for us the more we do it. And let’s be real. MOST of us have got a LOT of trash right now. Let’s work extra-hard to make it safe to share and be ourselves in this tremendously difficult time.

In the face of ambiguity, refuse the temptation to guess.

When it comes to code, refuse the temptation guess at someone’s motives. Don’t git blame and suffer quietly: you’re only gonna cause yourself more pain! When you see code that frustrates or confuses you, don’t assume that someone is actively attacking you. Humans are complex and their actions are influenced by all kinds of ideas and experience that you may never understand or have access to.

Instead, care enough to ask where they’re coming from, what they were trying to accomplish, why they took that particular strategy. Reach out and offer to listen.

And if you can’t reach out to that person for whatever reason, try to get some context from someone else who might be able to help. Put your questions on the PR, open a Github issue, address it, confront it, be assertive. Challenge directly in a way that shows you care.

Now is better than never

When I was a developer, I had a single sticky note on my monitor. It read: “Doing and being wrong is a lot better than not doing at all.”

It’s something my engineering manager told me when I was being really hard on myself. He said it because he felt like I was holding myself back out of fear of messing up or being wrong. He wanted to remind me that our team, like my development environment, was a safe place to try things and fail.

As a manager, there comes a time in my relationship with each of my direct reports, no matter how senior they are, when I share that “sticky note wisdom” with them. Maybe they’re being too hard on themselves, or struggling to get started. Whatever the reason, encouraging them to “just start” seems to help. It doesn’t matter how many years they’ve been working as a developer, or how much they know about Python.

Everyone benefits, because we all can use a reminder to start where we are. To start, and try, even if we’ll be wrong or fail. We can do this without fear that we’ll be singled out or scapegoated. On a psychologically safe team, we feel safe to make mistakes because we understand that it is part of growth. A bias to action paired with a growth mindset is powerful.

Everything feels harder than it should right now, but we all have the opportunity to start where we are. In each moment, we can decide to be a force for good: for kindness and empathy, for taking care of ourselves, and for encouraging others. Now is certainly better than never.


Thanks so much for reading. How does the Zen of Python inspire you? Let me know on Twitter.

Navigating our new virtual reality: online tech conferences

Since March, shutdowns and cancellations related to COVID-19 are our reality. It’s especially clear in the tech conference space. Where thousands of Pythonistas should have been gathering in Pittsburgh for our beloved annual PyCon just weeks ago, we flexed to a small online event. Perhaps most stunningly, conference heavyweight O’Reilly Media recently announced that they’re shutting down in-person events permanently: farewell Velocity, Strata, OSCON.

I’ve given over two dozen talks at tech conferences around the world, but it wasn’t until this week that I gave my first talk at a fully online event: Python Web Conf! Presented by Six Feet Up and some of the IndyPy folks, I have to admit I was a little skeptical about how they would pull it off. How would they bring the same level of energy, professionalism, and attention that I’ve come to expect of an in-person event to a virtual one? Was it even possible?

And that’s from the perspective of a speaker. What about as an attendee? How do you decide if an online conference is worth the time commitment or registration fee? (Yep, while they may not pay for a physical convention center, online events still have costs associated.) What’s the unique draw of an online conference when we’re already spending all day on Zoom calls?

PythonWebConf_snakeLogo_compressed

As a speaker and participant, I can confidently say that Python Web Conference was OUTSTANDING and 100% worth it. From start to finish, every interaction I had with the staff/volunteers and attendees was an overwhelmingly positive one. In advance of the event, they mailed me a “swag bag” filled with great stuff: a custom t-shirt, stickers galore, sturdy notebook, even an Adafruit Feather nRF52840 Express. I felt fully supported by the production team as we did the tech test and went live. Big thanks again to Calvin, MaryBeth, Josh, Carol, Paul, and Casey.

Verdict: would I attend again? YES. Would I pay the registration fee to attend this online event? YES.

But what about other events? It seems like a new online gathering is popping up every week.

It can be hard to navigate our new virtual reality of online tech conferences. How do you know if one is worth your investment? Here are some questions to ask, and how Python Web Conf compared for reference (noted with ✅):

  • Do they have a strong, clear web and social media presence? ✅
  • Is their event website easy to navigate and lists need-to-know information: a useful About page, Speakers, Schedule, etc? ✅
  • Did they have a Call for Papers/Proposals? ✅
  • Have they published a speaker schedule in advance of the event? ✅
  • Do they feature a diverse line-up of keynote and regular session speakers? ✅
  • Do they have recognizable sponsors? ✅
  • What kind of tech are they using to host/stream the event? Is it accessible? ✅
  • If you have to pay a fee, is there a cancellation policy? ✅
  • Is registration handled by a legit ticketing service (e.g., Ti.to, Eventbrite)? ✅
  • Do they have a Code of Conduct? Statement on Diversity and Inclusion? ✅
  • Are you actually interested in the talks? Can you afford it? ✅✅

Of course, there may be other bonuses like an active Slack community, high-quality videos posted online, or a mailed-to-you swag bag (again, ✅✅✅). But this list will definitely get you started. Please let me know if there are other questions you ask to evaluate online events.

I’m so grateful that my first experience with online events was such a positive one. And I haven’t even talked about how my talk went!

Please read my next post to learn how to improve your communication, collaboration, and productivity so that you can deliver useful software and feel successful and connected during this incredibly stressful time.

Exciting news! Joining Collab Lab

As a senior engineering manager working largely with senior engineers for the last three years, I’ve been looking for a new way to give back to the community, and particularly to early-career developers. Yes, I’ve informally been mentoring, coaching, and advocating for them–from connecting them with hiring managers to setting up ad hoc video calls, from reviewing resumes to sending encouraging texts on the morning of interviews–but I haven’t worked directly with early-career folks since leading PyLadies and Django Girls… until now!

I’m excited to share that I have joined The Collab Lab as their newest Mentor. In the role of Senior Engineer and Product Owner, I’ll be leading cohorts of early career developers through a fully-remote, eight-week intensive where they build and deliver a production app using React, Firebase and Netlify.

Collab Lab is special because the program focuses on the collaboration side of working as a developer. The program accepts skilled early-career devs who have coding chops, but want to get experience with the day-to-day mechanics of working as a developer on a team: by pair programming, doing code reviews, and submitting and merging pull requests. Participants are also coached on how to be effective on a fully distributed (remote) team by experienced engineering professionals who work remotely.

The program is also committed to providing a harassment-free experience for everyone. Everyone associated with Collab Lab — mentors, admin, and participants — must agree to abide by the Code of Conduct. Issues are handled by the Response Team, a group of folks professionally trained on Code of Conduct reporting by Otter Tech Diversity and Inclusion Consulting. I’m also on the Response Team and will be serving as the CoC responder for a future cohort.

Screen Shot 2020-08-09 at 11.38.47 AM

I’m thrilled to partner with experienced mentor and program lead Stacie to lead this exceptional cohort. With encouragement, enthusiastic support, and direct, compassionate feedback, I’ll model the kind of leadership and collaboration that has helped me build high-performing engineering teams. I hope they’ll come out of Collab Lab with a clear idea of what it is like to work on a highly effective, psychologically safe teamand that they’ll use this as their playbook for the future.

I can’t think of a better way to spend my summer.

Lead Dev Async AMA Recap: beyond status report

Welcome back to the Lead Dev Async AMA recap, where I’m recapping the conversation we had over on the Lead Dev Slack to kick-off their newest community series. In each post, I share a question that was asked in the series, and how I answered.

Today I’m responding to a question I’ve been asked a lot: how do you get direct reports to go beyond status reports and share how they really feel? This question is great because it was asked by both an engineer and a manager. I’ll start with the question from the manager and my response, and finish with the question from the engineer.

This is my last post in this series.

caring-hands

Going beyond status report: for the manager

I know it’s important to use 1:1 to get ahead of issues before they become real problems, and to make sure I’m hearing what’s really going on. But I also know it can be hard to get my direct reports to open up and go beyond the kind of day-to-day “status updates” that are really better suited for other meetings. Do you have any prompts you’d suggest I use to encourage my direct reports to open up?

I like to open 1:1s with open-ended questions: how are you? How are things going? What was hard this week?

By design, open-ended questions allow your report to lead you. I tend to listen carefully to what they choose to share, and ask follow-up questions that show I’m engaged and I care.

If your direct report is quiet or reluctant, I find it’s worth saying aloud: this is your time. I really care about you and your success here. 1:1s are a time for us to talk about what matters… even if that means you have feedback for me, or have to discuss something that’s uncomfortable or hard. Know that I’ve got your back and that I’m committed to you, even it’s hard. We’ve got this.

You can demonstrate your commitment to this kind of open sharing by routinely and proactively soliciting feedback. Recently in a 1:1 I asked one of my senior directs: “What is missing on our team right now? If you could snap your fingers and change our team for the better in some way, what would you do?”

But not only did I ask the question, I immediately followed by saying: “I really want to know: even if means you have some difficult feedback for me about the way I’ve been leading. I’m ready, open, and need to hear it! And if it’s hard, I promise I can take it—we’ll work through it together. And the team will benefit for it.”

We ended up having a pretty amazing conversation, and he shared deep, descriptive feedback about how we could improve the way we were working together—on the team. His feedback wasn’t even about me, but knowing that I was open to truly hearing what he had to say made him feel safe to share and take us where we needed to go.


Opening up: advice for a developer

I’m currently working as a developer. Do you have any advice for me on how to get out of the “status report” habit and be more open to sharing the tougher stuff? With the power dynamic and my own tendency to please, I can find it really hard to dive beyond the surface and talk about what’s bothering me, or how that project really went. I know my manager needs to hear that stuff to help the team, so I want to be able to open up. How do you raise the safety and comfort level with your manager and break through the awkwardness?

Your question about how to be more open sharing the dark side really touched my heart. I can tell that it’s important for you to be known by your boss and share what matters to you. What a huge opportunity they have there. My mind immediately goes to wondering, what kind of relationship do you have with your manager, and what have they done to make you feel safe to share?

If your manager is already in the habit of saying things like I’ve mentioned above and in the talk—this is your time, I want to hear it even if it’s hard to say, we’ll work through this together—then I implore you to take them seriously and try. I know it can be hard to trust, so take small steps as you grow your confidence. I once worked with a wonderful person who was tremendously shy. The first couple of months we worked together, I worked hard to get them to open up to me about their challenges at work, and it took a while, but eventually they did. It was entirely worth the wait.

On the other hand, if your manager hasn’t already taken actions to try establish trust with you, consider if there are company values or norms that you could bring up when approaching them. For example, if your company says they value transparency, you can lean on that when you bring up your concern with your boss: “I’m sharing this with you today because our organization values transparency, and the way that manifests for me is in sharing foobar with you today.” Or if your company says they value teamwork, you could say, “I love working for a company that values teamwork. Recently I’ve noticed baz about the way we work together, and wanted to see if we could talk through an experience I had, or some feedback I want to share.” Using stated company values or norms is usually a safe and productive jumping off point for hard conversations.

Your question about breaking through the awkwardness made me smile. I will say, it really helps to have a manager/CTO, as I did, who is committed to creating a psychologically safe environment. I absolutely had that at Juice Analytics, where my boss, CTO Chris Gemignani, was 100% willing to hear feedback even when it was hard. We were able to have awkward conversations where I felt awkward and he felt awkward too because more than feeling awkward, we felt SAFE. Above anything else, I hope everyone in the Lead Dev community gets to work in a psychologically safe environment. It’s transformative.

Finally, I am one to embrace, or make friends with, awkwardness. Have you ever heard the phrase, “get comfortable with being uncomfortable”? There’s some real value there! When I feel awkward, I try to notice how it makes me feel, acknowledge it, and let it pass without internalizing it or judging myself. It’s tough, but it’s worth a try.


What do you think? How do you go beyond “status report” to have conversations that count and meetings that matter? Do you embrace the awkwardness, even though it’s hard? I’d love to hear your thoughts.

This concludes the AMA recap series! I hope it has been helpful. Please let me know on Twitter if you have other questions or want to keep the conversation going. I’m here for you!