Replies To: Any Tips on Remembering What You Did Last?

Re: Any Tips on Remembering What You Did Last?

Posted 22 November 2012 - 09:34 PM

You have a software design doc, right? A list of functionality you want in it which should lead into some sort of breaking down of items and tasks to code up, right? Something that says "when X, Y, and Z are done the project is done"? You should be checking these things off, and at worst supplementing this order of operations with a spiral notebook to keep notes of what you are doing, design choices, and why.

Re: Any Tips on Remembering What You Did Last?

Sometimes I disable GUI elements until the code behind is done.
If I see 3 disabled buttons then I know "Oh, yeah - I need to write the code for x, y, & z"

A program like ToDoList is good for not only outlining all the planned steps, but tracking the time consumed on each part. (As Modi phrased it, a design doc/list)

I also write an ongoing email to my boss, outlining what I've done throughout the day. Not too much detail to make the email a hinderance, but the bullet points. Just reading yesterday's log is enough to remind me (inform me?) of what's next.

Re: Any Tips on Remembering What You Did Last?

Posted 23 November 2012 - 03:18 AM

I'll usually comment a class/method/whatever when I think it's done. Also, for larger projects, I like to use a tool like Trello to make a sort of pipeline - I'll have lists like "Todo", "In progress", "Debugging" and "Done", and then I'll move tasks around the lists. That way I always know that if something is on the "In progress" or "Debugging" lists, I should probably finish those before starting something new.

Re: Any Tips on Remembering What You Did Last?

I follow a productivity system called GTD. It's great for helping you pick up from where you left off. Here are the specific parts that apply to my time spent programming.

My project plans usually take the form of a mind map. I take my yellow* highlighter and highlight all the features that comprise the first iteration. When this iteration is done, I expect to have a fully functioning (if limited) program.

The highlighted parts tend to span the whole mind map. It's going to include the main feature, some sort of user interface and probably some IO. As I complete each feature I take my green highlighter and cover over the yellow.

Implementing a feature usually involves several steps. I take a page in my spiro notebook and write down all the steps I can think of. Some I can do right away, others need to wait till their prerequisites are done. The ones I can do get highlighted in yellow. These are my next actions.

As I work through the tasks in yellow, three things happen:

I finish a yellow task and highlight it in green. (This is usually a good time to commit to version control).

I think of a bunch of new tasks for the current feature** and write them down, highlighting in yellow as appropriate.

Unhighlighted tasks become available and I highlight them in yellow.

Eventually, all the tasks become highlighted green and that feature is complete. I mark it green in my project plan and repeat the steps for the next feature.

When the first iteration is finished, I go back to my project plan. I can either choose to leave the project and move on to something else. After all, I have something useful that works and my plans for expansion if I ever come back to it. More likely, I'll choose a set of features for iteration 2 and repeat the process.

Why does it work?

Specifically, how does it help with toad87's problem of returning to a project after a break?

My plans and actions and colours show me:

what I have just finished doing (green in actions)

everything I have accomplished so far (green in project)

where I am heading (yellow in project)

the very next thing to get me going again in the correct direction (yellow in actions).

This overview, at a glance, reminds me of everything about my project. The colours on the mind map remind me of the feel I had before I stop. Even if I have forgotten a lot about the codebase, the next actions guide me in where to look and by the time I have finished an action or two, I'm up and running at full speed again.

For a long time, I laughed at people who used different colours of pens and highlighters. But I have found the colours add an extra dimension to my notes, one that the human brain is great at understanding in an instant. You really can get a lot of information just by glancing at a page.

One thing I didn't mention (because it's not directly relevant) is that if I ever decide an action or feature is not worth doing any more, I colour it pink. I's just as useful to see what I'm not doing as it is to see what I am doing.

And then cross it off/check off when you get done with the feature. This will help keep you focused at what you need to be doing and you can also look back at it and remember "oh yeah, I did X and Y to do that".

This works especially well if you use Git, because if you follow this well each commit should only to be to add that feature you were working on. You can use git diff to view the difference between code for a certain day and you can see all of the functions/changes you made. This works especially well if you use Github as well. Github will make it easy to view these changes/commits.

Re: Any Tips on Remembering What You Did Last?

Posted 23 November 2012 - 07:05 AM

That's essentially the same as my approach except...

You probably have a master list of actions somewhere and copy them into daily lists. That sounds equivalent to my highlighted and non-highlighted actions but there is an important psychological difference. Events have a habit of stopping you doing what you intended. Maybe one feature took longer than expected or your boss stopped by your desk and gave you an urgent task you had to spend the rest of the day doing. In these situations, you don't get your daily list finished which is demoralising.

If you don't have the master list (and I don't know if you do or not) then it's more difficult to get back into the project after a break because you will have forgotten all the things you wanted to do.

Re: Any Tips on Remembering What You Did Last?

Posted 23 November 2012 - 01:27 PM

If you start out by breaking the problem down to its component parts, you pretty much solve this problem: just enter each of those components into your bug tracker as "X not yet implemented". Now you can use the same system you'll use later when you find errors in implementation, prioritizing, tracking dependencies, etc.