Whenever you have something really difficult in your life, think about how making things simpler can help. Of all approaches I have used over the years to solve problems that crop up in my life, this method that has yielded the best results. I try to think about how best I can simplify the situation until the task becomes more manageable, or even easy.
For example: How are we going to fit all of our stuff into these two small storage containers for our move across the country?
Well, whenever you have too much stuff, the simplest solution is often to get rid of stuff! So that’s what we did. We started going through tons of old documents, and found that over 99% of them we no longer needed. We also considered all of our furniture. There were several bookshelves that we had been moving around for years and were the cheapest bookshelves available at Wal-Mart at the time. As we looked at these collections of super cheap particle board, we asked ourselves: Why do we still have these? Answer: We shouldn’t. Solution: Dump. By getting rid of the clutter we have been carrying around, we have simplified our possessions and enabled ourselves to use only a couple moving containers to move our stuff across the country.
Another example: How do I write the code for an incredibly complex tool? At my job, I’m working on a maneuver decision engine for a very complicated NASA mission, and this tool is going to be very complex as a result. How do I make this simple? Or least as simple as possible?
My approach has been to break down the tool into separate pieces, until each piece is small and simple enough for me to wrap my head around at one time. I also work very hard to remove all unnecessary complexity, sticking only to those features which we absolutely must have for the initial version. Later on, when the basic functionality is complete, we can then worry about adding extra functions.
When I discuss with someone how this tool is used for the mission, I constantly ask myself (and the other person usually): What do I need to worry about for this tool, and only this tool? Is what we’re talking about something I need to incorporate, or is it taken care of in another tool? Only if it is a feature that must be in my tool do I give it my full attention. This may seem harsh, but it is critical for keeping this tool as simple as possible, and my sanity in place.
I also work hard to make the formatting, layout, and comments describing how the code works as simple and clear as possible. I find that simplicity and clarity usually go hand-in-hand. So if I can segment the program into a series of straightforward functions called by the main driver script, this makes the overall operations of the program far easier to understand.
Another example: Vacuuming. This can be a pain in the butt if you have to move a hundred things every time you do this task. You have to think about what parts of the room have been vacuumed, and try to move stuff from the non-vacuumed areas to the vacuumed areas, etc. Just thinking about that makes me tired. Things are a lot simpler if you simply have less stuff on the floor! After we moved the majority of our stuff out of our apartment, we found it MUCH easier to vacuum the floors of course, since we didn’t have so much stuff on them. Yes, this was without all of the furniture in the way, but in our next place we have the goal to keep the floors as clear as possible, which will lead to much easier vacuuming and keeping the floors looking much nicer in general.
There are many more examples, but these are just the first few that popped into my head. I highly recommend this approach the next time you encounter something difficult in your life, especially if it is a logistical difficulty. How can I make this simpler? What is my overall goal with this activity, and is there a simpler way to accomplish this goal?