This Thursday, it will be two months since I arrived in Sydney. I came to work on a specific project, and that project came with a pretty ambitious deadline. I don’t know if anyone, including the person who thought this deadline up, really believed we would make it. But we did, just about. We as a team, did. And that moment, where you can say, “yeah, did that” – pretty awesome. But there are moments that happen before that, where people start to look at what you’re doing, and say, “hey, you just might do that”, and those are pretty cool, too.
I ran this project. Which means if we didn’t make that deadline, it would be on me. Making it, well, good leaders give away credit and take blame. But I do get to feel satisfied. But the biggest thing I get to feel satisfied about, is that in the last two months, I have consistently worked around 40 hours a week. I have gone out, a lot, and found friends and things to do in Sydney. Got (kinda) settled in my apartment, even taken a day’s vacation. Worked out 4-5 times a week, and averaged 4.5k fuel points a day. My life is a little loopy, but it’s definitely diverse.
Extensive reading around personal development, and watching other people run things, and running my own, much smaller, things meant I had some ideas about Planning, Leadership, and keeping sane under pressure. So this is my three most important things in each area, most of which I tested by breaking at some point.
Software Development Planning In General
Eliminate your Known Unknowns
This is the most important thing. You have a feature set and a deadline, some things you know how to do, and some things you don’t.
The thing you don’t know how to do is the most important thing you need to do today. This unknown falls somewhere on the scale between being very easy, and being hard / time consuming / requiring someone else to change their thing / flat out impossible. The sooner you know what it is, the sooner you can adjust your estimates, or your features, to be more realistic.
Think Medium Term
I don’t hack. I worry, actually, that I literally can’t hack. I can’t fight with something, and be happy with a one line fix labelled “DO NOT TOUCH THIS”. I always need to understand why, and to rationalize why things interact, or work the way they do.
Hacking is short term thinking. I’m in a hurry, do this quickly, come back later. It borrows time from future-you, to save time today. But you don’t know when future-you is going to pay the bill. You might find it’s tomorrow (before you ship) – that’s the worst case. And hacks multiply, the more you have, the more expensive each one will be to fix, so here’s the next worst case, you ship something full of hacks, and now you can’t do anything interesting until you unravel them all.
The thing about long term thinking, is that the world is going to be different a year, hell, a month from now than it is today. Long term is an investment in the future, but you have no idea what the future is going to look like. Isn’t that one of the awesome things about working in tech? Everything changes, all the time.
Medium term is the balance, and I find when I think medium term I know what issues will result from that decision, and I know roughly when they will occur. Choosing X over Y will mean that we have to adjust some things, in a relatively minor way, if we do Z, but I’m confident Z won’t be on any of the next few iterations I’m OK with that, but document it somewhere.
Medium term is doing things that will get harder over time sooner rather than later. In this case, Y is a pain, but needs to happen for Z. If we do it now, it’s very easy, and has and intermittent slightly higher overhead for a while. If we wait, it becomes a huge problem that takes someone a long and miserable time to unravel.
Feature creep is the biggest problem with tight deadlines, and the temptation is always to slip things in because “things are looking so good”.
But why are things looking so good? Because you eliminated so much of this stuff. Because you were ruthless in the first place.
UX wants the widget to slide in and out, but when they realize it is as much work some feature, maybe they will reconsider.
I think it’s pretty easy to eliminate the large things, if you are ruthless about it, you’re clear about how long things take, and your PM and UX people are realistic. The thing to watch here is the small things. I find these are the things that I could fix in an hour or less, and it’s tempting to just agree to them, because it wouldn’t take much more time to write the code than have the conversation – and coding is more fun than having meetings! But I think you get 4-6 hours of good coding a day. So 4 “little things” and you’ve just allocated most of your day away, and were these things the most important things you could be doing?
Give Away The Stuff You Know
It is super tempting to look at the list of things to do, identify the things that you know and could do quickly, and just get cracking on them. You’ll feel an awesome sense of accomplishment, you’ll make super fast progress, and then there will be barely anything left, so that won’t take long at all.
This is complete nonsense. Especially if you have new people who you don’t know. If you give them something you know, you can evaluate how they do it, provide guidance, easily conceptualize it in the bigger picture. If there’s an issue with it down the road, you’ll be able to fix it.
And, importantly, you can instead work on one of your Known Unknowns. And when you’ve figured that out, you give that away too, so you are continually at the boundary of what you know and what you need to do, figuring out how it all fits together. You have the big picture in your head, and enough detail on everything to dive into it at need. Maybe you don’t know anything the best, but you can rationalize about everything, and that is really, really useful.
One of the biggest mistakes I made, that came closest to causing us to miss the deadline, was that I gave away something I only 50% knew how to do. I missed something crucial, and it became an emergency as a result.
This isn’t about being a control freak, it is about you knowing enough about everything, even if there is nothing you know everything about.
Learn Your Superpowers
I learned one of my most important lessons about leadership from someone I worked with, not at the time, a year after the fact.
We worked at a camp, and she was the director. A year later she tells me, “I always used to show you the numbers of how many kids we had in each class, because you would just remember them”. And so she could ask me at any time and I would just know. I could also lay out the classrooms in my head at need.
This, to me, was completely normal, so it didn’t occur to me that not everyone would remember a list of numbers after seeing them. But my friend knew it wasn’t, so she used it to make her life easier, and I never even noticed her doing it.
I think people can be really bad at knowing what they are good at. They don’t always value or notice things that are so natural to them that they don’t realize they are doing them. The more you notice about it, the more you can give people the things that they are fantastic at. The person who has a really good eye for UI flow, and usability, they get that slightly un-specc’d feature. The person who is really stubborn and diligent gets that tedious problem that is going to take patience and bloody-mindedness, rather than a flash of brilliance to fix.
Create a Space
This is about balancing the desire and need to shield your team from the outer world – politics, negotiations, long term planning, and the need to situate what you’re doing in some wider coverage.
Too little shielding, and too many people are worrying about things they have no control over. Too much, and your decisions can seem arbitrary and unfounded.
Some things are “PM problems”. I can’t do anything about them, but I need to know the status of them. I stay out of them and try not to worry about them. I probably want to share that there is a PM problem, when it is clear that it is going to hold something up.
Eng problems I’ll share as they come up. Like, I know it seems like I’ve gone mad on test coverage, but this is coming from these directions and this is why it’s important. I know it’s frustrating that we are doing X, but there is this medium-term plan of doing Y, and investing in X now pays dividends then.
Don’t Miss What You’ll Resent
I took a day off to go skiing. I knew if I missed it, I would be sad and resentful that I didn’t ski during the winter here. So I went, and it really energized me. Those things if you miss out on, you’ll really miss, you don’t want to lose out on those. Your work is part of your life, it’s not something that should happen at the expense of it. And your life is not something you should put on hold for something that is not 100% under your control.
Don’t Borrow From Tomorrow
My theory of working late is that in the best case I borrow time from tomorrow, and in the worst, I do that and I break things, which I then also need to fix.
So when I feel like I’m done, I go home. I go home well before I start breaking things. One of the things I find as a result, is that I am consistently productive 5 days a week. There’s less of a range. In grad school, I had insanely productive days, and some which were just a write-off. There was so much variance, that it was really hard to know how much I could get done in a given week. Now I have a pretty good idea, and I have evenings and weekend to myself, both of which greatly improve my happiness.
It’s Not Just Hours, It’s Energy
Last Thursday night, my friend and I are in a cab headed out to a comedy show. We were running late, because we’d both been completely absorbed in what we were doing and hadn’t really considered how we were getting there, or even where we were going, and there was terrible traffic.
And we got there, and had a great time, but waiting in the traffic jam, I admit that I think Thursday nights should be reserved for the gym and mall food (the mall food here is delicious, and the mall is only open late on Thursdays).
My friend says “Yes! By Thursday, I have made so many decisions, that if I don’t recharge I have no decisions left for Friday”.
Even the “worst” weeks I had probably didn’t exceed 45 hours. The most stressful day I had, I finished working before 5. But that didn’t mean I had any emotional energy left when I left the office for the day. I was exhausted.
And it’s hard to go out with someone new, when there’s really only one thing on my mind and I just feel like I have no conversation. I have to make more time to do things that recharge me – reading novels, hanging out at the gym watching How I Met Your Mother. The morning after the most stressful day, I went in late because I felt compelled to spend 2.5 hours in the gym before I could face the next onslaught. The biggest challenge I’ve had, is feeling like because I leave the office by 6 I have the time and energy for daily early morning workouts and going out almost every night, and I just don’t. I’d sooner work out in the evening, because it decompresses and de-obsesses me before bed. I want 9 hours sleep when I’m stressed. And that’s OK.