In my last article, I talked about how things went with taking my time to do things right with the PyMarkdown project. In this article, I talk about more efforts along those lines and how I had to bend or break my own rules this week.
From a PyMarkdown point of view, I made progress on adding a more complete suite of scenario tests to the project. But more than anything else, I want to talk about what happened to me on Friday night and how I believe I made the right choice… even though I broke my own rules.
Normal Bug Fixing This Week¶
While it took a while to work through the issues discovered with the nested container scenario tests, I believe it was a huge success. It did uncover a small handfull of bugs in different components of the project, but it was better that I found them first rather than a user finding them. And the issues that I did find were not what I call “major redesign” issues, but cleanup and tweaking issues. Granted, some were more painful than others to find and fix, but the changes were all minor changes.
During that process, I did a lot of debugging and noted some scenarios that I wanted to make sure were covered in the future. There are some duplicates in there, but there are also some interesting scenarios that I want to make sure are covered. If I had not done the effort of entering and verifying all those tests, I believe I would still be trying to figure out what to test. So, in multiple ways, it was paying off dividends.
A good example of interesting scenarios is the one that I picked to work on this week. I had noticed that spacing between some elements was not what I thought it was, so I added all combinations of containers with their elements spread apart to their maximum. Then, for each of those combinations, I added one space before each of those container markers to shift it from a nested container element into an indented code block. That took a while, and now I have another set of issues to work through, like last week.
And to round off the week, I picked the remaining issue from last week and started to work on it. While it did take me most of Sunday to complete, I was able to get it completed and mostly ready by Sunday night. Like the work from the week before, there were a handful of small things that needed fixing up, as they were all just slightly off. Once I had those four or five things fixed up, I was able to cleanly fix that issue.
But to be honest, fixing that issue was more of a reward to myself for something that happened on Friday night. So, without further ado…
My Own Personal Rules¶
With that update out of the way, I want to focus the rest of this article on my main topic: rules and when to break them. My belief is that any software developer with longevity in the software field has a set of rules that they work and live by. There are very few people that engage in software development as a career without some aspect of the job stimulating their excitement. I believe that it is natural to follow that observation with another personal observation that many software developers are often overwhelmed by that stimulation, having difficulty in shutting off that simulation. Why else are there many stories of software developers that obliviously work through the night to get something done? From my experience, it is because it is generally true.
But like any interesting job, there are issues. If too much time is spent on the computer, then their family life suffers. If there is not enough focus on eating correctly and exercising often, then personal health suffers. If the time spent at work is not properly focused on the right things, then professional health suffers. There are many forces like this that work both with and against each other, and these forces need to be balanced and constantly rebalanced.
And for that, most software developers have their own rules. These rules for their life leverage the rules they use in their day-to-day jobs. Without these rules, I believe that software developers ultimately either fail in their personal life or in their professional life. Both are not desired outcomes. I have heard many software developers say words like “I have a rule with my spouse that…”, with some conditional rule. Sometimes they are hard and fast rules like “if I ask for help with the kids, they always come first” and sometimes they are less rigid such as “keep overtime to a minimum.” And for the more successful among us, those rules work, often with constant fiddling.
It should then come as no surprise that I have my own personal set of rules to help me try and keep balance in my life. The primary rule for me is that family always comes first, and yes that include our dog, Bruce. A good family balance is what I credit for being the main reason that I have been able to grow professionally. I make sure managers and colleagues know what I am doing, and how I mitigate any time away from the computer. I also make sure they know that when I am away from my computer, I am away. Period. As such, I have a separate desk and a seperate room in our house that we refer to as my “Work Office”. The important part for me is that my professional work is done on a separate computer and a separate desk from my other work.
For me, that is one of my rules. When I sit down at that desk, I am doing my professional work. Unless it is for a small interlude, such as getting water or going to the bathroom, when I get up from that desk, I am not working anymore. And since the desk is in its own room, when I close the door in the evening, I am definitely not working any more.
Why is this important to me? Because I have a tough time shutting down the parts of my mind that analyze things. There is a sequence to me leaving my work office: turn off the music, turn off the computer, turn off the lights, close the door. With each of those deliberate steps, I have trained my mind to acknowledge that work is done for the day. And for the most part, it works… most of the time.
But It Doesn’t Always Work¶
I do not usually talk about my professional work much, solely because of my above rule that professional work stays on that computer, on that desk, in that room. When I author articles, they are almost always about things that occur outside of that office with my personal life on my personal projects. It is not that I do not undertake interesting stuff at my professional job, quite the opposite. But if I let that little bit of my professional job leak into my personal life, then I feel that I will find that more of it will leak in, destroying the balance I have achieved.
And I would be dishonest if I said that things did not leak out from time to time. I am only human. But I try my best to get those things talked about, resolved at least for the day, and out of my mind as soon as possible. My wife and I have a healthy “I need to talk about…” attitude to help each other with exactly those kinds of issues. While it may not work for others, it works for us.
Well, this past Friday was one of those days. I had spent a decent amount of time at work prototyping and polishing something, only to find out that we had not thought the entire thing through. As we talked about what was needed and what I had prototyped, there was a gap that I needed to fill. Basically, I needed to go back to the books and try and figure out how to meet those needs.
So, at roughly 1pm, I started working on trying to meet those “new” requirements. A couple of times during the afternoon, I asked if I could vent to my wife, and she nicely accepted. With some frustration out of my head, I was able to keep on making progress until 6pm when my son and I sat down to watch a football (a.k.a. soccer) game. However, even after the venting with my wife, I was still thinking about the new requirements. Talking with my son about the game and what was going on with our favorite team did little to quiet the analysis still going on in my head. Even after the game completed (our team lost), some activities that normally relax me were interrupted by thoughts on how to solve the problem. It was just not going away.
Making The Choice¶
To balance my various needs against each other, I try and get to bed between 11pm and 11:30pm. Truth be told, I could stay up a lot later than that without that much problem. But if I were to do that, it means being uncoordinated with my wife’s schedule, and that is a problem for me. That evening, as the clock got closer to that time, I started noticing a problem: my mind was speeding up, not slowing down.
That was a major problem. My nightly activities are all geared towards winding down after a certain point in the evening. If I do not do that, I lay in bed and start swearing at the ceiling because of my inability to fall asleep. This has a side effect of waking up my wife and our dog as well, which is not desirable. So, I try and avoid it. Stick to the routine and wind down at least one to two hours before I want to go to sleep.
I did not follow that. My mind was still racing, and I had to make a tough choice. I could try and do some more winding down activities and see if they would help, or I could try and work through my problem enough so that I could mentally let it go for the evening. Trying to wind down would be following my rules about unwinding each night and working through the problem would be going against it. But what I had to figure out was, regardless of which one was the rule, which one of those had the best chance of succeeding.
After five minutes of writing stuff down on paper, I came to a decision. While it might take a couple of hours, once I thought through stuff to a certain point, I could put it down. To me, that was a fact. I did not know how long that would take, but my best guess was between two and four hours. As I did not know if my usual techniques would work, I chose the more solid set of results over something with only possible results.
It was not an easy choice. Staying up late is not something that I do at this point in my life without consequences. It usually messes around with my sleep cycle for at least three days, and that makes me grumpy. As such, I try and avoid that unless I feel there is enough benefit in doing so. The benefit here was an easy one: stay up and get the problem worked to where I could put it down. In my head, that was the only way I was going to get to sleep on Saturday morning.
But as soon as I made that choice, I knew it was the right choice. I made the choice to bend or break my normal rules, fully aware of the costs involved. And I was okay with it. I just made sure I had a glass of cool water to help me think, before starting to work the problem. It did take me roughly two hours to get the problem resolved enough that I started yawning. It was another hour before I was able to close my eyes and not think about it for a couple of minutes. At that point, I was able to turn off my work computer, shut things down, get ready for bed, and try and fall asleep. And I fell asleep within five minutes… at least it felt that way.
Sometimes you must pick between guessing and facts, and there is too much information to pick a clear winner.
What Was My Experience So Far?¶
Short and sweet this week. I had a hard choice to make, and I believe that I made the right choice, so good on that front. I also was able to enter in more scenarios and get a relatively good success rate on those scenarios, even though most of the scenarios were well off the beaten path. Overall, a good week.
What is Next?¶
I had thought that a reported issue was fixed, so my priority is fixing that issue for the user. After that, I have issues from last week to work on. More of the same, but always different. Stay tuned!
So what do you think? Did I miss something? Is any part unclear? Leave your comments below.