I've been the only engineer on my current project for a few months. That's been great in a lot of ways. I'm way more confident in my technical abilities than I was at the beginning of the year. I built a thing! And it works! I've had to puzzle out some things on my own, especially about the data model, that I think are going to stick a little better because I finally didn't have a pair who knows more than me to crib off of.
And – I wrote every line of code on this project, which means I understand every line of code on this project. It's pretty messy in a lot of places – but for every "wtf" I can remember, "oh right, that was the convenient way to add [feature] and I haven't gotten around to doing [obvious next refactor] yet." It resembles a lot of codebases that I've joined partway through, but I have a very different perspective on it because I've been here since the beginning.
And – happily – I haven't been truly solo. This is a three person project and we have a PM and a designer. I've paired a little with each of them, and expect to pair more with my designer later this week.
We had our first real IPM over the weekend and it was just lovely. Lots of conversations about interaction design, lots of small stories written intent-first. First time I've worked on an everyone-is-bought-in-to-the-way-we're-doing-things product team since – well, frankly, maybe since before the acquisition. Post-IPO, pre-acquisition Cloud Foundry was a weird time. I wasn't the only person on the downward slope towards burnout back in 2019.
Cloud Foundry was a great learning environment, but that's partly because it was such a stretch for me, the whole time I was there. When I started at Cloud Foundry I suddenly jumped from "I can write some lil' Ruby scripts!" to writing Cloud Formation (back when that was a pretty new thing) for a distributed system with a dozen components. That's how I learned what a CIDR is. It was very much "the deep end" – and as soon as I started to get my feet under me technically.
It's nice to come back to this balanced team, Extreme Programming, iterative development product work after a long break, with more experience. I'm feeling comfortable and powerful in a way that I only occasionally felt at Cloud Foundry.
Increasingly I think the particulars of process matter less than a quality that I would call "experience" except that I've known relatively junior people who have a more of it than more senior people. It's some combination of "awareness of options" and "confidence in your choices." You can get both from experience but you can also get them from reading good books and taking them seriously.
Whatever you want to call it – I've got more of it now than I did five years ago, and a lot more than I did ten years ago. A lot less of what I know how to do is pure theory, and a lot more is "things I've done a few times."
What I'm not doing on this project, though, is pairing – the serious kind, where it's the default, and a major part of my workweek. I haven't done that since sometime in 2020. I've been on a few teams where maybe half a day or so of pairing a week was common, but it's not the same thing.
I was ambivalent about pairing, for a long time, and I sought out environments that were also ambivalent about it. Lots of treating pairing like radioactive fuel – powerful, but you'd better be sure to strictly limit your exposure.
A lot of that was a lack of confidence. So much of my pairing at Cloud Foundry was with people who knew way more than me. Even when I paired with people who had just graduated – they had CS degrees, and I didn't, so while there was lots that I could teach them about software engineering in general and Cloud Foundry in particular, there was a lot of "basic" stuff that they knew and I didn't. They were often much better and faster coders than me. This was often great fun – I hope I never get to a point where I feel like I don't have a lot to learn from new people! – but I put a lot of wear-and-tear mileage on my ego during those years.
Which is one of the things that I like about pairing, too, and miss about it. I could not have handled that much raw not-knowing without pairing. Just psychically would not have been able to cope. It was a standard line, at Pivotal, that it would take about six months to stop feeling tired all the time – with the implication that this was because of the time it took to adjust to pairing. With some hindsight, I don't wonder if it was actually how much time we spent writing code, compared to people who don't pairing.
I miss being able to do that raw volume of work. I miss the feeling of being on a team that pairs. The level of collaboration skill. The pace.
I'm not sure if I will ever work in an environment like that again. I mean, probably. I hope so. Almost certainly on a small level – a consulting engagement, sure. But a scaled product organization? There's no where out there now that is what Pivotal was. Mechanical Orchard is trying, I think – though they're moving workloads, not building new ones.
Even the project I'm working on right now – it's going to need to stay small for a long time, and even if it does get to the revenue numbers where it could make sense to hire another engineer, I'm not sure I have it in me to do management again. It's never going to be working system that I can just join.
I don't have an actionable takeaway here or anything – except that I hope I'm not the only person out here trying to make something new that does XP, from the very beginning.
More soon,
- Nat
Man, I miss pairing
I miss being able to do that raw volume of work. I miss the feeling of being on a team that pairs. The level of collaboration skill. The pace.