free html hit counter
Posted on: Sunday, November 25, 2007 by Rajiv Popat

TacticSheet New Features - Announcement 3

For those of you who still don’t know what TacticSheet is – TacticSheet is a Free and Open Source Timesheet and Expense Tracking system. If you want more information about TacticSheet you can click here.

I've been busy at work for the last couple of weeks. I've also been traveling for a couple of days last week primarily for work but none the less, we’ve been putting in quite a bit of time every weekend on TacticSheet. I'm happy to say that TacticSheet is slowly and steadily starting to shape up decently well.  For the last two weeks we were a little slow at adding new features but we've been taking one step at a time and making sure we don't burn out in the long marathon ahead.

Here are some new features that have been rolled out based on the work we did last weekend and this weekend:

Introduction of 'Clients'

TacticSheet now allows you to add your clients to the system. Once you’ve done this, while adding a project TacticSheet will let you group and create project under a given client. In the long run this is supposed to allow us to answer multiple questions. For Example:

  1. How many clients does my organization have?
  2. How many projects are under each client?
  3. How many employees are dedicatedly working for a client?
  4. How many man-hours has the organization put in behind one client and their multiple projects?

Adding the concept of allowing you to add clients in the system and then group projects under each client opens up a host of possibilities for TacticSheet in the future. We're also hoping that it would help integrate with accounting and billing systems in the long run.

Introduction of 'Tasks'

For a day job, to earn my daily bread and butter, I work at an awesome software shop. We estimate each task for a project that we work on. Then we let folks take ownership of the task and work on the task. Once the tasks complete we go ahead and compare the estimated time with the Actual Time taken and this comparison allows us to get better at our future estimations.

Now TacticSheet allows you to store tasks under each project and allows employees to file their time against a task instead of a project.

This is supposed to open up new dimensions for TacticSheet once we move into reporting. Having this data in place will allow TacticSheet to answer questions like:

  1. How many employees worked on a given task?
  2. How many man-hours of work went into a given task?
  3. Which task in the project took the maximum amount of effort to complete?

Percentage Allocation and Percentage Criticality Captured During Allocation

In the last check-in we added the ability for enhanced employee allocation to projects into TacticSheet. In this check-in we also allow you to capture additional facts about the allocation:

  1. Percentage Allocation of the Employee – In a lot of organizations I’ve seen employees being allocated to more than one project at a given time. Now in TacticSheet, while allocating an employee to a project you can not only choose the time-line for which he will be allocated to the project but you will also be allowed to pick the percentage of his time you typically want him to give against the project.
  2. Percentage Criticality of the Employee – In a lot of organizations I’ve seen employees being assigned to a project to complete ad-hoc tasks. At times I’ve also seen employees being assigned to a project because they’re on the bench and having nothing else to do :) – Now in TacticSheet, while assigning an employee to the project for a given duration you can also choose the criticality of the employee to the project. A high criticality indicates that moving the employee out of the project might considerably impact the project and a low criticality indicates that the person can be moved to another project if he is really needed in a different project. In other words, a low criticality indicates that the employee is not critical in the project and moving him from the current project will have no or very little impact on the current project.

Minor Bug Fixes

An issue with TacticSheet with multiple connection strings being used by TacticSheet was reported in this thread of our mailing technology mailing list. We’ve gone ahead and fixed it.

What’s next?

More Features - good software is never complete and we’ve hardly started yet. More features, posts and goodness coming up! Stay tuned!

posted on Sunday, November 25, 2007 5:15:40 PM UTC by Rajiv Popat  #    Comments [0]
Posted on: Monday, November 5, 2007 by Rajiv Popat

TacticSheet New Features - Announcement 2

If you are interested in a free open source Timesheet and Expense-sheet tracking system built on C# 3.0, .NET 3.5, LINQ and Orcas Beta 2, you should checkout TacticSheet. A couple of weeks we announced a development version of TacticSheet live. You can read that announcement and learn more about TacticSheet here. We also published our First New Features Announcement Last Week and announced a couple of new features which are expected to add a lot of power to TacticSheet when we move to our first release.

If you're a .NET developer you could go grab a copy of the latest TacticSheet code from TacticSheet Source Forge SVN and start playing around with it. You can also go ahead and join our General Mailing List or the TacticSheet Technology Mailing List.

A lot of new ideas have started coming. I’m bubbling with ideas myself and new ideas are also being thrown at me by folks who are interested in using TacticSheet when it reaches a release ready stage. We’re taking one step at a time and adding a few new features every weekend. Here’s what we’ve added to TacticSheet this weekend:

Enhanced Resource Allocation while Creating Projects

While allocating employees to Project it was natural for me to provide a Move-List in the Edit Project / Project Creation screen so that you would be able to allocate employees to project:

At the first glance the idea seemed good enough for the basic project allocation requirement that we had and made a lot of sense. You could allocate employees to a project and they would work on the project till the project ended. If you wanted to stop employees from filing Timesheets pertaining to that project you could remove them from the project team.

Apparently, it looks like people who have been using commercial timesheets for a long time feel that this is the biggest pain-point of some of the commercial timesheet entry systems.

A commercial timesheet entry system I looked at while playing around with the idea of writing TacticSheet seem to be doing exactly the same thing I did initially with TacticSheet, which is to allow you to either assign employee(s) to a project or unassigned employee(s) from a project.

Last week someone who saw TacticSheet and had used a couple of other timesheet entry was very helpful in giving feedback. He brought it to our notice that In reality, organizations tend to be much more dynamic. Here are some scenarios where the basic assumption that if employees are assigned to a project, they will work on the project during the entire span of that project, creates a nightmare for the administrators:

  1. An Employee will need to work on the project just for the first three months of the project.
  2. An Employee will need to join the project three months after the project started and will work only for two more months after which he will need to be moved from that project into another project.
  3. An employee will be allocated to a project and will work for two weeks in that project. Then he will be moved out of the project and will be needed again for two weeks, three months later.

A couple of commercial Timesheet entry systems I saw while playing around with the idea of building TacticSheet just allow you to either add employee(s) to a project or remove employee(s) from a project when they are no longer needed. Which means in case of the above scenarios administrators would find themselves manually remembering (or relying on emails sent by Project Managers) to add and remove resources from a given project.

One of our goals while creating TacticSheet was also to provide a Timesheet System with the Infrastructure that will allow folks integrate TacticSheet with external systems and consume the Timesheet data from multiple other systems.

When I think of a full blown Resource Management System talking to TacticSheet, the whole idea of adding resources to a project for the entire course of the project and not letting the administrator choose for how long an employee would work on a project, sounds fundamentally wrong.

This weekend we ended up addressing this issue and we seem to have solved it rather elegantly.

TacticSheet now offers a separate Project Allocation screen. This screen allows you to add an employee to a project which is what most commercial timesheet entry systems also allow you to do.

The same screen also offers an advanced allocation option - which allows you to pick the exact dates or range of dates for which the employee will be involved with the project. You can add the sample employee to the project multiple times by choosing different start dates and end dates as long as these start dates and end dates don’t overlap for the same employee.

The screen allows you to address all three scenarios I described above using TacticSheet.

The same feature is also going to allow us to give you a lot of other additional kick-ass features in the future. For example, storing this data will allow TacticSheet to look into the future and see how many guys are really busy and for what time durations. Having this data there opens up a new dimension of reporting for us and will let us do some awesome reports primarily on the Resource allocation side in the future.

More features, goodness and posts coming up in the future. We have barely started, and are far from done. Stay tuned for more!

posted on Monday, November 5, 2007 5:39:48 PM UTC by Rajiv Popat  #    Comments [0]
Posted on: Wednesday, October 31, 2007 by Rajiv Popat

TacticSheet New Features - Announcement 1

A few days ago we completed building the basic framework of TacticSheet, uploaded a development sprint of TacticSheet and announced it live. TacticSheet is an Open Source Timesheet and ExpenseSheet System built on .NET 3.5, C# 3.0, LINQ and Oracas Beta 2. If you haven’t heard of TacticSheet or want to learn more about it, click here.

This weekend I worked on a couple of other enhancements to make this product much more usable in the long run. Some of the features completed this weekend include:


Support for Timesheet Audit Trails

Respecting the iron triangle plays a vital role in any software project. But when you are only giving time to a project only during free time, weekends and holidays this prioritizing becomes vital. Audit trails for timesheets was on my mind when I played around with the basic idea of building TacticSheet. Dropping it out of the first sprint I uploaded on source-forge, was purely a matter of respecting the iron triangle and realizing that I lacked time.

I found some time this weekend and this was one of the important features that I really wanted TacticSheet to have - So obviously it made it into TacticSheet. Today, you can see audit trails at timesheet level right on the same screen where you are filing your time using TacticSheet. We decided to draw inspiration from most commercial time-sheet entry systems out there and call our timesheet based audit trails "Timesheet History".

For audit-trail purposes we also go ahead and catch data at each timesheet line item level, but these audit trails are not shown anywhere on the TacticSheet screens because we don’t see these adding a lot of value for most organizations. Given the stage where TacticSheet stands today, we need to focus on other important features before we get carried away with making audit trails better.

We still store the trails on a line item level and keep them there because we want TacticSheet to adhere to general auditing principal - delete nothing. In future, as the application grows, this is expected to allow us to provide screens which will provide detailed audit trails and deeper insight into what happens inside each timesheet every time it changes state.

Our Database is Now Scripted and under SVN

We’ve gone ahead and brought out database under SVN by scripting it out to a proper database project. Now you can have the database created by running a command file located under the database project which is included in the code base.

Running this single command file will have TacticSheet create the database schema and all sample data needed to get the application up and running. Once the file runs successfully, change your web.config connection-string to the right database. Once done, you can launch TacticSheet and login using default credentials (username: admin password: admin).

Setting up the development environment of TacticSheet is now stupid simple! So there’s no reason why you shouldn’t try it out. Go ahead, grab the latest copy of the code from our SVN and give it a dry run. Drop me an email and let me know what you think.

Employees should not be able to Un-submit Approved Timesheets

After I announced TacticSheet live I received a few emails from folks encouraging me, congratulating me and wishing me good luck. I also got a couple of feedbacks from guys who are not into .NET, but work with a lot with timesheets. Some of these feedbacks were fairly valuable. For example, one of the observation that was made was:

“Employees should not be allowed to un-submit timesheets which have already been approved”

I looked at this one with a little bit of skepticism. So if an employee makes a mistake, how does he fix it? After a little bit of communication back and forth the person who had requested the feature explained:

  1. A normal user is allowed to un-submit timesheets which have been submitted by him till they are approved.
  2. Once approved, the user should not be allowed to un-submit the approved timesheets.
  3. The administrators however, can un-submit even approved timesheets on behalf of the user so that the user can go ahead and fix his mistakes.
  4. Once un-submitted by an administrator, the user will need to re-file that timesheet and the timesheet will have to go through approval process all over again.
  5. No approved timesheets can be deleted. Not even by the administrator. Administrators can un-submit the timesheet which have been approved.
  6. Once un-submitted the timesheet can then be deleted by the employee himself.
  7. All of this is audit trailed so there is no confusion.

In general the above rules made a lot of sense and are now a part of TacticSheet.

We have more features, goodness and posts coming up! Stay Tuned!

To stay informed about TacticSheet new features you can sign-up to the TacticSheet Mailing List. If you are an enthusiastic .NET developer and want to stay informed about the technical changes we’re making to TacticSheet signup for the Developer Mailing List. We have barely started, and are far from done. Stay tuned for more!

posted on Wednesday, October 31, 2007 10:36:17 AM UTC by Rajiv Popat  #    Comments [0]
Posted on: Thursday, October 25, 2007 by Rajiv Popat

TacticSheet - Open Source TimeSheet and ExpenseSheet System Built On .NET 3.5

Last couple of weekends, I started work on an Open Source Timesheet Entry System using .NET 3.5, C# 3.0 and ASP.NET, which, for no particular reason, was named TacticSheet.

In the coming months (depending on the number of free weekends I get :)) TacticSheet will have its own domain domain name, a full blown website and a steady open source life cycle but for now that I seemed to have reached a logical point where I can at-least see the basic functionality of the application taking shape. I could hardly resist the temptation of sharing TacticSheet with fellow developers and my blog readers.

If you care, here’s a quick FAQ of TacticSheet (or a list of few questions that might be going through your head right now as you read this :)):

What is TacticSheet?

It’s a Free and Open Source Timesheet Entry System which in the long run is supposed to provide the the ability to do Timesheets and Expense-sheets within an enterprise.

Can I Use TacticSheet in My Organization Today?

No. It’s far from being production ready yet. It has the basic framework which will allow people to file timesheets and project managers and line managers to approve or reject timesheets. As of Today TacticSheet is not fully stable, not fully tested and may have a lot of breaking changes in the next months as it moves towards a Release 1. Some of the very important features that most organizations would need e.g. Audit trails, email notifications etc. are currently missing. To make things worse, even our database isn’t scripted yet. :)

In the coming couple of months we’ll be working to get these issues ironed out so that you can start using TacticSheet in your organization and upgrade safely to a new version every time a new version comes out. Till then, feel free to play around with TacticSheet Development builds, but please don’t deploy them to production environments.

If it’s not fully ready why are you announcing it live?

Because good software is never complete. :) On a serious note, I’m interested in getting some feedback and contributions from the community, fellow developers and above all - you dear reader! Go to our Source-Forge Home Page, grab the source code from our SVN (or Browse our online SVN), try it out, drop a comment or email and let me know what you think about the application!

We don’t have a lot of documentation on setting up the development environment but we're hoping most folks will find it very straight forward. If you want help setting it up, please drop question(s) in the Product Forum and we’ll be happy to answer them.

If you think you’ve found a bug, please file it here.

Feel like contributing? Read on!

How Can I Contribute?

We’re looking for a few one-man-armies who are thick skinned developers and people who are into shipping good software (not just writing documents and following crazy process!). We really think the world could use one more Timesheet entry system built on .NET, especially if it’s free and open source! Do you?

Besides kick ass developers, we are also looking for UI folks and people who can test the application inside out! Interested?

If you fall in any of the above categories, are fortunate enough to find some free time during weekends and crazy enough to write code during that free time, Email me using the “mail” icon on the left panel of this page and we can discuss how you can contribute.

You can also contribute by Submitting SVN Patches, filing bugs or just participating in the forums.

What’s the Technology Stack?

We’re starting out with .NET 3.5 and Beta 2 Release of Orcas. Of course whenever Orcas RTMs, (end of this year / next year), we will be working to ensure that TacticSheet migrates over to and works with the RTM version. For the enthusiastic and passionate .NET developers here’s the technology stack TacticSheet uses:

  1. Orcas Beta 2.
  2. .NET 3.5.
  3. C# 3.0.
  4. LINQ to SQL.
  5. XLINQ.
  6. ASP.NET Ajax and ASP.NET Ajax Toolkit.
  7. SQL Server 2005. (But there’s no Reason why you couldn’t make TacticSheet work in SQL Express!)

How Can I Stay Informed about the Project?

We have 2 different mailing lists – depending on the kind of involvement you want to have to the kind of information you want to stay updated with feel free to join any one of our mailing lists.

  1. The General TacticSheet Mailing group – Users who are interested in staying informed about the new features of TacticSheet can sign up for this mailing group.
  2. The TacticSheet Technology Mailing Group – We will be discussing most new technologies we use in TacticSheet here whenever we decide to use a new technology. We will also be discussing the design and technical changes that TacticSheet undergoes in the future in this mailing group.

When will TacticSheet Development Complete?

As of now, I don’t think I’ll ever be ‘done’ with this project, which is the whole point! I’m a firm believer of supporting everything I write. I intend on extending and supporting TacticSheet for years to come. Watch out for a lot of new features and version, year after year!

Why are we writing TacticSheet?

This calls for a long post, but for now let’s just say - Because, we can. (You can expect another detailed post on this topic in the near future :))

What’s the TacticSheet License?

The product is currently under GPL. Also, we do not allow or encourage forks of TacticSheet for the time being. I personally feel that the product is too premature for now and forking will add to confusion. As the product grows we plan on moving to a much more liberal license like FreeBSD.

Even though the license is strictly GPL we are fairly liberal towards the use of TacticSheet – it’s primarily written for a hobby and not with an intent of making money – so if you want to do something crazy with the code-base please email me and we’ll see to it that you can do whatever you are trying to do without being charged or sued :).

So, now that TacticSheet has finally been born, wish us luck and growth! Stay tuned for more posts, features and goodness.

posted on Thursday, October 25, 2007 6:30:46 PM UTC by Rajiv Popat  #    Comments [4]
Posted on: Tuesday, September 18, 2007 by Rajiv Popat

Did You Loose Your Visual Studio Intellisense?

In one of my older posts I announced out loud and shamelessly that I find it really difficult to code without intellisense. Besides Intellisense, I’ve always been for tools which increase developer productivity. A couple of months ago I played around with a Resharper 3.0 Trial to see what the interesting new features were. I have all good things to say about Resharper 3.0 but this post is not about any of those good things. It’s about one tiny little complaint I have towards Resharper Trial.

It killed my Visual Studio Intellisense.

After I had installed it and played around with it for around a week I lost intellisense from my Visual Studio – suddenly and completely. I could use the Intellisense Resharper offered me but Visual Studio Intellisense wouldn’t work while the trial was working. Soon the Resharper trial was over and the Resharper Intellisense died as well. Another colleague had a similar problem. She had tried out Resharper, and had lost her intellisense as well. Google and you'll see a few others running into similar problems.

As soon as I lost intellisense, I hit Resharper Options and told it not to use Resharper Intellisense and to use Visual Studio Intellisense instead – restarted my Visual Studio - didn’t help.

Turns out, whatever Resharper had done to turn Visual Studio Intellisense off is very easy to undo. Turning intellisense on or off in Visual Studio is a simple option I didn’t know about. In-fact, it is a part of those thousands of IDE options that a lot of us don’t even know exist.

If your Visual Studio Intellisense does not work, because you installed resharper and it killed your Visual Studio intellisense (or if your Intellisense doesn’t work for any other reasons) here’s a process to get back your Intellisense:

The picture pretty much sums up all you need to do to get your intellisense back in Visual Studio but if you’re a “Follow-the-instructions” kind of guy here are the instructions:

  1. Hit Tools / Options in your Visual Studio.
  2. On The Left Tree click Text Editor / All Languages.
  3. Under Statement completion ensure that “Auto list members” is checked with a tick mark. (Make sure that this option is fully selected and not partly selected)
  4. Under Statement completion ensure that “Parameter information” is also checked with a tick mark. (Make sure that this option is fully selected and not partly selected)

If you’ve downloaded Visual Studio 2008 / Orcas Beta Releases and have observed that you do not get intellisense (for whatever mysterious reasons) the above procedure works with Oracas too and will help you get your intellisense back. And if you're like me, hopefully with your intellisense back, the world will seem like a slightly better place to live in. :)

posted on Tuesday, September 18, 2007 8:28:13 AM UTC by Rajiv Popat  #    Comments [11]
Posted on: Monday, September 10, 2007 by Rajiv Popat

Setting Up Intellisense With Ruby on Rails.

I’ve always been a Microsoft Developer. Besides the productivity that Microsoft Tools offer me, here’s a little dark secret on why I’ve always been a Microsoft developer:


Yes, it’s the single feature that got me away from C, C++ and GW-Basic and made me take a jump towards Visual Basic years ago.

Intellisense might be the single best gimmick that Microsoft pulled in the history of computers but it sure did wonders - for thousands of developers around the world. It helped thousands of folks move to Microsoft Development Environments.

It’s obvious that today no one does Intellisense like Microsoft does. With Visual Studio 2008 – they’re getting even better. In fact Microsoft does it so well, that even Wikipedia acknowledges it:

IntelliSense is a form of automated auto-completion popularized by the Microsoft Visual Studio Integrated Development Environment. It also serves as documentation and disambiguation for variable names, functions and methods using metadata reflection.

Ok, so where does Ruby on Rails come in all this discussion about Intellisense and Microsoft?

As Billy Hollis describes in his rather funny video on code addiction, our goal as software developers is not to write code. Our goal as developers is to provide the maximum value to the client and users for lesser pain, lesser risk and lesser cost. One of my mentors at work is often heard saying – “We need to build systems that are - Cheaper, Better, Faster”.

With the amount of buzz that has been going on the Ruby on Rails Side and how it can bump up Developer Productivity, I couldn’t help but investigate. Last weekend, I wandered a little distance away from .NET and took a casual stroll into the uncharted territory of Ruby on Rails.

<Aside> Before you drop an email, message or ask, No I’m not leaving Microsoft Development – it’ll continue to be my bread, butter, hobby and passion going ahead :) – but I like knowing what the other smart folks around the world are up to and I must admit, that the Rails community is definitely up to something!</Aside>

I even borrowed a copy of Agile Web Development with Rails and browsed through parts of it. I would highly recommend this to anyone who’s interested in doing some serious work with Ruby on Rails.

One of my primary concerns as I worked on downloading and installing Ruby on Rails was getting intellisense to work with Ruby on Rails. I’ve been spoilt my Microsoft. Now I demand intellisense in every single IDE that I am expected to double click and open; leave aside programming in it.

Move away from Microsoft and Visual Studio.NET and you are bound to be faced with choices about which IDE you’ll use. With Ruby on Rails I was faced with a few choices:

  1. Sapphire Steel – If you're a Microsoft Developer, this thing let’s you code with Ruby on Rails from within the homely environment of Visual Studio.NET. But shelling out money? Naah! It's a little bit too much to ask from me :) Not for a casual hobby! Not until I have other options.  
  2. Text-Mate on Mac – even though my machine looks like a Mac it’s hardly a Mac, so this option was pretty much ruled out. 
  3. Aptana RadRails on Windows / Windows Vista – Free and open source (Yeah! Now we’re talking!)

Of course, I settled for Aptana RadRails. Needless to say, I downloaded it using the big fat “Download Aptana RadRails (Win)” button on the website.

After I had it installed, I “railed” (created) my first few “Hello World” Ruby on Rails projects using the command prompt and started running them on WebRick (for those who have never tried out Ruby on Rails, which I assume will be around 99%+ of the people reading this line of this post :), WebRick, is supposed to be much like the Cassini in the .NET World).

So, by now I was generating my controllers and scaffolding my screens and code. Basically I was loving it, but I wasn’t getting Intellisense and that was making me feel a little - frustrated.

Turns out that Intellisense support is pretty much present in Aptana. However, it’s not very easy to find.

Now this could be either be because of usability issues on the website, given the fact that this instruction button is hidden here (link updated as of 03/14/08) or because I was a little asleep (I was trying this out at 2:00 in the morning) but I couldn’t figure out how to get intellisense on Ruby installed for a couple of hours.

Anyway, the instructions for getting Ruby on Rails intellisense with Aptana are available here and once you click that link – the instructions have been listed under – Aptana M8a/Eclipse 3.2/Rails plug-in Instructions. The instructions of-course, are a little deceptive – they state: To add Rails Support to Eclipse 3.2 and then the section provides detailed instructions on setting up intellisense with Ruby on Rails.

Now, there'll be folks like me who don’t know much about Eclipse and who will say – “Eclipse!? What Eclipse? I just downloaded Aptana. How do I get Ruby on Rails Intellisense with Aptana?” - If you’re like me and don't like reading the manual or in general, don’t know much about Eclipse (because you come from a Microsoft world or for any other reason) don’t worry – these are the same instructions you want to follow for Aptana and you’ll have intellisense working for Ruby on Rails.

Once you’ve followed the instructions you can even go – File / New / Project and pick “Rails Project” instead of “Railing” your projects through the command prompt!

That’s it for the day dear reader. You have a link to the book, you have a Free Ruby on Rails IDE for you Windows box and you have Intellisense with Ruby on Rails. What else do you want? Free Ruby Lessons!? :)

Seriously! Go play around with Ruby on Rails.

posted on Monday, September 10, 2007 2:58:40 PM UTC by Rajiv Popat  #    Comments [2]
Posted on: Thursday, August 30, 2007 by Rajiv Popat

When in Doubt, Don't Think.

Malcolm Gladwell toys with the idea of “snap judgements” and how our brain makes snap judgements in his book - blink. He describes how one can learn the art of “thinking without thinking”. He calls this the art of blinking.

Some refer to this as “listening to your heart” or “gut feeling”. Others refer to this as “going by your instincts”; Malcolm, calls this “blinking” and presents the whole concept using a simple yet distinctly elegant and factual examples.

The book is full of tons of examples of snap judgements and a number of experiments which are eye-openers. I’ll never be able to do justice to them by wrapping them up in three lines but here's my attempt to tease you to go read the book. Some examples the book illustrates rather articulately:

  1. An individual realizing in the first minute of watching a statue purchased by a museum for 10 million dollars, that it’s fake, when a team of scientists takes 14 months of study and calculations to come to a completely wrong conclusion before buying it.
  2. Psychiatrics using the ability to blink and techniques for predicting how long a marriage will last just by listening to two people talk for less than 3 minutes about a topic which has nothing to do with their marriage.
  3. The ability to find out if a candidate is a right candidate for an the job, during an interview in less than a couple of minutes; sometimes even without talking to him.

Too much thinking is dangerous. Malcolm questions our traditional knowledge of how a lot of us take decisions:

And what do we tell our children? Haste Makes Waste. Look before you leap. Stop and Think. Don’t judge a book by its cover. We believe that we are always better off gathering as much information as possible in deliberation. We really only trust conscious decision making.

He warns:

But there are moments, particularly in times of stress, when haste does not make waste, when our snap judgements and first impressions can offer much better means of making sense of the world.

He explains why we, as human beings, lean towards basing our decisions on calculations and data and then goes on to explain why this approach is fundamentally flawed and why too much deliberation, data and particularly calculations before taking decisions can be devastating at times.

The book starts with the same lines as Steve Job’s video on Life and Connecting the Dots (using a  follow-your-heart-and-intuition kind-of approach) and then this book goes beyond with Practical and eye opening examples. A must read that I would highly recommend for anyone who has ever hesitated about trusting his gut feeling. Even if you always go with snap judgements this book offers new insights and perspectives which are eye opening.

<Aside> Personally, my life has been full of snap judgements and this book offers support and reconfirms (in a different way), what I've always believed in. But this post, dear reader, is not about me or my life. It’s about snap judgements, so I shall try not to digress. Let's move on with the topic. </Aside>

As programmers we are supposed to blink all the time and yet there's only a really small group of programmers in our profession capable of blinking well. I see countless developers debugging through their code - line by line and working for hours when a 3 second blink, instinct, gut feeling (whatever you call it) would have told them exactly where the bug lies and maybe even given them major hints on how to fix it.

According to Malcolm, this power of blinking is not a special gift that only a few have. He believes it’s something all of us have.

But, as Malcolm puts it we often “override” our blinks with so-called logical thinking, facts and figures and take completely wrong decisions.

I see developers once in a while thinking too hard, wasting hours, to fix that nested if-else complication which has resulted in a nasty logical bug when all they need to do it go out grab a cup of hot chocolate, come back and blink!

Almost Ninety Percent of all performance related issues that I’ve fixed in my development career have been a result of blinking. A hunch about what is causing the system to slow down. All the research, data and figures have just been add-ons; at times, even a waste of time. A lot of times, the data and figures have also driven me in the completely wrong direction.

The concept of blinking seems to work in all aspects of life starting from taking the most complex of decisions, recruiting folks, to fixing bugs and logical errors in code.

Fellow developers and dear readers, when in doubt, Don’t Think - Blink!

(Now go get your own copy of the book! :))

posted on Thursday, August 30, 2007 3:42:36 PM UTC by Rajiv Popat  #    Comments [3]
Posted on: Monday, June 25, 2007 by Rajiv Popat

Are Eight Hours a Day Enough For Software Programmers?

Word has it that developers on the Mac team at one point were spending more than 90 hours a week on Mac development. In fact, Apple had T-shirts to commemorate the Team for their efforts:

Andy Hertzfeld describes the work culture at apple back in the days in First-Person:

Most of the Macintosh software team members were between twenty and thirty years old, and with few family obligations to distract us, we were used to working long hours. We were passionate about the project and willing to more or less subordinate the rest of our lives to it, at least for a while.

In multiple cities of this planet, in every office I’ve worked at, every once in a while, I come across one or two Nine-to-Five-Folks who are awesome individuals; they not bad programmers at all and this post is not about criticizing them. This post is about asking the million dollar question:

“Are 8 Hours a Day Enough?”

In a slightly old survey Dan Malachowski from suggests that employees aren’t even spending 8 hours a day at work. In his article where he publishes the results of a survey, He explains:

Are workers really expected to work 8 hours per day, non-stop? According to a follow-up survey of Human Resource managers, companies assume that employees will waste 0.94 hours per day. They take this into account when they do their compensation planning. However, those managers privately suspect that employees waste 1.6 hours per day. In fact, employees admit to wasting 2.09 hours per day.

As per the survey surfing the Internet for personal reasons is the top time wasting activity. “Don’t have enough work to do” is the top Time-Wasting excuse. It was sheer co-incidence that I always believed that this is the same excuse people use for wasting precious hours of their life when they are on bench. Anyway, I digress. So basically, Dan doesn’t believe that employees work 8 hours a day. They are in-fact doing multiple other things which cannot be classified as work.

On a serious note, the survey just makes me wonder if it makes sense to measure hours wasted in office by employees? Given the fact that engineers working remotely from home, at times even during insane hours, is a part of the culture in almost all software development shops.

John Wesley has a slightly different take on this. In my personal opinion, John is completely correct in claiming that the 9 to 5 office worker will become a thing of the past for the information worker. He explains why 9 to 5 is not such a good working model:

A continuous 8 hour work day is a relic of the past. It makes sense for physical labor and manufacturing work, but with information workers it doesn’t account for the mental energy cycle. The ability of a factory worker to think analytically is irrelevant, he’s either cranking widgets or he isn’t.

If you clicked on the link, John suggests that we do away with the 9 to 5 work culture with Information Workers. Instead, John is all about introducing agility into work schedules:

Everyone goes through alternating periods of high and low mental acuity. There are days when I work on personal projects for well over 8 hours, but the time is always divided into multiple sessions. I might spend a few hours coding a design, a few hours writing, and a few hours reading feeds, moderating comments, and responding to email.

I work this way because it aligns with my mental energy cycle. Any more than 3 hours in front of a computer and my eyes start hurting and I become restless. I lose the ability to do my best work. Instead of forcing myself to continue, I switch to an activity that allows my mind to recharge. These breaks maximize productivity by eliminating down periods. It’s counter productive to force work when the mental energy isn’t there.

The Mac team’s example, the survey on wasted time and John’s post might seem contradicting at first but give them some thought and they fall in line pretty well. In fact, add them up and they answer the million dollar question we set out to find an answer to. Take data and observations from all these three sources and some commonalities evolve:

  1. We as humans, are not very good at working 8 hours at a stretch on PCs. 
  2. We as humans, need a re-charge and motivation from time to time, in order to keep us hooked. 
  3. We as humans, often multi-task between multiple things! (Multi-tasking is bad for human beings, but it has its own Pluses. It has a “feel good factor” which gives us a high. This is why alt-tabbing in windows feels so much better than working in Tubro-C IDE of Ms-Dos! :))

Know these basic limitations and the next time you take a break between work, don’t feel guilty about it. Having said that, wasting time can be a highly productive activity which can benefit you, your organization and even your clients!

Some ways of productively wasting time and getting recharged include reading about a new technology you are passionate about and seeing how that fits in your current project, talking about code with your colleges, conducting a training, discussing your work related problems with fellow developers, having quick meetings to show off what you are doing or what you are excited about, writing a quick article on something new you learned, answering some questions in a forum etc. (the list can be endless!) - Pick your ways to waste time, depending on which “productive time wasting techniques” re-charge you the most! 

Software Development is like walking on a Treadmill. Stop and you are bound to fall – flat on your face. Keep running and you keep getting fitter and stronger. The fitness and the strength you acquire by running continuously helps you in running faster and harder. It’s a cycle! While it’s important to spend 8 hours a day working, find out productive ways to waste time so that you can put in more and keep your talents razor sharp. Keep running and make it interesting so that you don’t burn out! Who knows, it might give you the motivation and excitement to put in more than 8 hours of work a day.

Patricia Fripp gives a tip on how you can fall in love with your job all over again:

Make a list at the end of every day of what you learned, what was the most fun, who was the most fun to interact with, and how you feel you added to your group's success. A list of the 'beyond the paycheck' benefits. If you only work for the paycheck you will be employed, but not 'employable' long term.

Learn how to maintain personal and professional To-Do Lists for life. There is no better sense of achievement than striking off items from these lists!

Coming back to the million dollar question – Are 8 hours a day enough?

Eight hours a day might be good enough for a job but they may not be good enough for a profession. And they are absolutely no good for keeping a passion alive. If you can’t love what you do, maybe you need to stop right now.  Look harder for profession you can love. Seriously, if you are going to be an unknown-programmer who writes depressing programmer poetry - it’s best that you chase your dreams in a profession you love.

But chances are that if you are reading this, you already enjoy building software and you don't really need the advice on the above paragraph. Spend more time with what you enjoy doing and love it just like you love your lover! Go Ahead, hack your life so that you can spend more time with what you love doing without giving up on other personal commitments. 

To wrap things up, the next time you take a quick-break or engage in an activity for a while, which is technically a waste of time, don't feel guilty! And by the way, the next time you end up spending 16 hours a day with a computer, don't feel guilty either! :)

posted on Monday, June 25, 2007 2:25:19 PM UTC by Rajiv Popat  #    Comments [4]