Monday, August 05, 2013

Why I finally began to like TDD

I actually wrote this Controller Method in Ruby, but I will translate it to C# style. This is why I finally began to like TDD. Notice that there is a single call to Model (Movie) from Controller Method.

Without TDD

String ByDirector(int id)
{
 Movie movie = Movie.Find(id);
 if (movie.director == null || movie.director.size == 0)
 {
  String text = movie.title + " has no director info";
  this.Flash(FlashType.Warning, text);
  return RedirectToAction("HomePage");
 }
 this.movies = Movie.where("director = " + movie.director);
}

With TDD

String ByDirector(int id)
{
 try
 {
  this.movies = Movie.FindByDirector(id);
 }
 catch (NoDirectorException e)
 {
  this.Flash(FlashType.Warning, e.description);
  return RedirectToAction("HomePage");
 }
}

Wednesday, June 05, 2013

MSF Agile 6.x Boards and how to do Bug Management

I am using Microsoft Solutions Framework (MSF) for Agile Software Development latest version, i.e. 6.2, although this should be valid for any 6.x version.

In TFS 2012, latest version of both Agile and Scrum templates come with boards for tasks and work items. I am not able to find anything for Agile boards, although there is info available for boards in Scrum Template which are very similar to boards in Agile Template.

Agile boards are for user stories and for tasks within user stories  So one cannot see bugs and their child tasks. Same is the case with issues and their child tasks. One solution to this problem is to make a fake user story per bug. Others have explained how to modify the template so that one can see bugs in the board. MSF folks also seem indifferent to whether TFS users plan bugs with user stories or separately hence they have also written on how to add bugs to the task board or backlog.

I discourage above solution as giving story point to bugs is not a good idea (see last para) and so is cluttering real stories with fake stories especially when bugs count is usually more than stories count. Now here is my take on how to manage bug in MSF Agile 6.x.

  • If a bug is in a user story that one is currently working on in the given iteration, then add both that bug and associated tasks such as "fixing the bug with approach XYZ" as direct child of the user story. I believe time tracking is actually needed to know how much time one needs to spend, or for that matter has spent, on the user story. And this way you have included time spent on fixing bugs injected while working on that story. If one really needs to audit time spent on such bugs, then link appropriate tasks with the bug as "related". 
  • Now if a bug is in a legacy story then that should be fixed outside iteration capacity and thus should not be managed on board. So a team that has lot of legacy bugs can commit spending 30% capacity on fixing legacy bugs i.e. they will plan for stories with 70% capacity. Now as long as these bugs are stack ranked, whenever a developer has time he can pick the top one and fix it. 

Why outside iteration and why no need for story points? Well actually these legacy bugs are slowing ones velocity and to me are more like impediment to the user stories that otherwise team would be working on.  So if there are lots of high priority legacy bugs then a developer or two can commit 100% of their capacity to bug fixing for a few iterations. Bottom line is board are for real stories.

Monday, February 18, 2013

Daily Standup

This is basically an email that I sent to my subordinates in March 2012.

Daily Stand-up (also known as Daily Scrum) is:

  • where you share your progress (what I did since last meeting), commitment (what I have planned to do till next meeting) and identify obstacles.
  • a meeting so prepare for it. Don’t stand there wondering what you did and what you want to do. You should know this precisely when you enter the room.
  • for team; not for Product Owner or Scrum Master. Team needs to know what you are doing to align their efforts.
    • Team member can ask clarifying question. But even ask these questions conservatively i.e. only when really needed.
  • not for problem solving. Do that after the meeting.
  • not for storytelling. Tell the headlines, not the whole story.

If there is low energy in the status meeting then the chances are that the team is not following the above. If a team member has an obstacle, then he should not wait till Stand-up  Inform your Scrum Master ASAP. Stand-up is just a sure way to know daily about any new obstacles. Since, sprint goals are team goals therefore any obstacle is a team obstacle: try identifying it proactively.

If you want to read more about Daily Stand-up then here are some good articles:



Sunday, February 17, 2013

Setting up Astrid to get things done


I have come up with following Tags after some search on internet and tweaking the findings based on my experience & me needs. It might be useful to others who use To-Do apps with Tagging support e.g. Astrid, RTM, etc.

Group

These are mutually exclusive: #GIKIAA #LMKR #Personal

GIKIAA is volunteer work and LMKR is my employer. So one can replace these two with #Volunteer and #Work respectively.

Context(s) 

Some of these are not mutually exclusive e.g. something you can do both at office or home BUT if something can be done anywhere then you may have @anywhere

@Car @Computer @Home @Office @Pharmacy @Market @Dubai

Type(s)

First four are generally Mutually exclusive: .Call .Email .Read .Meet .BrainDead .Block

BrainDead are the tasks that I do when I have zero energy to do something more meaningful e.g. Take backup. Block are the tasks that are impeding something e.g. Heater is broken, Server has crashed)

Person(s)

Mostly mutually exclusive but there can be tasks that need feedback from multiple people: !Father !Wife !CEO !VP 

I have many more especially for key people and even group !subordinate but since I am a manager so I also have tags for the teams that i am managing: -Team1 -Team2

Project

Actually this is for any thing that is multistep. So it can be projects or releases or even epics (grand user stories): --ProjectNextGen --Release2013.1.0 -Epic2314

Example

For task "Hire Waqqas Jabbar's replacement" I would put: #Work @Computer @Home @Work .Email !VP -ARCH

As I am using Astrid so I don't need tags for “When” and Priority. Otherwise I would have had something like +Today *HIGH

Hope this helps.

Evaluating a few To-Do apps for iPhone

Conclusion is at the end

Wunderlist

Pros: Wunderlist has some good things. first of all it is very simple. Second it has two somewhat related features: remind via email or share via email (or SMS), which are cool. It doesn't have priority but it has ranking. You can prioritize a bit with star. so no Low-Medium-Hi things but starred/unstarred should work for some. One nice thing is that have app for all platforms even a standalone one for PC.

Cons: Problems with Wunderlist are a few: you can't have recurring task, due date is there but not time, similarly reminder date is there but not time. a task can only be in one list. and last but not least accidental deletion of task means it’s gone as you cannot undo that.

Astrid

It has changed a bit in last couple of months. It is much more sophisticated app than other apps in the TO DO category due to its heavy focus on sharing and collaborating.

Pros: Best thing about is that you can assign tasks to others and they can reply with an email if they accept or not. Besides assigning, you can share the task with other people. So task essentially becomes like a thread with comments and you can paste pictures in the comments as well. Another plus point is that a task can be in multiple lists (pseudo tagging) this is great as you can have context list @pharmacy @Market. Astrid can post items on your calendar. I am not big voice fan but you can use speech-to-text while adding tasks. No star option, but you get Hi-Med-Lo prioritization.

Cons: There is no all task view. Again no undelete option (but you can have a peek on deleted task in log). Biggest let down is that there is no reminder. Yes Astrid is a TO DO app with no real reminder option (though indirectly you can post the task to calendar and set alert there or Astrid reminds you when the task is due or overdue).

Errand To-do List

It is a nice app and it is fit-for-purpose if all you need is a free app for a single device

Pros: Recurring task options are good but the best part is multiple alerts – I really liked “nag every minute” alert. Another great option is that the notes can be made like check list – so sort of subtasks or shopping list. I also liked that Star is there in addition to priorities – this should help in focusing if the list of tasks becomes huge. Ranking is there but resets if you toggle between manual and automatic option.

Cons: Ranking is done separately for each view. This could be useful to some but to me it makes more sense to have one ranking system for views. Again no undelete option. Finally, major problem: the free edition doesn’t have a cloud backup or web-syncing.

"To Do"

"To Do" is a simple application… Not bad as first To Do app.

Pros: You can prioritize tasks and set due date/time. Only other option is to email the task to any email address you want (you can set default email though). It has just one view with three sorting option (date, priority, alphabetically). That is it.

Cons: no cloud backup, no alarms, no recurring task etc…

“Task This”

It is the most sophisticated application that I have evaluated. It has three types of to-do items: (1) Event with start & due date /time, (2) Task – an event without a Start Time and (3) Milestone – a task without a Start Date. For simplicity, let’s call all of these as tasks for remainder of this review

Pros: I find it useful that for each task multiple alerts/notification can be created. Then there are two (optional) orthogonal organizations: One is by Category (e.g. work, home etc), other is by project (e.g. Setup home office, Recruitment Drive 2012). Finally, you can also tag tasks – there is no browse-by-tags option yet but you can search via tag. There is no comment option (you can use description field but that is not neat) but you can attach photos and voice memos. Prioritization is also there and so does web sync.

oh by the way, although not very intuitively designed but you can manage shopping tasks separately from rest.

Cons: Application is not stable i.e. 4-5 crashed in a day and views are not consistent between web application and mobile application. Also, application seems like in beta for some functionality even some options in task are also half-done e.g. Action type, Lock.

List n Do Lite

It seems like a good application with a neat home window (minus advertisement) but the lite version has some serious limits.

Pros: Two differentiating things: (1) Sub Task is first class citizen and has all the attributes as parent task except category (Lite version has only one level of sub task). (2) An interesting yet useful feature is Task Action i.e. visit location, send email, go to website, call contact, send SMS etc. Like all good to do application it has: a few options for Repeat and alert, 3 level priorities and ability to categorize tasks in folders (single level).

Cons: Sync with various services including Google task only available in full version. Google Calendar option was not functional (this may be due to the fact that I was testing lite version but still there was no notification). GIS screen froze otherwise I was keen in checking out near-me tasks which seemed useful. Dropbox connect screen also got stuck. Had a couple of crashes: once while deleting and another while ranking. Finally, the mother of all cons: you can only have 10 main tasks in Lite version.

There is a connect to Dropbox option that I haven’t explored.

Any.Do

Unless you are a power user or feature freak this application is highly recommended.

Pros: Simple, neat and user friendly. Alarm has 5 pre-defined settings e.g. 10 min, 30 min, 1 hour etc. Considering that the focus is on keeping things simple, this makes sense to people who do not want fancy options in everything. You can mark task important i.e. red. You can add multiple steps/notes to task. You can share tasks with friends (assuming they are in your address book and they use any.do). Default view is date wise but you can switch it to folder. In either view, you can drag items up/down to sort. Rotate phone to view calendar in date view. Clicking tasks starting with word “call” starts the call. Other action words are email and text (for SMS).

AnyDo Moment, accessed via settings, is the most interesting feature. Basically it lets you, go through all tasks for selected days and, choose today, done, later etc. Very quick and neat for day planning in the morning. Finally, AnyDo automatically backs up all the tasks on cloud.

Cons: Not for power users. No recurring tasks. No tagging. Sub tasks do not have any attribute except title.

Orchestra

For personal-only use Orchestra is definitely inferior to better apps that I reviewed but then it shines for collaboration when compared to those other free apps. So despite its short coming I can think about using it for (volunteer) work I do where someone in the group needs to do something and everyone forgets. and why not for office work? Outlook “Flag for Recipient” do the trick there for me.

Pros: You can assign task to others who may accept the request or deny. Or you can put task in the list which is shared with other and people can pick the tasks themselves. Once a task is entered people can add comments. History is also visible as comments. You can add comments to that thread via email and web interface as well (nice thing if you are not registered). Recurring task options are great and you can mark a task important with Star. Views configuration options are good – you can always go to default by shaking the phone.

Cons: as soon as I signed up and clicked on the first tip, it crashed. Though no more crashes after that, but the first crash was disappointing. No integration with Facebook or Google which is sad since the app is collaborative in nature. Ranking is missing. Due date is there but not time. Reminder time is there but not date (not a very big problem though). Task cannot be deleted manually. And completed tasks are automatically deleted after 7 days (read this somewhere)

Remember the Milk

It is really one of the best when it comes to organizing but iPhone app has some limitations. Some of these are mitigated by the web app e.g. sharing task, reminder settings etc.

Pros: Adding a task from any view is really great as you can quickly set important attribute right there. Task postpone is kind of nice feature. Task estimation could be nice feature for some. You can add notes to Task and as many as you want. Cloud backup is available. Searching is good for power users. Recurring tasks & Ranking is supported but could have been better implemented.
Best feature is tagging. Really nicely done and is powerful enough for people who like to organize tasks using multiple dimensions i.e. @Home @computer @pharmacy @HR .Email .Read .Call .Braindead -Activity1 -Project2 (# is not supported for tagging so I used minus '-' )

Cons: Crashed as soon as I signed up. Only one crash but one too many to spoil the party. Push was not working. Reminder option per task is not there i.e. you can set general reminder setting via web app for all the tasks. Task completion icon seems more like close dialogue then complete task.

Conclusion

And the winner for me is: Astrid.