Be The River

These last few weeks have been quite a roller coaster for me.  I’ve had some very fun moments, but also some very stressful moments, long drives, battling extreme cold, being sick, snowstorms, and coming home from a short vacation to my basement flooded because of a burst pipe (caused by my boiler not working, so add to the cleanup efforts that my house has a lack of heat).  Looking back, I wouldn’t give my performance anything better than a B-minus, but I realize the one thing that kept me from utterly failing was my ability to be the river.

I work in technology, so the “stream” metaphor can start to grate on me and get old quickly, but I’m not talking about social streams, streaming media, or buffer streams, I’m talking about an actual river.  Flowing water which has a source, a path, and a destination.  What is amazing about water – and rivers in particular – is that they unmistakable despite being extremely dangerous in some areas and completely still in others.

If a river runs into something that stops it’s progress, it simply slows down and becomes calm.  It enjoys the break, while slowly working away at the tiniest of cracks until it can break through the obstacle.  It never gets frustrated, angry, it just remains calm and looks for the path of least resistance around the obstacle.  When the land is steep, the river rages quickly to get to the bottom, splashing, zigging, and zagging around rocks and other little obstacles letting almost nothing get in it’s way.

When times got crazy – like coming home and finding a burst pipe – the only thing that mattered was getting the cause found, the water shut off, then begin the emergency cleanup.  Like the raging river, I kept moving and getting things done.

As the week went on, and things calmed down, I started to look back and think back to this river metaphor.  I realize that it fits my philosophy on learning, education, programming, life, etc.  “Go with the flow,” some may say.  It also has become a great way for me to shrug off stress.  Not to say specific moments aren’t stressful, but, I can recognize that stress as a signal that this is time where the river will be fierce and full of rapids, and I need to change my priorities and work through this part as quickly and safely as possible until things calm down.  By doing this, when things do calm down, I don’t need to hold any of that stress.

I pushed myself to see if this metaphor held through with programming and it seemed to also hold true.  There are times where I can write 100+ lines of code in a day, and knock out tons of features.  Much of it has to do with the difficulty.  Not all programming problems are the same, just as math problems have different levels of difficulty.  But, sometimes I get stuck on a single line of code (or small bit of functionality) that will take me hours, sometimes days to complete.

So, next time things get crazy, remember that it is OK.  Speed your way through, be the river, and know that calm is ahead.  When things are calm, enjoy the peace.


Memory Management

Zen Digest

  • Outsource the task of remembering lots of short-term tasks
  • Be mindful of how you’re using memory (both technical and human)
  • 7 is the magic number of things we can remember

The Whole Picture

According to Miller’s Law, the human brain can store between 5 and 9 (most commonly 7) objects in short-term active memory.  I’ve always tried my best to be a man of my word, and in doing so, I needed to ensure that I remembered to do everything I agreed to do.  In business meetings, I did this by always taking notes.  I even have a system for marking items that are follow-up questions, tasks, etc.  But, in my personal life, it’s not very convenient to carry around a notebook and take notes during conversations – so I use my phone.

In a previous post, I noted about how I use an app called, which is a very simple task-management (really it’s just a list maker app) and it has been great for me to offload short-term memory management.  For tasks that are time-sensitive – “switch over the laundry” for example – I create a calendar item with a reminder.  An hour or so later, I get a notification that I need to move the laundry.  I free my mind from having to remember about the laundry.

This sort of outsourcing is wonderful as it not only frees up processing and storage in your brain, it also reduces stress – as you never have to worry about remembering little things (or worse, forgetting things).

Now we get technical.  Computers are similar to your brain in that they have two different types of memory – RAM (similar to short term) and a hard drive, similar to your long-term memory.  RAM is extremely fast, but much more expensive than a hard drive (as of writing this, you can get a 1,000 GB hard drive for $50 or 4GB of RAM for $45.  While 4GB is quite a bit of storage, it can get used up very quickly, especially when writing inefficient or sloppy code.  While web programming doesn’t give you much control over how to do memory management, the rules by which the browser does manage memory is well defined.

Whether you are programming or simply trying to remember a grocery list, it’s important to determine the best way to store that information to keep yourself and your code efficient.


Stupid Questions

When solving any problem, ask stupid questions and ask them first.  We’ve all heard “there are no stupid questions…” but what does that really mean, and what is a “stupid” question.  Many feel that a stupid question is one that you should know the answer to: “What year is it?” “What color is my hair?” and “What is Google?” may be classified as stupid questions.  Additionally, stupid questions may also be classified as ones for which the answer seems too obvious, “Why would you use an umbrella when it rains?”  “Why can’t cars drive themselves?”  “Why can’t it be sunny every day?”

These questions – without any context – are fairly meaningless, but a stupid question with the right context can actually be the most intelligent question.

To address the first type of “stupid” questions – if you need clarity on a term being used, chances are others do to.  Ask it early, it will help your understanding and ensure that everyone is on the same page.  Many people have correct, yet slightly off-target definitions of things.  When a speaker clarifies their definitions, it helps everyone.

As for the second, asking silly questions can ultimately yield to a more creative and better solution than traditional thinking will get you to.  Sometimes push your question to an extreme.  “What if I ate the same thing for breakfast every morning?”  “What if we get customers to answer their own questions?”  “What if we reward customers for helping other customers?”  “What if we get the art department to design awards for other departments during their downtime?”  “What if we pull out all the food about to expire and make a meal with it…”  The possibilities are endless and can lead to some very positive results.



Energy is always constant.  We think of energy being used – the gas in a car, a device using batteries, your coffee maker consuming electricity, but that is only energy being transformed from one type to another.  Your coffee maker is turning electrical energy into heat, your car is turning chemical potential energy into explosive pressure turning pistons and ultimately making the wheels move.

There is never loss in energy, although conversions are rarely perfect.  For example, when your phone battery converts chemical potential energy into electrical energy, and the parts in your phone turn that electrical energy into light (your screen) or being consumed via processing, inefficiencies result in a small amount of energy being turned into heat.  This is why your phone gets hot if you are on a long call, or use it alot.

Why is this important?  Because our actions also follow these rules.  Putting in only a little bit of effort cannot be expected to have extreme results.  At least not without borrowing energy from somewhere else.



Computers are efficient because they never stop to ask why.  They look at their next instruction and simply run it.  If something fails miserably, then it stops, but otherwise it moves on to it’s next task not worrying about the tasks ahead or behind.

While I never recommend that level of efficiency for us humans – asking why is one of the things that makes us human – but there is something we can learn from simply getting things done.  I’ve talked about making a task list, but, order your task list once, and when one task is done, start the next one.  Sometimes doing something in a less-than-efficient manner is actually more efficient than questioning every action you’re about to take.

Additionally – once you get in the habit of constantly being in motion, things become easier, resistance gets removed.

The same goes for learning, especially technical things.  “I don’t know where to start” is a great demotivator – so simply start anywhere.  If it’s the wrong place to start, at least you learned something, and when you do find the right place, you’ll have something covered.


Agile or Overhaul?

Many development shops today use a methodology called Agile programming.  It breaks the traditional release cycle and allows you to put out small updates on a daily or weekly schedule, as opposed to bigger releases every few months.  This has many benefits, such as making it easier for users to transition (lots of small change is easier than big change all at once), and it allows you to get user feedback and address user issues quickly.

The downside is that you ultimately become stuck to the foundation that you built.  Take a house – if your purpose is to raise a family of 4, a 3-bedroom should be more than enough.  You can continuously make improvements, redo the bathroom, change the kitchen, but if you suddenly decide to let the inlaws live with you, major work will need to be done on the house.  That major work cannot really be done in tiny chunks.

Ultimately, any tech company needs to find a balance – release a product and iterate, iterate, iterate while also working on building the next foundation.

The same goes for business processes.  You should continually tweak, but, if your task, team, or situation has changed, you may need to do a complete overhaul.



The fast-pace of modern life puts pressure on us to remember more and more.  The more of our brain we devote to remembering short-term lists such as appointments, grocery lists, etc, the less time we have to be creative and do critical thinking.  Make use of short-term lists and reminders.  Most phones have built-in reminders that work on a time or location based.  You can be reminded to pick up milk when you drive near the grocery store, or simply to take the laundry out of the dryer 1 hour from now.

Save yourself by making good use of reminders.


What you see…

Since the rise of desktop computing, there has been a great deal of software labeled WYSIWYG (Wizzy-wig – What You See Is What You Get).  For example, Microsoft Word.  When you typed was exactly what you saw on a printed page.  This is great when dealing with a static medium (a printed page, a video that will be put on a DVD) but when you’re dealing with software (and yes, ebooks are software) WYSIWYG can actually be a terrible misnomer and create headaches.

With technology, there is always a trade off between control and ease.  If something is to be made very easy (such as creating a 1-page document in Word) you’re sacrificing control over what you can do with that document, as well as how portable it is.  This is where learning how to program, such as HTML & CSS can be very useful.

As with anything, it is important to know what your desired outcome is and to use the tool that is best for the job.  Hand-coding a simple document in LaTeX that you only intend to print out is unnecessary, but writing a science textbook in Word that you plan to distribute an ebook is a terrible idea.


Take your time

There are certainly situations that call for work to be done quickly – life-or-death medical emergencies, fighting an actual fire, running away from a bear, but the rest of life can only create pseudo-emergencies.

Pressures are put on us from all directions, internal and external.  Often times, taking a little bit of extra time to do a job well, or even to just do it slowly so you can catch mistakes while you’re doing it, will pay off in the long run.  Short term gains often come with long term risks.

The next time you feel stressed over a deadline – ask yourself how real that deadline is, and what the expectations are.  Remember that doing it right the first time is the best thing you can do.


Define Failure & Success

The latest business craze is to adopt the methodology of “fail often, fail quick” which is about trying a bunch of different things, taking many small, mitigated risks, and when one starts to succeed, run with it.  There are a few more rules, mainly around learning from your failures, but that is the main gist of the methodology.

For it to work, you need to clearly define failure and success.  Without those definitions, you are most certainly going to fail in the end, or miss out on significant opportunities.

A definition of failure should have a clear when, and how.  If you sell products, a failure definition like “Sells less than 100 units in 3 months” is great.  Additionally, it is important to define a success.  A success is not always a non-failure.  In the product example, selling 101 units doesn’t make a product a success, it may take 300 units in 3 months to be profitable.  So what do you do in the grey area of 100-300 sales?  You have to ask yourself – can I do something to make this product sell more?  Can I raise the price to make more money yet not drop sales?

The same goes for technology.  If you’re building something new, you have to be clear with your goals, what is your start and end, what is your success, and what is your fail point.  The worst thing is admitting defeat when your first snag is hit because you haven’t properly defined a fail point.