I have kept a weekly (or bi-weekly) Confluence blog at Stripe for the better part of 4 years now. Every once and a while people ask why I do that. Here's what I tell them. It helps in performance review season: It's hard to remember everything you did when performance review season rolls around. Having a weekly blog of your work helps you easily catch up on documents I wrote, decisions I drove,…
I oftentimes talk about projects existing in three phases: meetings phase (defining the scope), building phase (building it) and shipping phase (converging and flipping the thing on). Transitioning between these phases is always a little chunky for different reasons. Recently I've noticed that I do a set of consistent things when moving between building phase and shipping phase. These generally…
When teams shifted to remote + hybrid work, they also needed to adopt a much greater emphasis on having a written culture. On our team, this came with an additional problem: we ended up with so many documents it was hard for us to understand which ones were important/unimportant. Shortly after that, we had a new manager joining our team and he gave us a few tools to manage this document explosion.…
As projects grow it can be difficult to keep track of all of the documentation associated with them. Between product requirements documents, design documents, meeting notes, and architecture decision records it can be easy to find yourself lost in a forest of Google Documents trying to find that one document which has the information you need. A while ago a friend told me about a simple model to…
During my career I've had the chance to work on teams of a lot of different sizes. During that time I've come to realize there are really six "buckets" of team sizes. At each bucket, ICs + team leads need to operate a little differently in order to be successful within those teams. The sizes are: 1 Person : Do what you want, YOLO 2 → 3 People : An ideal small squad. Team can stay in touch with…
One of the challeging things about being a technical leader is knowing how much time to spend on big-picture vision setting vs. writing code and solving the problems of today. Spend too much time on vision setting and you may start designing solutions which are disconnected from reality. However, if you don't spend enough time on vision your team will sputter over the long-term. Over the last…
A while back a friend gave me some important, but hard to hear feedback. She told me something to the effect of "you always assume other people are wrong, and it limits your ability to collaborate with people." I'd always considered myself a strong collaborator, so hearing that I actually had a long way to go was humbling. For the rest of the year I worked on breaking this habit with a simple…
Recently I had a shower-thought about the concept of "organizational neutral". "Organizational neutral" in my mind can be contrast with "Organizational fifth gear". You know you're in fifth gear when people are trying to pour gas on whatever thing you're working on. Users are flooding you with feature requests, your part of the org is getting as much headcount as you want, and people are generally…
Spend enough time working with domain experts on a problem and someone is bound to say "we should build a rules engine to solve this problem." Often this comes along with the goal of letting domain experts express rules themselves rather than having to evolve engineers. However, once you start to dig into this problem you'll discover that "rules engine" can mean many different things to many…
Recently I've found myself in situations where there's no right answer. In these situations it can be hard to know how to proceed and even when you do make some decision, it can be hard to communicate that to a team in a way that builds confidence in spite of the uncertainty. I've recently been watching some great leaders do this, and I've found that doing it well boils down to a few simple steps.…
Sometimes engineering teams find themselves in a situation where they're tackling a cross-functional problem with no clear path forward. In these cases it can be challenging for individual teams to break out of their silos and see the global problems, resulting in local optimization while the larger problem remains unsolved. Fortunately, teams can follow the structured process of a design sprint…
As you move from owning individual problems to owning projects, you'll often find yourself in a position where you're surfacing risks to your manager or other senior folks. Doing this well can be an art; on one hand you want to stay stay aligned with authority and make sure that leadership is aware of the problems. At the same time, constantly surfacing risks without helping mitigate them can…
Estimation is something that I've done for a long time, but I've never really felt like I've done it well . I started rectifying that by reading Steve McConnell's Software Estimation: Demystifying the Black Art . The book is chock full of great ideas, and I've summarized them here for anyone looking to quickly improve their estimation skills. Estimates vs. Targets vs. Commitments The book starts…
Teams often find themselves in a position where they need to figure out how much work they can commit to, most commonly in quarterly planning. If you've never done this before then wading through a world of possibilities to get to a commitment can feel impossible. Fortunately, I've found that a default approach can help you establish a plan reasonably quickly and with minimal overhead. Before…
One of my challenges at Nuna has been setting up team-level communications structures in the face of uncertainty. Going from 0 to 1 means that our understanding of the problem constantly evolves, and with that, our communications structures need to evolve with it. I've managed to grapple with that change through an approach I call exponential scheduling. Exponential Scheduling The basic idea of…
A while ago I was struggling with the question of "how do I get a project prioritized." I had an idea that everyone agreed was good, but it was languishing and other work was getting prioritzed. I talked to a mentor and he gave me a three-step process that I've since found very useful. The process goes something like this Step 1: Identify the decision maker Who is the person who can grant you the…
Over the past few months, a few people have asked me about my experience speaking and blogging, specifically through the lens of what type of opportunities it has opened up for me. My thoughts on this have been rattling around for a while, so I wanted to share them broadly in case other people have similar questions. Some background First, a bit of level-setting about exactly how much…
I had lunch with a friend yesterday, and he shared an interesting story. He was leading a large technical project at his company, and it started off fairly normally. They saw some fruit they thought would be low-hanging, ran the ROI numbers, wrote a project plan with clear milestones that showed value along the path, staffed the project, and started to deliver. Over time, they started to discover…
Over the years at Nuna, our data platforms have grown from small pipelines which served simple analytics, to large, polyglot pipelines which can help patients receive personalized doctor recommendations. As we’ve scaled, our inline documentation and README’s for specific libraries have been helpful, but haven’t been sufficient to help new hires understand how our whole system fits together. In…
Back in university I worked in a media office, and it seemed like all the creatives had two jobs in their life: their real job, and the thing they did on the side. Our graphic designers would run a consultancy, our photographers would put together a magazine, and our videographers would were constantly shooting for events or contests. I once asked the head of our office about this, and he sagely…
When building APIs, it’s common to run into a problem which is basically a form of “We want an API that will support a list of something.”. In situations like this, it can be tempting to just send back a JSON Array and call it a day. However, I've found that this is rarely the right decision, and by making a slight tweak to this design you can make your APIs much more extensible. To understand why…
Continuing to grow as a software engineer can become increasingly hard as you become more experienced. When you first learn to code, there are an infinite number of new things to learn; every algorithm, framework, or concept is brand new, so there’s learning at every turn. Best of all, this happens organically. If you've never written code before, the mere act of typing into a computer and making…
Feature flagging is a great way to reduce risk by allowing features to be turned off remotely, but only if it's done correctly. I recently incorrectly feature flagged some code at Yelp! and wanted to share some lessons learned to help avoid similar issues in the future. First, Some Context Our team is currently working on migrating our App's analytics system to use a new event logging library.…
I recently had a chance to give a talk at Android Makers about how to work with cross-functional stakeholders to create change. While I'm not an expert on that by any means, it was a good learning experience for me to decompose my thoughts on how I work with others. The video is now live on Youtube.
One of the first questions I got after giving my talk about mentoring new hires was (paraphrasing) "how do you deal with effectively mentoring people who are 1+ year into their time on the team?". This question has stuck with me over the past year, mostly because I didn't have a particularly coherent answer at the time, and I stumbled through answering it. Over the past year I've spent a lot of…
Currently at Yelp I'm working on building out our next generation experimentation infrastructure, a large part of which involves writing a Java wrapping library around a Rust library which does most of the heavy lifting of our experimentation. Yelp is mostly a Python shop, but we also have a few backend Java services; this meant that when we went to implement our Java wrapper, we decided to just…
I recently had a chance to talk about A/B testing at Droidcon SF as part of a talk called "A/B Testing From The Ground Up". The goal with this talk was to give attendees an overview of all the moving parts needed to get an A/B test up and running on mobile. The video should be up in a couple of weeks. In the meantime, the slides for the talk are below.
I recently presented a new and improved version of my talk on "Multiplying Your Impact Through Mentoring" presentation, this time at Droidcon London. A friend at Yelp suggests that the third time is the best time for any presentation, and after the fourth presentation it's time to retire the talk. I definitely felt like that was true this time, so I just need to find one last time to present this…
One of the more unintuitive things in professional software development is the idea that you should break your code up into small, fully functioning chunks, rather than shipping it all as one big change. After all, wouldn’t more changes mean more code reviews, more pushes, and more opportunities for production to break, all of which slow down the time spent actually building useful features? Yes,…
Every month, a group of engineers at Yelp get together for something we call the "technical roundtable", which is basically a big discussion group on technical topics that are challenging the company. Often, these focus on specific pieces of Yelp's technical infrastructure, but our most recent one touched on time management for mid-level to senior engineers. A lot of the takeaways were initially…
Whenever I hangout with mobile developers at meetups, I hear a bunch of misconceptions tossed around, but one of the most pernicious is the belief that designers are head-in-the-clouds artists, throwing pixels around without concern for what it will mean to implement their creation. On the surface, this comparison is apt; both artists and designers create visual artifacts out of ink, paper, and…
I recently presented an updated version of my "Multiplying Your Impact Through Mentoring" presentation at Chicago Roboto. The audience had some really great questions which made me realize I need to think more deeply about some aspects of mentoring and update my presentation the next time around. The slides that I presented are below
This weekend I had the pleasure of getting to attend the AI In Action Spring 2017 hackathon at Claflin University in Orangeburg South Carolina. AI in Action focuses on empowering K-12 students in rural South Carolina by teaching them to code. While I was there I gave a presentation on an aspect of interviewing that I think is really under-coached: communication. These are the slides from that…
Software engineers always talk about how code reviews are the single biggest thing to improve your code quality , but we often forget that putting your hard-written code up for review can be scary. We invest a lot of time in making sure that our code is perfect, so submitting it to someone for their critique can feel like putting part of our identity up for critique. Fortunately for you,…
I gave my first big boy conference presentation today at DevFest Minnesota! The topic was "Multiplying Your Impact Through Mentoring", which has been rattled around in my head a while because I think we as an industry do a pretty poor job of training mentors. The slides are below.
We’ve all been there before: you’re chugging away on a technical problem and suddenly you hit a brick wall you just can’t seem to get over. You’ve turned down every imaginable path, but still you’re getting behavior that seems like it was created by some sort of deity just to spite you. Fortunately, there is hope! Many projects, both enterprise and open source, maintain chat channels and mailing…
Over the past weekend I had the pleasure of mentoring at Hack The North in Waterloo, where I gave an updated presentation on how to have an awesome internship/co-op. The slides are live on Speakerdeck.
Today I had the pleasure of giving a presentation to students at stanford about how they can have a succesful summer internship. These are the slides from that presentation.
Every developer has their own little kit of productivity tools which they constantly expand over time. Unfortunately, I've found that the only way these tools get shared is when someone has a problem someone else pipes up "Hey, I know how to do that!", and passes on their tribal knowledge, only for it to be lost until the next person has the same problem. In the spirit of "sharing stuff I wish I'd…
Last week I gave a talk at Rutgers about how to make the most out of your summer internship. Over the past few years I've worked at a fair variety of companies, and I've screwed up a lot in the process. Before heading out into the world of a full-time engineer I wanted to codify some of the lessons that I've learned in hopes that future interns will be able to avoid some of the pitfalls I ran…
have You ever read an english essay so riddled with errors its tough to read. i'm not talking your normal run of the mill errors; I'm talking about really systematic misunderstanding of how to use punctation! If so, and you're reading this blog, then it probably evokes the same emotions as seeing code that looks something like this. public int foo_barnicate (int foo, float bar ){ if ( foo >= 0 )…
Back when I first declared my CS major at Rutgers three years ago, the community was a far cry from the vibrant and passionate one that characterizes Rutgers today. When I started, Rutgers computer science was a disparate collection of students who scarcely got together in groups larger than four people. Since then, the community has grown by leaps and bounds; its members have launched startups,…
It’s no secret that over the past three years hackathons have exploded across the country, bringing with them the opportunity for thousands of students to grow their coding skills and build a community of developers at their university. Despite this massive growth, it seems that hackathon knowledge is still spread by word of mouth, leaving some younger students wondering how to get started.…