Thursday, February 4, 2010

ToDo Lists and Being Proud of your Accomplishments

A great way to make sure you don’t get distracted from the tasks that are most important is to keep a todo list. I used to keep three todo lists, one for today, one for this week and one for “someday.” My technique goes something like this:

The Technique
At the beginning of the week I outline all the accomplishments I want to make for the week then I prioritize them and put the most important (ranked by impact) at the top, and least important at the bottom.

At the beginning of each day I select the number of items off that list (and sometime break them up into subtasks) that I think I can accomplish during that day. As my day goes along I can refer back to this list to know the next thing I need to accomplish. I never have to question whether or not I’m working on the most important thing because I’ve already prioritized my tasks at the beginning of the day.

At the end of the day or at the beginning of the next day I look at my list and if I haven’t checked each task off I try to figure out why and what I could change to ensure I get better results the next day. Reasons may include: I under estimated the amount of work each task was going to require; I wasn’t feeling well and didn’t have the amount of energy I thought I would have; I got distracted by another task.

If the issue was that I under estimated the amount of work each task was going to take I try to learn from that mistake so my estimation can be better for tomorrow or next time.

I understand that some days I will be more focused or have more energy than others, and that’s OK. If it becomes a chronic issue though, there may be something else to blame. Am I lacking the inspiration I need to be excited about this task? Are there other external factors at play (sleep, stress, summer sunshine, winter powder)? If I lack the inspiration I try to find my “why.” If it’s an external distraction that’s keeping me from focusing I try to reset my focus by carving out time to dedicate to those things.

The last reason I don’t get everything done I want to is usually the most common. I got distracted by another task. If I see that I didn’t accomplish everything I wanted to accomplish that day because I was distracted by some other task I have to ask myself if that was the correct decision. Was that task more important than the thing that I didn’t get to? If I can honestly answer yes, then it was the right choice, and I did what I should have done. If it was less important than what was dropped I reassess my prioritization and make sure the task gets done the next day.

I use a similar technique to ensure that I’m staying on tasks at the beginning and end of each week. Assess what I accomplished (either on the list or not on the list) and analyze what I did not accomplish.

The Tools
In order to use this technique you must be absolutely diligent about keeping track of your tasks and results. This means that if you do something that’s not on your list make sure you write it down for later assessment.

I started this technique with a basic pen and paper approach. My office mates would often laugh at my notebooks that had lists and lists written all over them each item scribbled in and crossed out. I get great pleasure out of crossing items off my list, but keeping my list in order is very difficult, and usually requires rewriting the list or keeping the list double spaced so you can squeeze items between. Additionally I’m a nerd, by any measure, so I seek digital solutions that will give me the most efficiency, so this is clearly not the ideal solution.

I burned through many task list applications, web sites all met with greater or lesser success. I’ve tried Remember the Milk, Evernote, and Google Tasks Lists. I liked Google Tasks the best because of its blazing speed and ease of use. Remember, for a todo list to be useful it has to be nearly transparent to your daily work, or you won’t use it.

My wife turned me on to teuxdeux which I really like. It’s fast and easy to use, but it adds the ability to add tasks to different days of the week. This lets me plan a little better and lets me offload tasks that have specific deadlines early so I don’t have to think about them before they’re done.

No matter which tool you end up using the important part is to assess your progress through the tasks you outline for yourself and to write down every task you accomplish during the day. The great thing about writing down everything you do and crossing it off is that you have a beautiful list of accomplishments. Exactly what I need after a long day at work!

Labels:


Wednesday, December 30, 2009

When is it OK to build up Technical Debt?


As I previously mentioned I’ve been writing a bit of Ruby on Rails. I’m surprised at how quickly I can slap something together and get results, especially prototypes, up and running quickly.

Technical Debt is generally defined as the eventual consequence of building software in a quick and dirty way. This most commonly occurs when a developer jumps directly into writing code without architecting or thinking through the solution. Usually a solution is spit out prematurely and will quickly fall over under heavy load or stringent testing.

The opposite of this would be to slowly build skills, tooling, requirements, specifications, tests, libraries, etc. until the problem is well defined and it’s just a matter of converting requirements and specifications into code. The problem with this is it is SLOW.

Other development techniques have been developed to bridge this gap. To provide the right amount of guidance when it’s necessary, but not so much that we develop requirement paralysis. TDD and Agile are two techniques that come to mind, but other technological solutions such as Object Oriented Programming, fantastic libraries and frameworks also help us get results and make headway quickly.

Still there will come a time, even with TDD, Agile, OOP, and a framework that makes you happy, when you have to decide between the right way, and the right-now way. At these times it’s important to know how to weigh those decisions properly. Here are some questions that might help you decide whether to build up technical debt or to build your software in a more measured way.

How long until the next version? – if this is a quick demo version that will be completely replaced it makes more sense to build it quickly leveraging anything you can get your hands on, using the skills you have now, rather than trying to learn a new tool. However, if this version has to stand on its own for an extended period of time, real customers will use it or if it will have to stand up to heavy live testing or load then you may not be able to cut corners.

How many customers are likely to become dependent on this? – Don’t forget that you may not just building up technical debt for yourself, but also for your customers who rely on stable software to build their solutions on. Changing large amounts of the software under existing customers can be difficult, you may even lose some of them to a competitor. Preserving perfect backwards compatibility makes it easier for your customers but forces you to shoulder the whole burden of your technical debt. Making this decision too many times can cause you to lose revenue to support and maintenance staff.

Is there an easy way out? - Using layers of abstraction to firewall the well architected pieces from the “quick and dirty” pieces is a good way to be able to componentize pieces that need to be replaced later. Before laying down thousands of lines of code ask yourself “How easy will it be to replace the technical debt pieces?” and if it’s going to be easy or there’s a way to make it easier on yourself then you might have the right decision. If your technical debt is taking a large dependency (for example a framework that is not well supported and will need to be replaced) then it may not make sense.

How likely will it be that you’ll have time to pay down your technical debt? – If you work at a company like most of the people I talk to you probably have a stack of todo items five feet tall and the only way anything ever gets done is if it is figuratively and sometimes literally on fire. If that’s the case then paying down the technical debt when you have a chance so you do it right the first time makes the most sense which will reduce future headaches. However if you need to release something right away and you know you can schedule time to return to the pieces that need attention you may be able to take on some debt without too much risk.

What kind of load will your application be under in this version? – If you’re anticipating very heavy load immediately upon release performance needs to be in the forefront of your decision making. One of the best examples of this is twitter; they were able to slide by on a shaky ruby-on-rails application until they grew to be one of the most visited sites on the internet. When they were in the throes of their growth pains we saw the fail whale often. They’ve had to quickly pay down their technical debt by replacing most of the backend of twitter with scala, memcache and starling, erlang, MySQL, Mongrel and more.

How much (real) market pressure is there to release a solution immediately? – Sometimes we feel every day we don’t release is another day people are filling the terrible hole in their lives with some other product. Unfortunately or fortunately this is often not the case. If we look at many examples of current market leaders they weren’t the first to market, but the best. The first mp3 player wasn’t the iPod, the first windowed GUI operating system wasn’t Windows, the first (nor the last) social media site was facebook. If you’ve promised a customer or client a solution it’s good to be on time, but if you don’t have customers shipping a half-baked product may give any potential customers such a bad taste in their mouth they won’t reconsider when you’ve had a chance to repay that technical debt you built up.

Many times it’s more important to get something out to get traction. As I mentioned in my “Let the pedestrians define the walkways” blog sometimes it’s better to get traction and feedback with people now and build up a little technical debt than to build a perfect solution that nobody can use.

Remember until you release nobody cares how fast, well architected, well commented or beautiful your software is.

Labels: ,


Monday, December 7, 2009

Fake ‘Savoir Faire’ with ‘Mise en Place’


I recently went home to see my parents for Thanksgiving. NPR was playing in the car and a short story came on that struck close to my heart in two ways. It was about how to pull off a seemingly effortless multi-course meal by effectively front-loading most of your heavy cooking to prep work so that all you have to do when your guests arrive is to ‘finish’ each dish. This means that absolutely everything that can be is chopped, blanched, steamed, mixed or even completely ready to serve (in the case of many deserts) before your first guest arrives.

When you do this it makes the cooking look like magic.

As we were driving down the road I realized this is a great thing to strive for in software development and professional interactions as well. I’ve noticed the more preparation I can do before a meeting the better it goes. Some people have the ability to make this all look effortless, those people have “Savoir Faire,” but it always catches up to them. There will be a time when they’ll get burned by their lack of preparation.

Here are a few tips on how to prepare for a meeting or delivery of a final project.

Ask the tough questions – Make a list of the top 15-20 questions you don’t want to hear in a meeting. Answer those questions to the best of your ability. Often we go into the meeting expecting our best case scenario, but everybody else in that meeting is there to understand your proposition deeply. Help them understand, and cover all your bases.

Think about your backup plan – What do you need in order to deliver your presentation? What if those things aren’t there, break down, or you forget them? Computers are notorious for not connecting to projectors when you want them to. Thumb drives fail, projectors overheat, networks aren’t always available, dry erase markers dry up, and audio equipment fails. Think about each thing you need in your meeting and think about how you can continue when the failures occur.

Run through your presentation exactly once – Make sure you run through your presentation end to end once before you are in front of people, but don’t memorize a script or demo. Memorization will come off as such, and you’ll have a hard time engaging the people in the meeting. You need to be dynamic, but well prepared. As mentioned above, lots can go wrong, if you memorize how you want everything to happen, you’ll have a hard time thinking on your feet when unpredicted things come up.

Relax – Most of the ways that you can recognize being nervous are not visible externally. Nobody else can hear your heart beating in your ears, they can’t see the sweat in your palms, and they’re probably not paying attention to your face becoming flushed. 30 min before the meeting review your talking points quickly, then put them away until the meeting. Take a walk 15 min before, have a small glass of water and take a deep breath. During the meeting remember to breathe and if you’re standing up feel free to move a bit, walking around the room can make the delivery seem more natural. Finally remember you don’t need to fill up every moment with talking, you can stop to take a breath, to walk across the room for emphasis, or to wait for feedback.

Monday, November 23, 2009

Let pedestrians define the walkways

I like to post my own thoughts here, but I just read a short blog on Derek Sivers' blog that really hit home for me. He tells the story:
A new green college campus was built, but one thing was still debated:

Where in the grass should we put the paved walkways?

Some felt the walkways should be around the edges, to leave the center green and untouched.

Some felt the walkways should cut diagonal, connecting all buildings to all buildings.

One professor had the winning idea: Don't make any walkways this year. At the end of the year, look at where the grass is worn away, showing us where the students are walking. Then just pave those paths.

I love it! I've seen so many places that have beautifully planned out landscaping that is marred by efficient pedestrians that know that the shortest distance between two points is a straight line.

He goes on to say how we can model our business after this plan. This follows the use of rapid iteration model of software development.

Listen -> Build -> Release

Listen to what people need, listen to their pain points. Build something lightweight that you think people will love and that will remove their pain, build it quickly. Release it before you think it's done. Go back to listening, listen to what they like, what they don't like, and what they want. Go back to building, build what they want. This reduces the amount of time you spend concocting crazy use cases or user models that may or may not exist or spending too much time building something that nobody wants and let's you leverage the wisdom of the crowds. When you're done building you know that you have something that people want to use because they helped you decide on the features.

One example of a company that doesn't seem to do this is of course Apple. Apple (an to an extent Google) has an incredible ability to anticipate what consumers want before they know they want it. To be a true market leader and leap over the competition risks like these are not only desirable but necessary. There is often a time when a consumer doesn't know what they want or need, they just know they don't like what's out there. What was wrong with the Philips GoGear? Before the iPod Touch came out I don't know if I could have put my finger on it. It took Apple's leap of design and development before I realized how many features were missing. This model is significantly riskier, but like all things with risk comes the potential of reward.

Labels: ,


Thursday, November 19, 2009

iCal Lost My Calendars


I recently made the switch from Windows to Mac. Don't panic, I still use bootcamp to boot into Windows regularly for development work, but I'm really making an effort to "be a Mac," at least for a little while.

I just tried to add my Google Calendar as a caldav calendar. My first issue was that you can't use the "Automatic" account type, or even the "Google" account type, you should follow the instructions very carefully on the google calendar help page. Once I followed the instructions carefully my calendar seemed to start to sync.

I use Google Calendar quite a bit, so I'm sure there were quite a few items in there, but after about a minute I became impatient and closed iCal. When I restarted it all my calendars were gone, imagine my surprise :)

I started digging around on the internet, but found nothing that addressed my specific issue. Many crashing iCal issues, but nothing that mentioned iCal simply deleting or not loading the calendars that were there.

I deleted the iCal preferences files found in my ~library/Preferences/ directory (anything that starts with com.apple.iCal) but that didn't help.

The final solution was to go to ~Library/Calendars and move the newly added google calendar to the trash. It seems this got corrupted when it was trying to pull down the data from Google. Once the file was corrupted iCal simply stopped loading any calendars, and displayed a completely blank calendar.

Of course if I were going to recommend a solution to Apple, I would say to alert the user of the corrupted file, ask them if they'd like to keep or delete the file and where it lives on the disk, then (gasp) continue loading all uncorrupted calendars.

Joe

Thursday, November 5, 2009

Three Bookmarklets I need


Since becoming a full time chrome user I've begun to see the power of using bookmarklets. A Bookmarklet is a small bit of javascript that you can put in your toolbar to perform some task on the current page your looking at.

InstaPaper
InstaPaper let's you quickly save and read articles that you want to read later but don't have time to right now. It does more than bookmarking the site because it tracks what you've read and syncs it on all your computers and devices. There's an iPhone app that lets you read the articles you've read. Once you've read an article InsaPaper archives the link so you have it for future reference while keeping your current queue uncluttered.

The bookmarklet lets you quickly save an article for future reading, without having to leave the page. This is super useful if something looks interesting but turns out to be a lot longer than you were anticipating.

Bookmark on Delicious
I've started to bookmark interesting links on delicious. This is a nice way to organize and share links with people. Without tagging I tend create a huge, flat list of bookmarks on each browser I use, on each computer I use. Since my alter ego is a web developer I tend to use a lot of browsers on all my computers on all the different VMs, so this can quickly fail to scale properly.

This bookmarklet lets me quickly save a page to delicious without having to leave the interesting page I'm currently on.

Readability
When I do get around to reading the articles I want to read Readability makes it much easier on the eyes. This reduces clutter on the page by doing a very nice job of removing the ads, images and making the text uniform. You can configure what it looks like to suit your preferences.

Friday, October 16, 2009

Goals, Results and Activities - defining your productivity


I think that it is important to properly define the terms that we use when talking about productivity. Since these words are somewhat subjective it matters more that you have a specific definition that you can refer to periodically than to agree with everybody else on the specific terms and definitions.

I use the words Goals, Results and Activities.

A quick definition might be that a Goal is a long-range target. A result helps you, your company or your team succeed. Activities are the smallest unit of work that helps accomplish a result or goal.

You can think of an activity as a single step in a journey. It always takes work to make a step, but the step does not always get you closer to your goal. Of course the lesson is to check your compass and map periodically to make sure you’re always going in the right direction.

Goals
Goals are long ranging strategic targets. They can be self created or defined by your manager or company. An example of a strategic company or team goal might be "Be profitable in Q3" or "Ship Version 3.5 of our Product." We define goals so that each individual to look up from their daily tasks and see how it fits in with the goal. This helps people know when they’re on track and helps them feel like their making a difference and not just a "cog in a wheel."

Personal Goals are a very important piece of my happiness. When I can accomplish a personal goal or can see myself making progress on a personal goal it gives me great satisfaction. Personal goals don’t have to be anything more than something you’d like to do. I can give examples of personal goals, but it is important for you to find your own passion. For me it is to Run a Marathon, Compete in an Olympic distance Triathlon and help my non-profit, Technically Learning, meet our donation goal this year.

Results
Results are all about impact. The best results have the highest impact. Impact can be defined by how much closer completing that result will get you to the goal. I’d like to dedicate an entire blog entry to getting results, but for now let’s move on to tasks.

Tasks
We define our tasks by splitting up larger blocks of work. We can then prioritize those tasks by what will give us the best results and the greatest impact. It is important to reflect daily on your task list to make sure the tasks you are completing still align with getting the best results and align with the overall goal. Don’t get so focused on the individual tasks that you lose site of the goal. Tasks are meaningless if they don’t get the results.

Have you ever known anybody that seems to be constantly busy or overwhelmed but never seems to accomplish anything? They may be simply choosing the wrong tasks and by the time they’ve completed their task list, the goal has changed and their work is lost.

Remember: high activity does not necessarily imply high impact.

Labels: , , ,


This page is powered by Blogger. Isn't yours?

Subscribe to Posts [Atom]