Development Burnout: A Cautionary Tale

Any who subscribe to my blog have noticed by now that there has been quite a long time since I made a new post.  I make no excuses  but I thought I’d share the reasons behind it in case they might prove useful to some.

The simple fact is I accepted a side gig and totally burned myself out. Crispy-fried. I was working 60-80 hour weeks between my primary and secondary gigs. I still enjoy writing code and developing software (two related but different activities, believe it or not.) However, I did so much of it in such a short time that I’ve needed an extended break.

Moral of the story? No project or dollars are worth hiding from your family in your basement for months on end. If you attack something you love with such fervor, you will not love it any longer it by the time you’re finished. Balance is needed. Pace yourself. You have a lifetime to achieve your goals in your personal and professional life. Don’t allow one to overshadow the other- keep both chugging along at a reasonable pace, and you will see most of your dreams in each fulfilled.

How to Get Value From StackOverflow

I’ve been a regular user of StackOverflow since shortly after the beta.  It helped keep me sane during a period of semi-employment.  My company was bought out and I was paid to do nothing for eight months.  I know this sounds great, but it wasn’t.  Desperately bored and wanting to do something, I spent hours answering SO questions.

Over the course of eighteen months, I’ve learned a few useful ways to get the most out of this amazing site.  I thought now would be a good time to share the best ones.

There are four common ways to get value from StackOverflow:

  • Asking questions
  • Finding answers by landing on SO through a Google search
  • Finding answers by searching SO directly
  • Answering questions

We’ll take each one in turn.

Asking Questions

Asking questions on StackOverflow is a skill.  First and foremost, questions must be answerable. The progenitors and maintainers of the site (Jeff, Joel, and The Community) created StackOverflow to contain Questions and Answers, not Flames and Opinions. That’s not to say the latter doesn’t happen, but subjective questions are generally closed quickly.  I have only asked a few questions on SO when I’ve been truly stuck, and have been very satisfied with the results.  Answers to well-crafted questions come quickly.

Do:

  • Make questions concise and readable
  • Include enough information (code!!)
  • Markup code so it’s readable.  Use the ` before and after code blocks, or use the little binary button.
  • Include the steps you have already taken (no “How do I write Facebook?  Plz send the codez!”)
  • Accept Answers! Answerers do pay attention to your accept rate.

Don’t:

  • Ask a question until you understand the problem well enough to articulate it clearly
  • Ask for help with homework unless you have tried at least ten things (and include those things)
  • Ask subjective questions.  ”Why” questions are often subjective.
  • Downvote just because you disagree with an opinion, or out of retribution.  No one will know you did it, but it’s baaad karma.

Finding Answers

Finding answers on SO is easy:  search Google.  Over half of my technical searches lead to SO.  Searching SO directly is useful too, but here’s a pro tip:  when you’re at your wit’s end and you start asking a question, pay attention to the questions that pop up as you enter your question title.  For some inexplicable reason, that search seems to come up with better results.  It may be that your direct SO searches should be phrased Jeopardy-style, in the form of a question.  I haven’t tried that yet.

Answering Questions

Here it is- the fun part.  Answering questions on SO is all about giving back to the community, helping your fellow programmer.  In a divine light of altruistic service, the Oracles of StackOverflow share their wisdom with the masses.

Oh, and there’s that Reputation thing too :)

Honestly, earning rep for helping people is fun.  Somehow the one without the other isn’t quite the same, regardless of the fact that the reputation has no intrinsic value whatsoever.*

So, good answers:

Do:

  • Read the Entire Question. Answers that do not take the entire question into account are often wrong and will get downvoted.
  • Use Markdown to your advantage.  Bold is great for one-liner summaries of your answer.  Italics are good for emphasis.  Use bulleted lists when appropriate.
  • Mark code appropriately, just as with questions.
  • Make the answer easy to read by inserting gaps between thoughts, even if they’re only one or two sentences.  Long paragraphs are hard to read.
  • Include enough detail to answer the question without being long-winded.
  • Focus on your area of expertise.  You shouldn’t have to research your answer except to fill in blanks.

Don’t:

  • Rush the answer.  Getting in first doesn’t automatically mean getting the highest-voted answer.  You can edit to add more detail later (but be careful not to write a novel, unless the question warrants a long answer)
  • Guess.  Back up your information with references.  I rarely ever post an answer without a link to supporting information.
  • Answer with just a link, unless that link is exactly what the poster needs.

In Summary

Those are my guiding principles as I use SO.  This is certainly an incomplete list, so please leave comments and I’ll update the post with the best ideas.

If you enjoy answering questions on any StackExchange site, check out StackWatcher.

*Actually, Telerik offers a free copy of their Premium Collection to answerers with over 10K reputation :)

Tagged, I’m It: My Reading List

So I received a tag from Sara Dutkiewicz yesterday, asking that I share my reading list.  I’m a huge fan of hard science fiction, and over the years I’ve read a lot of it.

I just finished Saturn’s Children by Charles Stross.  It was okay, not Stross’ best work.  If you want to read great Stross, pick up:

  • Singularity Sky
  • Iron Sunrise
  • Accelerando

Before that was The Unincorporated Man by Dani and Eytan Kollin.  This is an awesome book!  I think it would make a great movie.  In the hands of a good writer and director, it could be a classic.  The next book, The Unincorporated War, is out in hardcover.  I’ll wait until March for the paperback- $25 is too much for a book.

Here is an incomplete list of my other favorite authors:

Peter F. Hamilton:  Nights Dawn series, Nano Flower, Fallen Dragon

David Brin: Uplift War series, Kiln People

Greg Bear:  Eon, Forge of God

Timothy Zahn:  Cobra series, Thrawn Trilogy (first Star Wars books set after episode 6)

Neil Gaiman:  American Gods, Sandman, Anansi Boys

Stephenie Meyer:  The Host, Twilight series (yes, I read them…)

Kim Stanley Robinson:  Mars trilogy (one of my favorites), Years of Rice and Salt

Tad Williams:  Otherland series

Vernor Vinge: A Deepness in the Sky, A Fire Upon the Deep

Robert Heinlein: Stranger From a Strange Land, The Moon is a Harsh Mistress

MetaWork

I’m working on a personal project related to some work I’m doing for my day job.  It’s a big idea I had recently based on ASP.NET MVC and I’m excited about it, so I’m pushing hard to get the work in.  I’ve done a lot more coding in the last couple weeks than I have since I “finished” VSTime.

My “productive” time starts at about 6am and ends, on a good day, around 6pm.  On a very good day, caffeine can extend that time into the evening.  I know this schedule is grounds for revocation of my geek card, but I’m a husband and dad with three kids, so my schedule is largely theirs.  Outside my productive time, my brain slowly descends into guacamole.  The frontal lobes turn to runny eggs and I can’t focus on code anymore.

This means that I have about eight good hours a day to devote to work, be it my own or otherwise.  Eight hours sounds like a lot, but when you count drive time, boot time (our login scripts are glacial,) lunch, and body breaks, it rounds out to more like six.  I try to game the system by working from home when I can (no drive time) and eating at my desk, but it’s still less than eight hours.

Six hours per day isn’t a lot.  I have to squeeze every possible moment out of those six hours in order to accomplish anything meaningful from one day to the next.  This means staying as focused as possible on the tasks that will truly make things happen.  I’ve recently noticed a major productivity killer: metawork.

Metawork is what we do to convince ourselves we’re doing something useful when we’re actually slacking off.  When our brains seize up and our focus is off, we turn to metawork to look and feel busy.  Examples of metawork include:

  • Updating to-do lists
  • Writing pseudocode
  • Tweeting/Talking about writing code
  • Meetings
  • Reading about technology that has nothing to do with anything you’re working on
  • Answering random StackOverflow questions
  • Reading blog posts (D’oh!)
  • Writing a blog post (Double D’oh!)

This is an incomplete list and will probably apply differently to different people.  Some people are paid to blog, so that wouldn’t be metawork for those people.  I’m not paid to blog, so I’m currently burning valuable time.

Back to it!

Deconstructing My Learning Process

Lately I’ve been doing some self-examination of my learning process.  With Microsoft releasing so much new technology, including .NET 3.5, Silverlight, Azure, and soon .NET 4 (just to name a few) in rapid succession, there is a TON of new stuff to learn.  The learning process is fun for me.  I really enjoy picking apart a new technology, figuring out what it can do that no one has done yet.

I tend to follow the same loosely defined process when I’m picking up something new:

  1. Decide I want to change the world with some technology (often the flavor of the day: Azure, LINQ , Silverlight, etc.)
  2. Do a blizzard of Google searching
  3. Save a bunch of links (Delicious, private wiki, etc)
  4. Add all of that domain’s guru’s blogs to Google Reader (ScottGu, Wildermuth, etc)
  5. Add the StackOverflow RSS for that subject to Google Reader (I currently watch Silverlight and Entity Framework-tagged questions, it’s very cool!)
  6. Read a bunch of “how-to” walkthroughs
  7. Download code samples that demonstrate the bits and bobs I want to learn
  8. Go to town with VS.NET

I suspect this is a common process for many people.  It has occurred to me that being more aware of this process might help me to improve it.  I’m currently in the process of a deep dive into Silverlight.  Silverlight is such a humongous subject unto itself that I find myself spending too much time spinning my wheels.  Therefore, in the interest of improving my learning process and making it more efficient, I’ve decided to deconstruct it here for all to see!

Strengths and Weaknesses

Here is what I like about my process:

  • Gathers lots of reference material
  • Identifies authoritative sources for information
  • Follows others work in the domain (StackOverflow, Blogs, Code Samples)

Here is where I think my process can be improved:

  • Disorderly
  • Too task-focused
  • Wastes too much time on narrow subdomains

My Current Process

I’ll use my Silverlight research to demonstrate my current modus operandi.  I’m really jazzed about Silverlight, so I’d like to learn as much as I can.  I want breadth and depth.  I started with #2 of Dave’s Way to Learn Stuff, so I went to Google:

The first link is the official Silverlight Get Started page.    It’s a good start.  I see all the tools I’ll need to get rolling.  I also see:

  • Tim Heuer’s “hello world!”  Silverlight screencast
  • ScottGu’s series on Silverlight
  • Lynda.com training videos

I looked at some of these videos and articles, but not all, and not in any particular order.  My current process is not that orderly.  I tend to start off with an idea of what I want to accomplish, then set out to achieve it by targeting the specific elements I need to “Make It Work.”  This is one of the major flaws in my process.  I get so excited about creating something that I absorb the information I need in a disorganized, scattershot fashion.  In my impatience, I go down a single rabbit-hole without building the larger picture around me first.  The return on my time investment yields, at best, a narrow task-oriented understanding.

Dave’s Learning Process 2.0

Step 1: Mind Maps

What to do?  I need to be patient enough to build a comprehensive, 10,000 foot-level understanding of the domain before I dig deeper. If you’re like me, you want the big picture…


Click to enlarge

I ran across the idea of Mind Maps some time ago, but only recently realized their potential.  I’m a visual kinda guy.  You can stand a talking head in front of me for hours and I’ll absorb maybe 30% of what he/she says.  Sit me in front of a cool Discovery program with lots of pretty graphics, and I’m a sponge- I’ll memorize 80% of the stuff.  Mind maps are an excellent way to create a visual representation of a subject.  They help synthesize domain information into a comprehensive mental model.

The mind map above took me less than twenty minutes to build.  I stole borrowed the structure right out of the MSDN Silverlight Roadmap.  It’s not complete, but it doesn’t have to be.  It covers the major aspects of Silverlight, so I have my 10,000-foot overview.  When I learn something new about Silverlight, I’ll know where to plant it in my mental garden.

Creating your own mind map of a subject is a great first step to learning it.  If breadth and depth is what you want, you can round-robin each major trunk, “drilling downward” into the subject, rather than inadvertently falling down one rabbit-hole to the exclusion of all other subdomains.  Using a mind map, you’re in better control over your research process.  If you’re only interested in one sliver of a domain, such as Silverlight Media and Animation, that’s fine, but I still believe the mind map is useful.   It helps you understand how subdomains relate to each other.  Notice in my Silverlight Mind Map how DataGrid straddles Data and Controls.  If you want to understand DataGrids, you’ll have to learn at least a little about how Silverlight handles Data.

Read, Follow, Create, Invent

Now that my mind map is created, I can build the foundation. My past research process has been driven by impatience- I want to get something done NOW! This has lead to a false economy of time investment. From now on, I will take the time to ingest the basics first. Ironically, I think this will save me time in the long run. I will spend less time looking things up and cross-referencing if I read up on the essentials first. I can also rely on the mind map to let me know how far I’ve gone and how far I have left to go. This will keep me from feeling that the foundational learning is an endless, pointless process… the feeling that has historically kept me from taking the time in the first place!


Step 1: Read

Let’s go back to the MSDN Silverlight Roadmap. I pulled eight major trunks out of the Roadmap and added it to my mind map. Each of those trunks has a dedicated top-level page on MSDN. This just isn’t a lot of reading. Once I’ve read each of these, I can make notations on my mind map, calling out areas where I want to dive deeper. I won’t spend more than say, fifteen minutes on each trunk before I move on to the next one.

Step 2: Follow

Now it’s time to do a little trying out by following simple examples. I’ll build a test project, and add a page for each of the major trunks. Here I will try out little bits and pieces of each subdomain. Nothing fancy, nothing complex, nothing integrated. Just tiny little examples of each subject. Look for the most basic how-to code samples for each subdomain and just copy and paste.

Step 3: Create

This is the stage where some creativity comes into play. As a few “what-if” questions about the examples you’ve built, and start to experiment with tweaks and modifications. Form and test some theories about the way the features work by themselves and together. Try combining features from related subdomains in a limited way until you have a feel for how they interoperate.

Step 4: Invent

Now we’re ready to build a real application. Using elements from several different subdomains, build something simple but useful. My first full Silverlight app will be… tada! a Sticky Note application. Stop the presses.

Lab Coat Time

Let me be clear: this is not wisdom from on high. It’s not the new bestselling productivity book. It’s an experiment- my experiment. I have a good feeling about it because it feels… weird, heavy somehow. I know that has to be a good thing because anything better than my current way of doing things will be outside my comfort zone. Therefore, a little discomfort is probably a good sign!

So, my next step will be to start with Read. I will dive into the MSDN Roadmap and go from there. I will dutifully report my progress, so watch this space for updates and code samples as I forge ahead! If this works as well as I hope it does, expect to see more open studying for lots of other goodies. Stay tuned!

DS

Data, anyone?

I was just trawling around and found a very cool site:

http://www.data.gov

Looks like Uncle Sam has launched himself into the 21st century and got himself on the interwebs. Why do I think this is cool? Apart from all that transparency and good government stuff, this has got to be a treasure trove of sample data you can use for test applications. My favorite find so far is the 2005-2007 American Community Survey Three-Year PUMS Housing File.  483MB of data!

If you’re looking for sample datasets this site looks like a great resource!

DS

Working From Home

Throughout my career, I have worked from home for months at a time.  I find it very convenient for the most part- no morning dash to the shower, no morning commute, just a quick bite to eat and I’m at work with my coffee still warm from the kitchen.  I can get four hours of work done before lunch.

I’ve often wondered why video telecommuting doesn’t happen more often.  We have the technology (and we can rebuild him!) to get full video and voice going between multiple locations.  Skype, MSN Messenger, AIM and a host of other free software is easy to set up.  Webcams are cheap.  What gives?

I think Scott Hanselman has figured it out.  Turns out, it’s not the technology, it’s the way you set it up.  The “creep factor” of videoconferencing is a reality that has to be addressed.  There’s just something weird about realtime video conversation.  I’m sure my kids will think it’s no big deal, but it’s new enough that most people feel like they’re actually on TV.

168521-dellvostroaio_350

So, as the good Mr. Hanselman explains, your primary machine must not be the one you use for videoconferencing.  You don’t have your coworkers staring you in the face while you work.  If you want to talk to a neighbor, you back off your computer and turn around.  He and Phil Haack have each dedicated a PC in their home offices to the purpose of full-screen, high resolution video.

I’m intrigued by this setup, and I think it holds promise for broader adoption of telecommuting.  In fact, I think it could breathe life into a niche product: the PC-in-a-flatscreen.  The idea of a completely un-extendable, non-upgradable PC had always baffled me: who would want such a thing?  As a dedicated communication device for the home office, it makes sense.  I think it could be made very cheaply, given that all you need is enough horsepower to run a webcam stream.  A decent processor, network interface, and video card could be bundled into a slightly thicker-than-usual VGA flat panel with a VESA mount on the back.  Done deal!

Upcoming Post Topics

Here’s a few things I’m working on for upcoming posts:

Entity Framework Overview
I started writing an EF overview last year.  It’s a little dated now so I’m in the process of updating it for prime time.  It will come complete with an explanation of EF and a sample project based on the AdventureWorks sample database.

Silverlight 3
I experimented with Silverlight 1.1 back in the day, and will be jumping into v3 with some concepts and examples.

Visual Studio Integration
I’ve been working on a little side project for some time now, involving a Visual Studio Integration Package that records metrics on how much time you spend on a project, down to the file level.  I will probably make this an open source effort, so stay tuned!

VS 2010 and .NET 4.0
I’m very excited about the upcoming release, so I will be doing some experimenting with some of the newest goodies.

Looking forward to getting some good code fu up for all to see!

DS

Follow

Get every new post delivered to your Inbox.