What do I bill?

My first client in the consulting world at my current gig was a big company.   They welcomed me spending all kinds of time, including overtime, to get their product built faster.  They were also using somewhat older technologies – VS2008, VB.Net, WCF/SoA, a hand written DAL, no BOL – to get the work done, and as a result, I knew pretty much what I was going to do.  There was no “play” time needed.

My second client, is a small company.  Every hour counts.  The less hours, the better.  Its also entirely up to me how to build it – so, how new do I go?

  • I could use all the cutting edge stuff that I don’t know fluently, charge the client for me learning the hard way.
    • This seems unethical.
  • I could stick to older stuff that I do know.   Only sell the client the skills I’m awesome at, and spend time to bring some skills up to awesome.
    • It takes a lot of extra time to become awesome at things.
    • As I have a family i like.. this is impractical.
  • A mix of the above.
    • How?
My Employer’s Solution
They have set it up so that I am “salaried” at 36 hours.. and I have an extra 4 hours to do a self-directed project.   During this time, i can become awesome at stuff I don’t yet know!  And it doesn’t have to be related to any current or future project, just stuff I want to figure out.
(I have a huge list of things I want to play with and get working…)

My solution

I have partitioned my list into three sections:

  • BUCKET A: The stuff I know how to do fairly well
    • Architecture decisions
    • Project management
    • Console app, Parsing command line options
    • Setting up diagnostics in various places to make the utilities easier to use
    • Database design
    • Setting up local test data environment
    • Research into options available
  • BUCKET B: The stuff I don’t know how to do yet, that I will definitelyhave to learn.  I do charge for this, and try to get it working as fast as I can.
    • Fluent NHibernate + NHibernate
    • MVC3.  I am NOT going webforms, sorry.
    • Dealing with ENUM’s in PostgreSQL  and mapping those to enum’s in C#.
  • BUCKET C: The stuff I need to play with to figure out &  use, but if I don’t figure it out immediately, I can get by without it.
    • SpecFlow / BDD
    • fastest way to setup- and teardown  data in the database for functional/integration testing
    • Selenium

Then, its not that I stay away from Bucket C, its more that I focus most of my time on Bucket A… till I feel i’ve been productive..  then B, and then maybe C.

I also timebox bucket C.  For example, i researched Specflow today, figured out that yes, i want to use that.. and then I cut that off at 0.5 hours.  The rest of my specflow “play” time will be “on my own” – until I get it working enough that I can move it down into Bucket A.

This gives me a clear conscience – I’m not charging the customer for playing/learning  stuff that was not required – instead, i realize that with any new technology, there’s going to be some “settling” of it into my toolbelt, and that does take time.  I cannot “rush” that time – so I’ll do myself a favor, and not pressure myself into learning it quickly.

For that matter, I timebox bucket B as well.   For example, I could not get C# enums to save as PostgreSQL ENUM’s in about an hour of trying.  I had a workaround – save as TEXT.  I went for it – can revisit this at another time.

How this works at home

Hanging out with my wife is one of the joys of my life, and I do not shelve that easily.  Luckily, synergistically, My wife had dinner with friends today, so I was able to make tonight into “tech playtime”.   I combined playtime with  bringing my VMWare work image home on an external hard drive – and that worked beautifully as well.

My next chance for evening tech playtime, unfortunately, may not be till next week. But, if I can get ahead of my required hours at work, i might convert some work time into play time.    Getting in to work early means I can do playtime starting at 3 or 4 pm!

 

Leave a Reply

Your email address will not be published. Required fields are marked *