How to be better at everything

This post was originally published at notebook.drmaciver.com.

I’m undergoing one of my periodic attempts to be better at Slay the Spire, and setting myself a challenge of win streaking on Ironclad A1 (mimicking Baalorlord, albeit at a much lower level). My best win streak so far is 8, which I consider respectable but not as good as I’d like.

One of the things that is very obvious at my current level of play is that the bottlenck on getting better isn’t actually skill. I’m plenty skilled enough to play better than I currently play. The bottleneck is that I don’t care quite enough.

Let me give you an example of what I mean: Slay the Spire has a bunch of relics that retain state between fights. e.g. Ink Bottle, Nunchunku, Incense Burner. Some of these are a modest boost when they go off, some of them are a major boot - e.g. having Incense Burner on the right number when you go into some fights can be win or lose a game all on its own. Even the lesser relics are a big deal and can make the difference between consistently great fights and very unreliable ones. This makes it worth spending some time at the end of each fight making sure your relics are on the right number.

I know how to do this. I’m not saying I’m great at it - it’s definitely something I could practice - but there’s nothing fundamentally mysterious about it to me. I know how it works, I know why it’s needed, and I know it well enough to do it and all the rest would just improve by doing so. Also I just can’t be bothered. It seems so fiddly and annoying.

Almost certainly if I put in the work, it would become less fiddly and annoying over time, and I think it would also improve my skills in other areas to do it, but I don’t think it would ever become something I was really excited about doing. Maybe I’m wrong and eventually it would become natural, I don’t know.

In general, the thing I need to do with Slay the Spire is slow down. Put in more effort. Actually bother to take the time over things. But I don’t wanna, because that seems unpleasant.

I’ve also seen this from the other side. I am, allegedly, quite a good software developer. I do in fact possess quite a high level of skill, but often when I compare the things that I can do that other people fail at, it’s not really because of skill, it’s because I did legwork that they were perfectly capable of doing but didn’t do.

For example, here’s how you track down an annoying bug: You basically badger the code until it confesses. You insert prints everywhere, you insert assertions everywhere. You delete code that you’re sure doesn’t matter, and find out if it secretly did. You repeatedly run the code that triggers the bug, narrowing it down into a tighter and tigher location, until you know exactly where something you thought was impossible occurs, and now you’ve found the bug. Computers can be understood, you just have to do the work of understanding them.

This works, I promise. I once got on a call to help someone debug a problem that they’d been stuck on for weeks and within about an hour we’d narrowed down the issue this way. They were pleased with the outcome and happily paid me for my time, but it was an extremely “Wait, that’s it? Why didn’t I think to do that?” interaction on their end.

Similarly, most people can probably do better software development by doing the following:

  1. Write more tests, ideally tracking coverage and aiming for 100% coverage.
  2. Run a linter and fix everything it complains about.
  3. Write more comments.

But this seems annoying and fiddly and so you don’t do it.

It’s not that there’s no skill in doing these things well. There absolutely is. It’s that doing them badly is still better than not doing them, and if you do them consistently then you’ll eventually learn to do them well.

It’s also not that these are always good ideas - sometimes there are good reasons to do something badly.

But they will always make your code better, and the thing stopping you doing that is, rightly or wrongly, you don’t want to do the work.

I think this is probably a pretty general theme: Any time you want to be better at something, it’s tempting to treat your performance as being at the leading edge of your current skill level, but it’s actually not. It’s at the leading edge of your current skill level at the level of effort you are currently putting in, and putting in more effort will get you better results, and trying to develop more skill without increasing your effort level won’t.

We want getting better to be a difficult problem, because that means we can solve it, but in fact getting better is more effectively done with hard work.