Independant Contractor – Day 1

So today was my first day working as a purely independent contractor. I had been working full time, then transitioned to full time contracting with the same company, and today I blossomed into being solely a consultant and owner of my awesome sexy company, Unit of Work, LLC.

And what a day it’s been! I’ve managed to… do a lot of administrative tasks. Wait. What? What’s that you say? You can’t bill for administrative tasks? Yes. Well, I know that.

But since taking on my own clients, a lot of administrative tasks had piled up working full time. My time keeping system consisted of post it notes, and while I had QuickBooks, I hadn’t actually bothered to learn how to create an invoice.

Time keeping software is scary. It’s pretty much a horrible task, so any software you use only makes a horrible task computerized and more horrible. There’s no real winning with time keeping. Nobody has ever said, “Oh man, last night, I got home and I got to record my time! It was so awesome!”

I consulted my OCD friend Lifehacker for reviews of various Time Tracking Softwares. timeEdition seemed relatively popular, so I downloaded it and started transferring all my post it notes of billable hours into it. It seems to be pretty simple which is what I wanted. Select customer, project, and task, click start, work, click stop, and bam, you’re done.

That’s nice, but entering historical hours is pretty painful. A date picker which always defaults to today, and some pretty picky time selection controls makes for rough waters. I persevered, and I think, moving forward, it will work nicely.

Likes: Simple, Easy to Use
Dislikes: Painful Manual Data Entry UX, Doesn’t Store Database in the Cloud

I could rant about QuickBooks sucking, but everyone who uses it already knows that, so I’ll leave it at that. I have nothing new to contribute.

I’m so excited though. I did Administrivia, and I loved it. I’m ready to take over the world! At least as soon as I get this invoice to save to PDF.

Manifesto for Software Craftsmanship

A sort of sequel to the Manifesto for Agile Software Development, I am proud to be a signee of the Manifesto for Software Craftsmanship:

As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:

Not only working software, but also well-crafted software

Not only responding to change, but also steadily adding value

Not only individuals and interactions, but also a community of professionals

Not only customer collaboration, but also productive partnerships

That is, in pursuit of the items on the left we have found the items on the right to be indispensable.

© 2009, the undersigned.
this statement may be freely copied in any form,
but only in its entirety through this notice.

Software quality is of huge importance to me. I have always believed that if you are going to do something, it is worth doing right. I believe that quality is an end unto itself, but I also believe that as a side-effect of quality, tremendous business value can be realized.

If you are a software developer that takes pride in the things you create, then I urge you to sign the manifesto.

Options

I don’t like WordPress. This has been documented somewhere in this blog. I’m too lazy to link it.

Some other people don’t like WordPress either sometimes. I was just bitten by that same caching issue.

You see, I had made the mistake of thinking that enabling the WP-Cache plugin would actually enable caching on my system. I always thought “Man WordPress sucks! My blog is so slow! And nobody reads it anyway so it can’t be because people actually care about what I’m writing!”

But I digress. I enabled the WP-Cache plugin, and it was still slow. I looked a bit further, and the default options of an enabled WP-Cache plugin explicitly disables caching. You have to go into the plugin’s settings page and click “Enable”.

What the hell is that?! You know what that is? That’s a programmer right there. We love options. “Oh well if my toaster could turn inside out I could use it as a space heater in my bathroom.” Nobody wants to do that, but we love the fact that we could. We end up designing software for ourselves instead of our customers.

This is bad! Bad, I tell you! Bad! If i could hit you on the nose with a rolled up newspaper I would! Twice!

Users don’t want options, nerds want options. If you have a techy audience, then consider piling in options. R# has a million, and I think each and every one is delicious.

However, if your users are Johnny down on the warehouse floor, he doesn’t want to know about transactions, offline/online operation, or whether or not the circuit breaker is tripped or not. He wants to do work so he can get home and play with his kids.

And remember, DON’T LISTEN TO YOUR USERS. I love this quote:

Definitely don’t believe what people predict they may do in the future.

ALT.NET Seattle

So, I know ALT.NET Seattle closed 2 day ago, which, in “Internet/Blogger Time” is approximately 1.5 million years ago, but I want to blog about it anyway. Warning: rambling ahead.

Passion.

That sums up a great deal of what the conference was about. People were insanely passionate about the things they were doing, which seems simple enough, but sometimes I feel like nobody really gives a crap. These people loved what they do. They see that there’s a better way to develop software, and they want to show the world how well it works. Since I tend to hop around and wave my hands all over the place when I get excited about software related things, being around people who show such passion (maybe not by hopping around) was really refreshing.

Sessions.

I really enjoyed the session by John Lam on IronRuby. I’m very much not “in the know” on IronRuby, so I had a couple months ago gotten the mistaken impression that nothing really was going on. That was immediately dispelled, and I realize now that I got that impression because there are no binary releases of IronRuby. It’s a sort of implicit warning sign along the lines of “There be dragons here.” This was a theme throughout the conference. I need to get over it I guess. We’ll revisit that.

Anyway, the IronRuby talk was good, although it was a bit deeper than I would have liked to see, personally. Of course everyone else knows about 50 times more about IronRuby and Ruby in general than I do, so I don’t feel personally slighted in the least. It was still really interesting, and I plan on stealing John’s setup of using Vim inside Visual Studio (ViEmu) and FireFox (Vimperator). I’m less convinced about Vimperator, but ViEmu sounds pretty sexalicious.

Agile Coaching

The two sessions that had the most profound influence on me personally was the session “Coaching Agile Teams” hosted by Jim Shore. I have inherited a team, and I am trying very hard to incorporate new technologies and techniques into our development practices while at the same time not overpowering them. It’s a little overwhelming at times, being fresh out of school and suddenly finding myself in charge of our daily software development efforts. It was great to talk to these guys though, and get a few ideas (well 4 pages of ideas) and a little confirmation that I haven’t just completely screwed it all up, heh.

The ideas we talked about, empowering the team, investing in the team’s long term functionality, and similar things, were echoed throughout the second day of the conference in a session (I think by Oren Eini, the wiki is throwing me errors for some reason right now, I can’t confirm) discussing how to convince your team that using these advanced programming practices (IoC, AOP, SOC, TDD, SRP, etc.) is beneficial.

There was a lot of discussion about how frustrating it can by trying to convince someone that there is a better way when they aren’t interested in learning a better way. Of having people in technological positions who are not interested in technology. The frustration was palpable, but I personally got the feeling that all of the frustration is rooted in the tension of people resisting an effort along the lines of: “I want to make your life better by making your work easier in the long run.”

Em-Vee-See

The session on MS’s MVC offering was pretty good. I’m just getting into the whole MVC shebang, and what I was personally interested in coming away with was that if I choose Monorail over MVC, or MVC over Monorail, I wouldn’t get horribly screwed. A comment was made concerning MSMVC’s better integration into the IDE versus Monorail, and Chris Ortman made a comment during the session about how his personal experience was a bit of the opposite with a developer he had bringing him up to speed on MVC.

I approached him afterward for a little elaboration, as we have a web project coming up soon and I’m pretty convinced this is the way to go. His comments were very reassuring, and I came away with the thought that, if anything, the Castle Project may be the *more* supported solution, simply because the mailing lists are so awesome, something I can attest to personally. I also learned that I should probably move away from RC3 of Castle Project (the last binary release) and just use trunk. Sort of goes back to my predisposition against using non-binary releases.

Btw- Check Chris’s Blog for an idea he and some others have for a Developer Exchange program. I love the idea.

Grassroots

I also met a gent by the name of Alan Buck. He seemed pretty cool, local to Washington, and through our discussions he asked if I’d be interested in joining a micro-community of people here in Washington we can reach out to to bounce ideas off of and so forth. I contacted him yesterday, and I’m really excited about the opportunity. I’ll update with what goes down.

Also, does anyone know of any developers in Eastern Washington (read: East of Snoqualmie Pass). There are a crapload of resources for those in Seattle, Redmond, Olympia, etc., but nothing I’ve found for us desert-folk. I’d like to connect with those out there, and I’ve been considering forming an Eastern Washington User Group of some sort. Especially since for like 3-4 months a year we’re cut off (or at least seriously discouraged by such things as avalanches and tire chains) from the west side.

Other: _________

There was a lot else going on. Like how Scott Bellware came off as kind of rude, but then by the end of the show had completely garnered my respect, all without even having to personally interact with him, and how Ben completely blew me off 2 nights in a row (Thanks ben! ;) j/k), or how Steven “Doc” List was an amazing facilitator, or how Jim Shore had this amazing style of being very soft spoken, respectful, and polite while exerting a powerful control over the session. (Doc and Jim Shore have crazy awesome people skills), and umm… yeah. stuff.

It was great. I met amazing people. I didn’t meet anyone I didn’t like (I know, right!?). I can’t wait until the next one. I think I might try to go to Austin. We’ll see.

Carbonite: Still Failing

Back in the day I wrestled with the decision between Mozy and Carbonite. I eventually chose Mozy and I’ve been incredibly happy with it. It’s already saved my bacon a couple times, and I find the combination web/local interface to be incredibly helpful. Unfortunately not everyone has been as lucky as I have.

Rich B. left me a comment regarding his current Carbonite situation. Here’s an excerpt:

I’ve been a Carbonite subscriber for almost a year. I recently suffered a hard drive failure and was very proud of myself for knowing this would happen AGAIN and being prepared. Little did I know. I’ve been attempting to do a partial recovery of my files for 5 days. Partial as I’m waiting on a new drive from Western Digital. For the last 2 days the service has been ’stuck’. The interface is clunky at best and there is no way to retrieve your files except wait for something to happen.

When I first attempted to recover my files I noticed that all the folders on Carbonite showed a date corresponding to a date last year when I first subscribed. Not good when you expect to recover your most recent files. Sure enough the few files I was able to recover were old files. I sent an email to Customer Support and they responded within 12 hours which was acceptable. Subsequent email requests from me, both by Replying to the original and going back to customer support have met deaf ears – no response in over 24 hours. Their customer support form says it may take 72 hours to respond because they’re busy. I don’t know about others, but when I’ve had a hard drive failure and can’t recover my files, 72 hours is a little slow for customer support assistance. I obviously need files as quickly as possible.

Mozy hasn’t been a cakewalk either. It’s got it’s own share of idiosyncrasies, but nothing like that.

Software Engineering lessons to take away? Nothing new: Think about your users, Consider the human elements of software design (and further software support), and Interface is crucial.

That’s an interesting question: How do considerations for continued support for production software influence design?

Implementing and Overriding Read Only Properties

Ok enough crazy posts about divine design beings shining down on me from up on high. That’s what too much caffeine on an empty stomach does to a person!

So I’m beginning to hate VB.NET. Yup. There, I said it.

I was trying to create a read only interface to a Part object.

Public Interface IReadOnlyPart
    ReadOnly Property PartNumber() As String
End Interface

And Have a Part Class Implement that Interface like this:

Public Class Part
    Implements IReadOnlyPart
    Public Property PartNumber As String _
        Implements IReadOnlyPart.PartNumber()
    Etc.

That doesn’t work in VB. You can’t inherit a readonly property from an interface and then make it read/write. Grr! I’m told you can do this in C#, but I haven’t confirmed this. I posted an inquiry to microsoft.public.dotnet.languages.vb and got some great responses. This is the proposed solution by Steve Gerrard which, while perverse, works wonderfully.

Public Class Class1
    Implements IReadOnlyPart

    Private PartNum As String

    Private ReadOnly Property Dummy() As String _
        Implements IReadOnlyPart.PartNumber
        Get
            Dummy = PartNum
        End Get
    End Property

    Public Property PartNumber() As String
        Get
            PartNumber = PartNum ' or Dummy
        End Get
        Set(ByVal Value As String)
            PartNum = Value
        End Set
    End Property

End Class

Sample test code:

Dim o As Class1 = New Class1
Dim p As IReadOnlyPart = o

o.PartNumber = "test 001"
Debug.WriteLine("Class1: " + o.PartNumber)
Debug.WriteLine("IReadOnlyPart: " + p.PartNumber)

I never would have figured that out. Always ask for help when in over your head. I’ve got another post brewing on that same mailing list now about delegates.

Grr @ Delegates! So sexy, but so pointy.

On Democracy

So Visual Studio 2008 is out, and by all accounts it is pretty bling-tastic. LINQ is getting a lot of press since it’s release late last year. I just finished reading this article over at SD Times, and I wanted to comment.

Democracy is slow. Technology moves fast. I’m not sure they’re a good mating. I’ve heard it claimed that a negative part of Microsoft’s development platform is that it is constantly changing. Java hasn’t changed very much. They added some stuff in 5 and 6, but nothing like what MS is doing in every incremental revision of .NET. .NET is really impressive these days. It’s not one language that’s impressive, or one technology, or one tool, but the entire platform. There’s a lot of new technology that is put together really well.

I think this is due to the fact that there is someone, somewhere in Microsoft with “vision”. Maybe not just one person, but at least some smallish team leading development efforts. Java has implemented this sort of open democracy JSR proposal process, but I’m not convinced democracy belongs in software development. I feel that someone or a small group with a passionate vision can create new innovative things, while a large democracy oriented team just sort of takes so long that it’s always playing catch up. It’s probably “safer” to have a democracy, but taking risks is an important part of progress.

Maybe I’m wrong. What are your thoughts? Are there software projects where democracy created very innovative things that I’m not considering?

Online Backup Throwdown, Part 2

Update: Please also read part 3 before you make your online backup service selection.

In my previous entry on this topic, I described my problems with online backup services Carbonite and Mozy. Interestingly enough, both companies contacted me with regards to my post.

Carbonite’s CEO David Friend (or rather, I suspect, a PR firm masquerading as David Friend Update (Oct. 27, 2007): it was not a PR firm but actually David Friend, CEO of Carbonite. My bad.) commented on my blog in reply to my complaints. You can view the exchange here. I can understand not supporting backup from network drives, but I have a great deal of difficulty understanding the choice to not support backup from external drives. External drives are not uncommon with home users.

Thankfully Mozy does not suffer from these shortcomings. Bryan Fultz from Mozy contacted me directly offering me support on getting my Mozy installation to function. That impressed me a great deal.

It made a big impression on me that Carbonite was more concerned with their image than with backing up my files, while Mozy was more concerned with troubleshooting my installation and getting my data backed up.

Today, Mozy won one more paying customer.

BTW- Now that Mozy is setup and functioning, I can safely say from personal experience that the interface is way better than Carbonite’s.

New Java Plugin!?

*sigh*

So there is this interview over at JavaLobby with Ken Russell discussing the new Java browser plugin. Go ahead… go read it… I’ll wait…

*waits*

Ok, they’re just now writing a new browser plugin for java? I have a friend (a user, not a programmer) who absolutely swears java is horrible because of his experience with it. Everytime I hit a webpage with a java applet, my browser freezes for like 20 seconds, and maybe 1 out of 5 times the entire thing will just crash. Unfortunately experiences such as this are many people’s primary experience with java. They see a java logo on a webpage, and their browser freezes/crashes. Great PR.

I’m excited about a new plugin, but I’m excited about it from a user perspective. I think it is personally too little too late. The idea that java inside a browser is horrible is already firmly entrenched. There would have to be some huge killer app(let) necessary to convince the world otherwise.

Imagine if they had rewritten the browser plugin back when they should have. Imagine a YouTube powered by java instead of flash.

But now? It’s already been done. Java is doing something that’s already been done by everyone else a couple generations ago. Java is behind the curve, yet again.