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!

 

Why would I ever read a Technical Book?

When I was in college, I used to laugh at the “technical books” section of the bookstore in the mall. Well, actually I didn’t, because at the time, I would go there exculsively to drool over all the science fiction books.. $3.50 or so each.. that I could not afford, as I was living on ramen noodles and cans of peas, because that’s all I could afford. (link)

Then, when I became a working stiff paid professional, I would go to the technical books section and laugh, because.. I knew all that stuff. There was a lot less to know in the early 1990’s, and there was a lot of stuff “beneath me” (Dbase II, FoxPro, etc). (I was cool, I was porting apps from Clipper S87 to 6.0, and nothing came even close to the beauty of LPC)

In the late 1990’s, I would sneer, because I was a close-minded anti-microsoft pro-linux-perl guy, and I really did not want to know MFC. I did, however, buy and own the Perl Cookbook, which opened my mind to the amazing ways to hack things into place to get things done. I used that book a LOT. (The next year, i got sent to C# class because they had an extra spot, and I have changed my mind about Microsoft) actually, I would say that Microsoft changed, and no longer annoyed me. C# was almost as awesome as LPC. (link)

For a while, in 2006 – when I found myself facing unemployment (it lasted all of about 2 weeks), i found myself browsing technical books, lamenting: so much to learn, what shall I learn? I ended up gravitating towards unit testing and Asp.Net WebForms, which I learned almost entirely via google, not from a book. Thank you .Net Rocks and http://www.hanselminutes.com/ for the pointers! In this case, the dead-tree books did not do anything for me, and being unemployed, I felt I shouldn’t be spending $$$ if stuff was available on the internet for free.

I did buy some technical books in 2008 to read on vacation – wow, that was a rousing success. (Not). I hardly picked them up. A waste of $100+. (Patterns and Practises in C#, something else). They’re still too expensive, when all of that knowledge is available for relatively free on the internet.

So, i repeat the question:

Why would I ever buy a technical book?

My answer:

I bought one two nights ago. I wanted to know about how to use EF Code First – I couldn’t sleep – I bought the book on my iPad Kindle – and I read it, cover to cover, in about 45 minutes. And my lightbulb was born.

Here is what is different:

  • I have a very specific application, for which I might need the technology. This is not “reading for fun”, but rather, reading to get a specific job done.
  • I don’t know enough about the technology to know what to search for. (searching online only gave me introductory examples, nothing with real meat.)
  • I’m approaching it not as “a ton of money spent for a dead paperweight that I’ll never look at again”, but rather as a fairly inexpensive class briefing me in a specific subject which i can refer back to later. Most of these books cost me less than an hour’s work, after taxes. (I am a professional, and I need to know as much as possible, as quickly as possible, to give my client the kind of service that I want to give them.)
  • I have an e-reader. on my iPad, and pretty soon, on an e-ink device. I can archive with impunity, without killing bookshelves.

And thus, I’m sold. Here’s what I choose to read up on for my current client, to ensure I’m giving them the best that I can:

  • PostgresSQL (done) (pdf, free)
  • EF CodeFirst (done) ($10)
  • EF (general)
  • Asp.Net MVC 3 +/- Razor
  • Dependency Injection (Structuremap vs Unity)

Whee!