By Dave Sayles, Director of Software
To say I have an obsession with historical figures is an understatement (let me put it this way: I actually have a favorite Pope that predates the 20th Century. It's Leo X, BTW). One character I enjoy in particular is the philosopher-king (ok, technically emperor, but king sounds better) Marcus Aurelius. My favorite trait of Aurelius' is that during his lifetime he would write messages to himself that he would later review with the hopes of reactualizing those comments. This concept is called Hypomnemata and is a tenant of Stoic philosophy, to which Aurelius was an adherent. Aurelius' memorandums were eventually rediscovered, and became known as his "Meditations".
As a software engineer in the 21st century, I call this exercise "Optimizing for Enlightenment". By recording and rereading your everyday thoughts, you can continue to better yourself with the hopes of one day reaching a point of peak efficiency (or, in the good emperor's case, enlightenment).
In emulation of Aurelius I too catalogue my thoughts. Throughout my day, I commit messages to my future-self for the sake of both guidance and self-improvement. When I started, I told myself that I'd periodically read through my history and contemplate my entries. There's no time like the present!
For your enjoyment, here are some excerpts that I tend to concentrate on:
Date: Mon Oct 26 16:48:58 2015 -0400 Keep your PRs small. It'll make it easier for the reviewer. If you're PR is that big, you're probably biting off too much anyway. Date: Thu Sep 24 14:37:53 2015 -0400 Always lint your files Date: Wed Sep 9 10:40:28 2015 -0400 Always use a virtual environment. It's the best. Date: Wed Aug 19 08:00:22 2015 -0400 I enjoy the idea of not using a computer or being aware of the outside world for the first couple hours of a day. It gives me time to focus and ready myself. Date: Tue Aug 18 15:58:47 2015 -0400 I think my biggest problem for the first ~10 months I was managing the software team is that I never asked what the devs actually wanted, I just always did what I thought best. If I had opened it up to other people, I could probably have made better decisions. Having more discussions, especially during our regular weekly meetings, is a good place to start. Date: Tue Jul 28 07:47:41 2015 -0400 Future Dave: read everything, everywhere. I can't tell if my reading comprehension is poor, or if I'm just not reading things and skipping them over. I think it's the latter, but I won't know until I've started reading everything. Date: Mon Jul 27 10:37:33 2015 -0400 I really hate sprints. Unless we're doing really scoped work (i.e. contract web stuff), what's the point? Our tasks seem too open ended to really use sprint points in a sane way. Date: Mon Jul 20 12:00:53 2015 -0400 You should listen to The Brandenburg Concerto more, since it's probably the best piece of music ever written. Date: Thu Jun 25 14:45:22 2015 -0400 Patience. Date: Wed Jun 24 12:48:20 2015 -0400 When given a task, the first thing you should ask is: why do we need this. Date: Thu Jun 18 18:16:29 2015 -0400 It doesn't make sense to have all decisions go through one person. By empowering an entire department to be self-sustaining, you allow them to all gain efficiency and reduce the amount of interruptions and decisions you need to make. Date: Thu Jun 18 10:05:07 2015 -0400 When running through a difficult problem (or anything really), write out a dialogue between you and yourself. It'll help you understand your thoughts and decide what's really important (or confusing). Date: Wed Jun 17 00:42:11 2015 -0400 Only do enough to get you going. It's usually not worth it to polish something that hasn't even been used yet. Date: Tue Jun 16 23:38:45 2015 -0400 Keep it simple, stupid. Date: Tue Jun 16 23:37:15 2015 -0400 Everybody has their opinions. Listen to them, but don't confuse wisdom with hindsight. Date: Tue Jun 16 23:36:59 2015 -0400 Learn from your mistakes. Reflect on them. Also, don't be so hard on yourself. Date: Tue Jun 16 23:36:03 2015 -0400 You can't split dev time with manager time. You need to be one or the other. Don't try to straddle both worlds; you'll end up doing both jobs poorly. Date: Tue Jun 16 23:33:36 2015 -0400 You don't know everything. You can't solve every problem. You don't know every answer. Even if you can solve the problem, you should absolutely consult other people, since they may have better ideas. Date: Thu Jun 4 10:37:23 2015 -0400 Remember Marcus Aurelius: everybody has their own demons. They're human, just like you. Date: Thu Jun 4 08:01:51 2015 -0400 Never be afraid to say "No" to something, especially if it's proposed by management. The majority of ideas are bad ideas. Date: Wed Jun 3 15:52:17 2015 -0400 Automate everything. Date: Wed Jun 3 10:31:38 2015 -0400 Dissenting is like the tuning of an orchestra. Nobody wants to listen, but afterwards it was worth the pain. NB: Unfortunately I can't take credit for the above quotation. I think it's a rehashing of Will Durant. Date: Mon Jun 1 12:49:50 2015 -0400 Always try your best to do as little work as possible. There's always an untapped resource that can do the job just as good as you can that doesn't cost as much.
The constant assessment of what my previous self experienced allows my present and future selves to iterate and become more skilled.
As the Director of Software at Neverware, I use this same idea of Optimization for Enlightenment with the rest of the department. Each interaction I have with an engineer is another chance to listen to what they're thinking about. Each thought about what works, what doesn't work and what we should be doing is a new idea for me to meditate on and another chance to iterate on how we operate.
Optimizing for enlightenment is neither quick nor foolproof. Constant self-review can be a bit of a harsh reality as well. But, by never staying satisfied with the way things are, you can hopefully live like Aurelius and hill climb your way to peak efficiency.