Archive for the 'Productivity' Category

Newsflash: Killing Zombies Increases your Typing Speed

Here’s a fun productivity enhancing tip that I picked up from JP at the Nothin But Net course I just took.

If you’re much of a gamer, then Typing of the Dead, an old Sega game that was released in 1999, will probably make you wince due to the poor graphics and absurd storyline. In fact, it appears to have won the dubious honor of being runner up in one of PC World’s top 10 worst games list.

Nevertheless, I’m hooked.

blog_typing_game

It could be because I’m one of the only men under 40 that I know who doesn’t own a gaming system and therefore have incredibly low standards when it comes to games. In fact, the last one I remember owning was an Atari back in High School.

It might just be because I have a soft spot in my heart for zombies every since I read World War Z: An Oral History of the Zombie War.

Whatever the reason, I’ve been dismembering hoards of zombies in the last week and hopefully increasing my typing speed in the process.

If you’ve already mastered a tool like ReSharper and are looking to eek out some more productivity by simply increasing your typing speed, then I recommend downloading a copy of the game here and giving it a try. It installs through a simple setup bat file.

It is no longer being sold, so there is no need to worry about pesky copyright laws.

Happy typing.

Popularity: 2% [?]

Creative Idea for Improving Your ReSharper Skills

This is a screenshot of my current desktop.

I exported a snapshot from the ReSharper Default Keymap pdf and set it as my desktop background. I got the idea from Jean-Paul Boodhoo when I asked him how he had become so proficient at using ReSharper.

Popularity: 2% [?]

KC Day of Dot Net ReSharper Presentation and Resources

I presented a session on ReSharper at the Kansas City Day of Dot Net conference this last Saturday. Kudos to Lee Brandt for organizing the event, which seemed to be a big success based on the attendance and the number of interesting topics being presented.

A few attendees requested that I post the slide deck, so here it is. It’s in 7-zip format, which only takes a minute to install and beats winzip if you’re not already using it. Most of the session involved me demonstrating the various features of ReSharper through a Test-Driven Development style coding session, so the slide deck won’t be very helpful if you weren’t there or are looking for anything other than a laundry list of features.

If you’ve never seen ReSharper before, you might want to take a few minutes and watch one of these short videos to see the tool in action:

For those of you looking for a way to get started or learn a few new features, I recommend first checking out the features page on JetBrains. It does a pretty good job of providing high level descriptions of all the features along with helpful screenshots that will help you grok the basics.

After that you might want to check out Joe White’s 31 Days of ReSharper. He wrote it back during version 2.5, so some of the features have been enhanced since then but I really like how he dug into the nuances of the various features.

I also wrote a few posts on the topic, including my favorites from about a year ago and my recent efforts to break out of my R# rut. I learned a ton of new things as I was preparing for the presentation, so look forward to a few posts in the near future on this tool as well.

Popularity: 7% [?]

Breaking out of my ReSharper Rut

I’ve been using ReSharper for over a year, but it recently occurred to me that I’m still only using about 1/4 of the functionality.

Although there are a plethora of cool, productivity-enhancing features in ReSharper, there definitely aren’t a year’s worth of things to learn. In fact, I’m pretty sure that I picked up most of my current repetoire of hotkey knowledge within the first week. Somehow I became complacent soon afterwards and stopped learning new features even though I was thrilled with the ones I had already acquired.

It reminds me of the The Expert Mind, a scientific paper that I wrote about last year in my post Where Do Experts Come From?. According to the authors of that paper, novices and experts start out learning at the same pace, but novices loose interest as soon as the novelty wears off while experts manage to sustain that same pace of learning long afterwards.

I decided that if I ever wanted to shed my novice status when it comes to this tool and become a ReSharper Jedi, then I had to take some strategic steps to restart the learning process.

Here’s what I did:

  1. Favorite Features List: I made a list of all of the features that I am fluent with, which I define as the ones I use on a daily basis without having to pause to remember the hotkey. Although not as critical as the other steps, I still found this activity to be helpful in allowing me to solidify existing knowledge as well as reinforce good habits. I’m also hoping to use this list in my future efforts to convince several stubborn co-workers to start using this tool, which many have not yet installed even though we all have licenses.
  2. Practice List: Next I made a list of all of the features that I’ve tried and found helpful but don’t use very often or very effectively. This is usually because I either habitually forget about the feature or else don’t have the hotkey combination memorized and therefore have to fumble around with the menu system in order to use it.
  3. Try List: Finally I created a list of features that I haven’t tried yet. I populated this list by looking through the ReSharper menu system, going through the embedded tips, and rereading the posts in Joe White’s 31 days of R# series.
  4. Daily Review of Try and Practice List: Next I placed these lists in a OneNote notebook (any simple text editor will work) and pulled it up to review several times a day in order to remind myself of potential new features to try and use.
  5. List Item Promotion: Once I tried a new feature for the first time, I moved it to the Practice list. As soon as I noticed myself using a feature fluently, I moved it to the favorites list. This simple act of promoting features from one list to the next was not only useful in helping to keep me organized and establish concrete goals, but it also proved to be motivating since it gave me a sense of accomplishment every time I was able to move an item.

 Tool_Rut_Notepad_List

Although I’m sure that this simple technique that I thought up certainly played a role in restarting the learning process, I think that my sudden awareness of the psychological ‘novice’ pattern that I fell victim to played an even more critical role.

Once I move the last ReSharper feature from the Practice list, I plan to apply this same approach to other tools, new language features, and uncharted API.

What have you done to break out of a learning rut?

Popularity: 10% [?]

Recouping Lost IQ Points from the Internets

I recently read an thought provoking article by Nicholas Carr, entitled Is Google Making Us Stupid?

In the article, Nicholas describes a phenomenon that I have observed happening in myself over the last few years.

Over the past few years I’ve had an uncomfortable sense that someone, or something, has been tinkering with my brain, remapping the neural circuitry, reprogramming the memory. My mind isn’t going—so far as I can tell—but it’s changing. I’m not thinking the way I used to think. I can feel it most strongly when I’m reading. Immersing myself in a book or a lengthy article used to be easy. My mind would get caught up in the narrative or the turns of the argument, and I’d spend hours strolling through long stretches of prose. That’s rarely the case anymore. Now my concentration often starts to drift after two or three pages. I get fidgety, lose the thread, begin looking for something else to do. I feel as if I’m always dragging my wayward brain back to the text. The deep reading that used to come naturally has become a struggle.

The article attributes this general scattering of our attention and weakening of our concentration to our ever increasing usage of Google and the internet, which is structured in a way that promotes skimming and quickly jumping from one source of information to the next rather than focused reading. The author presents a wide variety of historical corollaries, research studies, and anecdotal evidence to suggest that the internet is fundamentally rewiring the ways in which our brain processes information. The overall effect is that we are becoming more like “pancake people”, stretched thin over vast amounts of information which we only interact with on an increasingly superficial level.

Although I admire minimalism and conciseness in writing and find my well-honed Google-Fu to be an essential skill in today’s landscape of information overload, I have to agree with with the author that it is a shame that all the benefits of Google and the Interent seems to be coming at the expense of our more traditional, focused reading skills.

It is just plain embarrassing to run out of steam 1/4 of the way through a Steve Yegge blog post even though I find the article interesting. It makes me feel like an out-of-shape, intellectual couch potato.

But what can be done to counter-act this GIADD (Google Inspired Attention Deficit Disorder)?

I decided to start by overhauling the way I read my RSS Feeds.

In the GTD (Getting Things Done) arena, there is a concept of separating ‘Processing’ from ‘Doing’. Processing just entails making important decisions about whether or not something is worth doing in the first place, what context it best completed in, and where it belongs in your overall organizational scheme. Since processing and doing are two very different activities that require different frames of mind (sort of like the difference between skimming and focused reading), you are supposed to finish all your processing before you move on to the doing or ‘Next Action’ part of the equation. This way you can get into and stay into a flow during each activity.

Since this concept has worked really well for me while processing email, snail mail, and various other inbox items, I decided to apply the same principal to reading blogs.

Here’s my new RSS workflow

  1. Establish Zero Bounce Zone: First I organized my feeds into 4 simple groups as a way of prioritizing which ones I wanted to keep up with the most. I used Favorites, SunnyDay, CloudyDay, and RainyDay since they forced me to think of them in terms of how much time and motivation I had to read. Then I decided which folders I was willing to make a zero bounce commitment to, which means that I make sure I have processed every single post in those groups by the end of each day. I currently have about 30-35 blogs in my ‘No Bounce Zone’. I only process posts in the other 2 folders if I have time, which means I can still keep tabs on good potential sources of information without feeling guilty for having too many unread items in my RSS Reader.
  2. Process All Zero Bounce Feeds Daily: All I am doing here is trying to decide how interested I am in reading the post. Sometimes I can tell just by the title, but sometimes I have to skim it to find out. If it is a very short post that doesn’t take much concentration to read, then I go ahead and just read it. Otherwise, I put a Read++, Read, or Maybe tag on the ones that I am interested in reading. If they aren’t interesting to me, then I just mark them as Read and forget about them (life is too short to read everything). Since all I have to do is make a quick decision about every item in this group, I force myself to take these in order and resist the urge to just process the obviously interesting ones first. This is a bad habit that leads to procrastination and ultimately unprocessed items at the end of the day.
  3. Process Some Optional Feeds If Time: I tend to do this if I am all caught up on my ‘Zero Bounce’ feeds, but still have spare, otherwise unproductive minutes throughout the day that aren’t appropriate for more focused reading.
  4. Read Some Tagged Items: I usually wait until I have at least 20 minutes of quiet, uninterrupted time before doing this. For me, this usually tends to be at night when my kids (and often my wife) are in bed. Having this quiet time along with a large group of quality, pre-selected posts that I know I am interested in reading thoroughly helps me me disengage from my normal internet skimming mindset and get into a more focused reading mode instead. When selecting items to read from this group, I skip around and choose what I am most interested in first. After I finish reading them, I remove the Read tag so it will disappear from my reading queue and replace it with some recommended or technology specific reference tags to make it easy to track down later if needed. I expect this queue to always have a large number of items in it, so I don’t worry about its size as long as I know I am churning through tagged posts at a respectable rate each week.
  5. Periodically Recategorize Feeds and Tagged Posts: Between my interests being in a constant state of flux and the relative quality and content of blogs going in random cycles, I like to recategorize blogs and posts on a regular basis to keep things from going stale.

I’ve been doing this for a couple of weeks now and have already noticed a big difference in being able to focus more on reading. Surprisingly, I’m also getting much faster at skimming and processing since I’ve released myself from the need to comprehend anything beyond what will help me make a decision about whether it is worth reading.

Best of all, I finally feel in control of my RSS Feeds in a way that I never have before. Instead of feeling overwhelmed by thousands of unread items, I feel like it is a manageable workload so I am actually more motivated to keep up with the reading than I as before.

What are some of the things that you are doing to fight GIADD (Google Inspired Attention Deficit Disorder)?

Popularity: 8% [?]

10 Practical Tips on Freeing up Mental RAM

In my last post I mentioned that I had recently decided that it was time to overhaul my approach to managing tasks. The changes I implemented were mostly inspired by a book by David Allen called Getting Things Done and I have been extremely pleased with the results so far. As promised, here are some of the concrete ideas that I’ve adopted and incorporated over the last month.

  1. Following a Workflow: I found that my procrastination was mostly fueled by not knowing where to start on something or else feeling that it was too big for the small time slots that I usually had available during the day. Following this workflow whenever I a faced with a new item in my inbox gives me an automatic starting place and a way to boil down a massive, disorganized, tangle of items into a relatively small set of very specific tasks that I need to do.
  2. Treating Collecting, Processing, and Doing as Different Activities – The workflow diagram really only covers the processing part of the equation, which is where you make decisions about things. Two other distinctly different activities are collecting and doing. Collecting simply means recording items that are floating around in your head and placing them into some kind of trusted inbox so that you can process them later (I use rememberTheMilk.com, a Samsung smartPhone which syncs with rememberTheMilk.com, my email inbox, a physical inbox on my desk, and delicious). The idea is that each process requires a separate type of thinking, thus context switches detrimental in terms of productivity and effectiveness. I find that I also gain the most benefit in terms of peace of mind by completing the collecting and processing stages before I attempt to actually do anything (with the exception of the 2 minute rule below).
  3. Transitioning from To Do’s to Next Actions – My TO DO’s used to be very vague, like ‘Get Supplemental Life Insurance’. Now I take the effort to formulate the exact action I need to take and then attach any relevant information that I will need, such as ‘Call Mark (xxx-xxxx) and ask for quote on 20 year, $xx term life policy’. Since all the preliminary decisions and information gathering have been done, I am finding that I am much more likely to actually do it when I have a free minute during the day.
  4. The 2 Minute Rule – If I grab a task from my inbox that will take less than two minutes, I just do it. This keeps my list short. If it will take longer than two minutes, I force myself to put it in one of the ‘deferred’ piles (Next Action Lists) until I am finished processing so I don’t get distracted and run out of time before the processing is done.
  5. Grouping Tasks according to Contexts – Another helpful hint that I picked up from the ‘Getting Things Done’ book is to organize my Next Actions according to the context required to do them (call, errand, home, work, computer, etc.). Now, whenever I am out running errands, I scan my ‘Errand’ list to see if there is any other errand I can tackle that is close to where I’ll be. I’ve been surprised at how much more I get done now that I’ve picked up the habit of scanning the appropriate context list based on where I am and what I am doing whenever.
  6. WaitFor List – This is a very useful list where I now track everything that I am waiting for (the phone company to send me a rebate, the insurance guy to send me a quote, my wife to make an appointment, etc.). I set due dates on them so that I know when it is time to start bugging somebody if things aren’t getting done.
  7. Someday List – By explicitly separating all the things that I am explicitly agreeing to do (my Next Action and Project lists) from the things that are interesting to me but not appropriate to tackle at the current time, I dramatically decrease my tasks list and don’t feel nearly as guilty for those things that I’m not choosing to do at the moment.
  8. Reference Materials – I realized that a lot of items that I thought were TO DO items were simply things that I needed to keep as reference in a system that would allow me to quickly retrieve it when and if I should ever need it (that meant overhauling my existing black-hole-of-a-filing system). To have a good filing system, you really need to take an agile approach and constantly tweak it as new items come in and old ones become obsolete. The best way to do this is to buy an electronic label maker ($30) so that you can quickly relabel folders in a way that is neat and easy to read.
  9. Delegating and Deleting – These were two activities that I was not nearly aggressive enough with over the years. By having these questions as part of the workflow, I find that I am more likely to weed items out by throwing them away or letting someone else do them instead who is better suited to the task in the first place.
  10. Using Projects to Organize Multi-Step Actions – I found that the items I was most likely to procrastinate on were the things that had multiple steps involved but were too small to traditionally be considered a project. David Allen recommends considering these to be a project, which he defines simply as a place holder that is useful for periodically generating Next Action items and organizing supporting material. This is great for smaller projects because it naturally lends itself to breaking things down into more manageable chunks. He also has some great suggestions for larger projects in terms of defining goals, envisioning outcomes, and brainstorming possible tasks.

If you’re interested in learning more about these concepts, I definitely recommend buying the book (which is a quick read) or visiting some of the resources here.

Popularity: 12% [?]

The Joy of Freeing Up Mental RAM

I’ve always been somewhat prone to procrastination, especially in my personal life, but I’ve watched with growing trepidation as my task list has slowly grown out of control over the last several months.

Part of this trend is due to being a new parent. I expected that having a newborn would consume the majority of my free time, although I must admit that it didn’t completely sink in until it happened. What I didn’t expect was that my “honey-do” and “male provider” lists would also grow dramatically as my both mine and my wife’s biological instincts kicked into high gear. Meanwhile, my list of new tools and technologies to explore continue to mount as suggestions pour in from twitter, my blog, and my RSS reader.

The result is that I have many times more tasks to do than before but now I only have a faction of the time to get them done. This new reality has left me feeling overwhelmed, paralyzed, and generally less productive with the time I do have.

A few weeks ago I finally came to the conclusion that I needed to severely overhaul my approach to managing my tasks if I ever had any hope of feeling calm and productive again. Someone on Twitter suggested I pick up a copy of David Allen’s Getting Things Done book, so I started there. I’ve always had an aversion to business self-help books, but desperate times called for desperate measures so I picked up a copy in the bookstore.

I was surprised by how quickly my skepticism disappeared. I was especially sold on the author’s clear explanation of the negative consequences of relying primarily on our brain (mental RAM) to juggle all of our TO DO’s. Not only is this common approach tremendously inefficient since our brain randomly reminds us of things we need to do repeatedly at times when we can’t usually do anything about it, but it also perpetually consumes a limited resource (especially in my case) thus slowing down our overall mental functioning. In other words, it is like trying to get something done on your computer while running a dozen instances of Visual Studio 2008. You can do it, but it just isn’t what I would call an optimal experience.

The premise of the book is that it is possible is overcome this dynamic and achieve a calmer and more productive state of mind by simply transferring all of your tasks from your head to a trusted external system. In GeekSpeak, it would be the equivalent of flushing all those nagging thoughts from RAM to disk, which makes sense since you really only need them in memory when you are actually in a position to do something about them.

This analogy, along with the remarkably clear and helpful diagram below, convinced me to make a several week investment in optimizing my approach to getting things done.

The results have been dramatic. Not only do I feel like a huge psychic weight has been lifted from my shoulders, but I’ve completed a huge list of tasks that I had been procrastinating on for months and in some cases years. I also find myself fitting tasks into much smaller chunks of time during the day because I have organized them in such a way that they take much less mental energy to tackle, thus I no longer feel that I need to set aside a huge block of time to do them.

Even more surprising is that I find that doing things on my “Next Action” list is slightly addictive. Crossing off an item feels like lightening the load by removing something from a heavy backpack I have to carry around with me everywhere I go. There is an immediate relief in it.

If any of this sounds familiar to you, then I would recommend picking up a copy of David Allen’s book. It’s a very quick read.

For those of you that are intrigued but not sold enough to actually buy the book, stay tuned for my next post where I’m going to share all of the concrete tips that I’ve edited out of this post so as to keep it a reasonable length for a change.

Popularity: 24% [?]

Geek Community: Path to Self-Actualization or Pit of Unproductive Negativity?

I firmly believe that the answer to this question is…yes.

A Little Background (a.k.a. My Hermit Roots) – Like most geeks, I’m an introverted fellow by nature. I’ve never had trouble mustering the requisite polish when it came to interacting with clients and executives on the job, but when given a choice I would always rather be absorbed in code with my headphones on and a ‘do not disturb’ look of concentration on my face. Until recently, I preferred keeping to myself when it came my professional development and problem solving endeavors and routinely chose thick technical books, laser-focused research, and solo debugging efforts over blogs and community forums. I didn’t really see the point of developer communities and I doubt that I had a single person in my professional contact list that I didn’t know directly through a current or prior work experience.

The Slippery Slope into Community – I didn’t start to change my solitary ways until a few years ago when I finally decided to start subscribing to blogs in earnest (I know that I was extremely late to the game on this one). Before long, I graduated to leaving comments and then eventually to writing posts on my own blog, thus firmly entering into the realm of geek community by publicly exposing my own thoughts to the world for examination and potential (…ok probable) ridicule. Finally, through the magic of Twitter, OpenSpace conferences, and social networking sites, I began interacting with my fellow kindred geek spirits on a more informal basis and getting to know many of them personally. At the last conference, I was shocked when I realized that for the first time ever I was more excited to meet and interact with the other participants than I was to listen to the content of the sessions. That was the moment I first started to realize that my understanding and appraisal of geek community had significantly shifted.

A Place of Extremes - In the short time that I made the journey from geek hermit to neophyte community member, I have experienced the following highs and lows.

First the good

  • Real World Experience over Theory – Most of the content I see in traditional articles, books, and Knowledge Base entries seem overly theoretical and shallow because many are often based on idealized vendor technical specs or the author’s limited experiences with pet projects and demo applications. By contrast, many of the blogs or twitter rants I read are from people on the corporate front lines who are constantly dealing with the edge cases and pushing the limits of the technology. Despite being less polished than their more formally published counterparts, community based sources of information often yield much more valuable hints, insights, and warnings.
  • Analysis and Recommendations over How-To – While traditional learning venues almost exclusively focus on the HOW, community discussions are often centered around the WHY. In the age of google, learning HOW to use a new tool, framework, or API often borders on the trivial, but figuring out which one to use can become an overwhelming decision. This is where being part of a network of really smart people who readily share knowledge and experience can really pay off.
  • Perspective – No matter how large your IT department is, your work will be confined by a particular culture and set of technologies and practices. By contrast, online communities are usually comprised of developers from all over the world and thus offer fresh ideas and needed reality checks that you just can’t get from your co-workers. While your co-workers may be fearful or too polite to challenge your latest dumb idea, you can rest assured that developers you interact with ‘in the wild’ will be brutally honest.
  • Camaraderie – Besides being a source for excellent recommendations and discussions, I find Twitter and the comment sections of blogs to be a place where I can relieve some stress from the day by being able to joke or rant. Sometimes the lack of “face to face” social constraints has a very positive affect and allows people who are normally quiet and serious in a work setting (like me) to be much more light-hearted and humorous in a virtual community. The Canadian blogging circuit in particular (Justice, Donald, D’Arcy, Tom, et. al) has been a reliable source of comedy relief for me over the last few years.

Now the bad…

  • Anonymity Breeds Meanness – If you haven’t been personally zapped by an unnecessarily rude comment, then you haven’t spent much time in online discussions. In a process that makes road rage look tame, the anonymous aspect of online interactions can turn normally sane people into ranting, frothing-at-the-mouth maniacs.
  • The Need to Shrink the World – The first time I looked at the world map of my readership base in google analytics or scanned the diversity of topics available on reddit, I was struck with the uncomfortable realization that the world was unbelievably ginormous place. Unfortunately, the first reaction that many have to this psychological shock is to try to shrink the world back down to a manageable size by dividing it into a small select group of enlightened technical wizards (to which they belong) and a massive group consisting of the rest of the dimwits. This is the driving force behind the formation of so many identity cliques that divide people along otherwise trivial lines with a frightening religious-like fervor (i.e. Mac vs. Linux vs. PC, Microsoft vs. Sun, Dynamic vs Static languages, Mort vs. Einsteins, etc.). The world is just a more manageable place if you have justification to dismiss a large portion of it as irrelevant.
  • Flame Wars and Twisticuffs – As egos collide and tempers flare, even the most reasonable discussions quickly degrade into purse fights, twisticuffs (twitter fisticuffs), and flame wars. When this happens, the geek blood lust takes over and the pursuit of knowledge takes a back seat to the all consuming goal of winning the argument. I have occasionally been sucked into these “Lord of the Flies” type spectacles and I’ve always emerged feeling drained, dumber, and ashamed of myself.

What to Do? I admit that I occasionally have days where I am tempted to crawl back into my introverted shell and seal myself off permanently from blogs, twitter, and all other forms of geek community. Despite the silliness, meanness, and time-wasting qualities that lurk behind some online community interactions, I still have to conclude that it is the only viable option for a geek looking for self-improvement.

Nevertheless, before diving headfirst into community, you’ll need to learn to recognize the potential pitfalls and devise strategies for avoiding them. This could be as simple as unfollowing, unsubscribing, or generally avoiding people who trigger your geek rage or it could involve a more radical approach of taking a periodic hiatus from the online world to recharge your batteries. Failure to do so could lead you down the path to the geek dark side and eventually turn you into one of those curmudgeonly old trolls that lurk on mailing lists waiting for their next unsuspecting newbie victims.

In the spirit of community interaction, I leave you with the following questions for you to ponder and respond to:

  1. What are the other positive and negative aspects to geek community?
  2. Do you really think community is the fastest way to self-improvement?
  3. If you are a believer in community, how do you avoid all the negative aspects?

Popularity: 17% [?]

4 Corollaries for Highly Effective Developers

I recently came across an excellent blog post via Dzone from Ben Watson called 5 Attributes of Highly Effective Developers.

He lists humility, love of learning, detail-orientedness, adaptability, and passion as the most important traits that a developer can have in order to be effective at their job and provides some well written insight into what he believes each of the different traits really means. For example, he has this to say about humility:

…humility isn’t pretending to be worse than you are and it’s not timidity. So what is it?

Simply put, humility is an understanding that the world doesn’t begin and end with you. It’s accepting that you don’t know everything there is to know about WPF, or Perl, or Linux. It’s an acknowledgment of the fact that, even if you’re an expert in some particular area, there is still much to learn. In fact, there is far more to learn than you could possibly do in a lifetime, and that’s ok.

Once you start assuming you’re the expert and final word on something, you’ve stopped growing, stopped learning, and stopped progressing. Pride can make you obsolete faster than you can say “Java”.

His thoughts inspired me to come up with a few corollaries of my own. I refer to them as corollaries because some of them are related to humility and passion, which are Ben’s attributes.

Ensure the Right Problems are being Solved

One of the fastest and most talented developers I’ve ever worked with also turned out to be the least productive member of the team because he continually had to rewrite his code since it never matched what the stakeholders envisioned. I’ll be the first to admit that stakeholders are a fickle bunch, but other developers on the team, who were not nearly as fast or smart, turned out to be much more effective in the long run simply because they constantly asked clarifying questions and sought regular feedback on their work. That led me to one of my most important maxims: It’s not how fast you can churn out code that matters, but how long it takes you to get an acceptable product to your stakeholders.

Creatively Reformulate Problems

Some of the most productive moments I’ve had in my career have resulted from taking a step back from a difficult problem and critically thinking about each of the problem’s underlying assumptions. Many times the assumptions proved to be erroneous or incomplete, thus making way for a much simpler solution. I can think of a few instances where I was able to get around the problem by creatively tweaking the user interface or workflow.

Other times I’ve been able to eliminate the problem entirely by honestly communicating the cost of the feature to the stakeholders, who then removed it from the project list because it didn’t provide enough value to justify the cost. There are definitely times when the brute force technical approach will be required, but I think a developer who is willing to try finessing a complicated problem first will almost always come out ahead.

Use Questioning As a Learning Tool

Sometimes it is not a matter of knowing what question to ask, but rather knowing when to ask it. I recently caught myself squandering perfect learning opportunities because I was afraid that asking my questions would make me look stupid. Conversely, I routinely witness developers pass up similar learning opportunities because they view another person’s skills or platform as vastly inferior to their own and thus erroneously assume that there are no valuable lessons to be gleaned.

On the opposite end of the extreme, it is common to waste learning opportunities by too quickly asking to be spoon-fed an answer without first applying any effort to solving the problem. It is justifiable to occasionally take shortcuts when the project is under a tight deadline or you are in a true collaborative mode (i.e. pair programming), but I think that truly effective programmers value the research and problem solving skills more than one single answer and will thus tend to discipline themselves to be a little self-reliant whenever possible in this area.

Temper Passion with Pragmatism

I agree with Ben that passion is a key trait to look for in a developer, but I’ve also seen otherwise brilliant developers reduced to utter ineffectiveness because they expressed their passion in negative ways one too many times and consequently alienated their co-workers and destroyed their own credibility. Unless you’re spiking the workplace coffee with mind control drugs, you’re likely to only have a limited amount of persuasive currency to spend on convincing your co-workers to switch to the latest and greatest language, tool, framework, or process. Truly effective developers are good at prioritizing the changes they want to help bring about and will consequently let the little things go (without so much as even a snide comments).

The other thing I notice in effective developers is that their passion is grounded in some form of objective criteria so that they are able to calmly provide both pros and cons of a technology that are situational based. That means that they can immediately identify situations where their favorite technology would be inappropriate. Passionate developers who are ineffective don’t often make such a distinction, which usually leads me to conclude that what they are really need is a religious cult or social club to fulfill whatever void that their current language, framework, or platform of choice is filling for them.

In conclusion, it takes more than raw mensa level brain power and passion to be effective at your job. If you want to be or find someone who is both Smart AND Get Things Done, then you have to focus on a few non-intellectual qualities like emotional IQ and self-awareness as well.

Popularity: 15% [?]

Which Productivity Tricks Have You Adopted Lately?

Every since I learned that the most important characteristic of people who become experts is that they continue to learn throughout their careers at the same pace they did when they were beginners, I have found it helpful to do regular mental inventories of new things I’ve recently learned as a way to keep myself honest.

Here are some of the productivity tips that I’ve picked up in the last 3-4 months that have worked out well and saved me quite a few wasted keystrokes and mouse movements:

  1. Launcher Program Parameters – In my recent post Friends Don’t Let Friends Use the Start Menu, I described my newfound addiction to SlickRun as a way to launch programs. Since then a few people have suggested that I try Launchy instead because it automatically detects programs without any keyword setup. I still intend to give it a fair chance, but I have to admit that so far I’ve been too distracted by experimenting with using SlickRun parameters so that I am not just opening a program but also accomplishing the first task or two that I normally would perform. For example, instead of just opening Firefox I now have different “magic words” configured to open one or more web sites at the same time. I also have different keywords set up for opening up each of my Visual Studio solutions as well as connecting to each of my different database servers with SQL Management Studio.
  2. UltraMon Window Switching Hotkey – I’ve been hooked on UltraMon as a way to quickly switch windows back and forth between monitors for a while, but I’ve only recently thought to set up a hotkey(there is a HotKey tab in the UltraMon properties window). Now I switch the active window to my other monitor by just hitting Ctl + Right Arrow Key.
  3. Adding NotePad2 to Context Menu – Life is too short to open random source files with Visual Studio. That’s why I prefer using Notepad2, which offers syntax highlighting but opens instantly. I recently ran across this blog entry that shows how to hack the registry so that this handy utility shows up in the context menu. Now when I want to open source files outside of Visual Studio, I simply right click on the file and choose NotePad2.
  4. Address Bar Hotkey (Alt-D) – I picked this tip from a recent Jeff Atwood post and have since used it about a thousand times a day since it works both with the browser and Windows Explorer.
  5. Lighter Weight ToDo List – Adding to the “ridding my life of tools that take too long to load” theme, I’ve recently stopped using Microsoft Word to track my To Do list and instead started using a lightweight utility that comes with SlickRun (Jot). Now when I need to jot down a task or thought, I hit Ctl-J and a little green window pops up within in milliseconds rather than the 3-6 seconds it takes Microsoft Word to load. It doesn’t sound like much, but it really adds up over the course of a day. Also, given my ADD tendencies, I have trained myself to immediately jot down random tasks or thoughts immediately as they occur to me or else I tend to lose track of them. However, if I can’t do this in one swift, fluent motion, then I lose all the momentum I had built up on my prior task so this is a big boost me personally in that respect.
  6. Unlocking Files with Unlocker – If I get impatient loading up Visual Studio and Microsoft Word, then you can imagine how reluctant I am to reboot my laptop or a development server. Rather than rebooting to solve a file locking related issue, I used to fumble around with Process Explorer in order to figure out which program or service needed to be shut down rather than rebooting like I’ve observed other people doing. Now that I have the Unlocker utility installed, all I do is right click on the locked file and select ‘Unlocker’. The utility displays a list of all the open file handles along with the option to simply unlock the file or else kill the locking process.
  7. Configuring VSS to use BeyondCompare for File Comparisons – Every piece of code gets reviewed where I work now, which means that version comparison becomes a pretty critical feature. God help us that we still haven’t managed to find the time to migrate to a real source control tool yet, but one saving grace is that we all have BeyondCompare2 configured as default comparison tool. The VSS comparison functionality just highlights the line that has changed, but BeyondCompare2 highlights the exact characters that have changed. This doesn’t sound like a big deal, but the savings in time and eye-strain add up quickly if your shop is strict about code reviews.

I picked up many of these tips by simply observing my co-workers or following suggestions I read in a blog posts. Other improvements came about as a result of trying to pay attention to any actions I did frequently that seemed to take more steps than they should and then creatively thinking about how to reduce the number of steps.

No matter how you end up picking up these kinds of tips, the trick is that you have to be willing to invest energy in changing your workflow habits.

Which tricks have you picked up recently?

Popularity: 14% [?]

Next Page »