Choosing a software contractor

When companies look to hire a developer to write software, in particular iOS (iPhone and iPad), they expect to hire an expert. However these days everyone and his dog claims to be able write iPhone and iPad software. While this may be true, it is nearly impossible to know if you’re getting a good product. Apps may have great visual design, but in some cases it is just a pretty face. So how do you pick a developer that is going to produce a quality product that is stable, maintainable, and works well. Many projects get passed from developer to developer, so having good quality code to begin with, the app will have a higher change that it can continue without being completely rewritten.

I’ve written software as a contractor for many years and like to think that I know what I’m doing, so here are some tips and questions to ask that may help companies hire a quality developer.

  • Does the developer rely heavily on open source? Open source itself isn’t inherently a problem, but should be used sparingly for specific purposes and should be easily removed at a later time if need be. Building an entire application on an open source framework makes things needlessly complicated and fragile.
  • How long has the developer been writing Objective-C software (Mac or iOS)? Experience says a lot about how easily the code can be maintained in the future.
  • What do the applications that the developer has developed look like? Take a look at the App Store and see how complicated the apps are and how well they work?
  • Ask for references. Ask why the developer is no longer doing work for the references. There are a number of ways to say “we got fired”, so be on the lookout for those. If the app is no longer being developed, the company ran out of money, or the developer no longer has time are probably the best reasons; anything else might be suspect.
  • Does the developer use source control? This is a pretty basic requirement. If a developer doesn’t use source control for his/her own projects, that would worry me. There are many sites that offer free or cheap source control, so there is no excuse for avoiding it.
  • Does the developer use code analysis tools such as CLANG? It’s built into Xcode and there is no excuse for avoiding it.
  • Does the developer allow warnings when building the project? Compiler warnings should be avoided at all costs.
  • Can the developer provide code samples for review? In particular, an app that can be built using the Apple Developer Tools. This is important as some developers have a huge list of tasks to get a project built. A project should be delivered such that you can unzip the archive and build the project. I’ve seen projects delivered that have a list of steps to build including checking out code from open source repositories. This is extremely problematic and error prone as the repositories could change by the time the app is delivered.
  • Ask the developer what is the right way to determine if a feature is available on a particular device. Today I saw code that checked the OS version to determine if Retina display graphics should be used. This is completely wrong because for example, iOS 4 runs on devices that don’t have Retina displays. (Also the code that checked the OS version didn’t properly check the version.) Apple has identified ways to determine if a particular function should be used or a feature is available.

These questions are probably hard for non-developers to ask and know if the answers are legit, so it might be worth spending a few bucks to find an expert, such as me, that can spare a few hours to evaluate a developer, but doesn’t have time to actually do the project.

An exercise in frustration

When I was training for the 2 marathons I ran, I listened to audiobooks to pass the time as training runs could last for hours (it takes awhile to run 20+ miles on the long runs). I bought a number of books from Audible.com. Once I stopped training, I couldn’t justify the monthly cost for audible, so I switched to listening to podcasts on my runs. The other day, my dad showed me how he checked out an audio book from the library to listen on his iPod Touch. It looked promising, so when I got home, I went to the San Diego Public Library Web site and browsed to the eCollections link. I found a book that said it could be played on the iPod, so I checked it out and installed the OverDrive software on my iPhone.

Safari.png

Unfortunately that’s where the easy part ended. After a bunch of frustrating tries and re-reading the help information, I realized that the OverDrive software only played MP3 files. Well, I can use iTunes on my iPhone to do that, so what good was the software? There is a button on there labeled “Add Website” which implies it would make it easier to download directly on the device. I tapped on it and it launched Safari on the iPhone. Lovely. After more searching and reading reviews about the software, I came to the conclusion that the software was almost useless. I would have expected that I could enter my library card number and PIN, browse for books on the device and listen to any available audiobook. That’s not what happens; the OverDrive folks didn’t implement a WMA player that handles the DRM used on the books, so it would only play unprotected MP3 files.

I almost gave up on the concept of listening to checked out audiobooks on my iPod that I use for running or iPhone when I decided to install the OverDrive software in Windows 7 in VMWare (remember I’m a Mac user). The software offers an option to transfer the audiobook to an iPod. Hmmm…my iPod is Mac formatted and the documentation said it had to be Windows formatted. I didn’t want to do this and dug into my box of cables and stuff and found an old iPod Nano. I plugged it in, grabbed iTunes for Windows, reformatted the iPod and started the process to transfer the audiobooks to the iPod.

I’m not going to get into the nitty gritty of what is going on, but using the software in the manner it was intended, I was able to transfer unprotected audiobooks to my iPod and iPhone. Wow, this is a huge hole that isn’t the same as the analog hole. Either this is a significant oversight or a deliberate choice that the audiobook publishers have decided to accept.

The process of checking out these audiobooks was quite painful despite reading all the FAQs and me being a software engineer. My dad figured it out much faster than I did, so maybe I over analyzed it or my dad wasn’t as discriminating in his choice of books. Our library offers 100 audiobooks in MP3 format which I could have used with much less frustration while it offers 1784 books in WMA format (most of it protected so that it expires after the lending period). I’m not sure how OverDrive has convinced over 13,000 libraries to adopt their system, but the system is almost unusable.

Has anyone found the process of checking out audiobooks easy? It’s almost worth buying them from Audible.com to avoid the dealing with this.

Review: MailHub (plugin for Mail.app)

One of the things I do is “collect” software never knowing when I’ll use it, but there are a small staple of applications I use all the time. When I saw MailHub, a plugin for Mail.app, I quickly downloaded it and played with it for a few minutes. I don’t think I spent more than 10 minutes with it before I pulled out my credit card and purchased it! One of the problems with receiving so much email is what to do with it. I used to run rules on messages and kept having to setup new rules to move messages. This was inefficient for me, so dealing with messages as I read them seemed much more efficient.

If you don’t use rules in Mail, you have to use the mouse to move messages to different mailboxes/folders. For people like me that like to use the keyboard as much as possible, the process of reading a message, then moving my hand to the trackpad/mouse to file a message just wasn’t attractive. With MailHub one or two keystrokes is all it takes to move messages to mailboxes. To top it off, MailHub has smarts that tries to figure out where the messages will go and it does a pretty decent job. MailHub does a number of other things, but the ability to file messages quickly is ideal for me. My inbox is now down to zero as I deal with messages quickly as I read it.

The $19 cost for MailHub is peanuts as it saves me a significant amount of time. The plugin hasn’t affected the stability of Mail and is quite integrated into Mail.

Pros

  • Excellent integration with Mail.
  • Learns about where to file messages.
  • Easy to use keystrokes to file messages.
  • Low price.

Cons

  • Every update to Mail requires a plugin update. Mail plugins are not supported by Apple and with Snow Leopard, Apple has added a version ID to each Mail release, so plugins have to get updated. MailHub has been updated to support the new Mail versions.
  • Only works with Mail. This really isn’t a knock on MailHub, but I’ve started using Outlook for Mac to integrate with my work’s Exchange server and I miss MailHub when using Outlook

Summary

If you use Mail on the Mac and get more than just a few messages a day, MailHub is definitely worth a look. There is a 30 day trial, but I suspect that you’ll purchase it after just a few days. The plugin is well done and it’s simplicity makes it a breeze to use.

Another run in with Mail.app

It seems that I rarely encounter issues with Mail hanging while talking to Gmail. Maybe I’m lucky, but it seems that my sister has more problems with the combination than anyone else I know. Today she called me almost panicked as her husband’s machine wasn’t getting mail. Turns out there were a number of issues contributing to the problem. The solution was relatively simple once I figured out the issue.

The problems:

  • Too many messages in All Mail. There were over 37000 messages in the All Mail folder on Gmail, so when he selected All Mail, Mail happily started retrieving all 37000 messages (several gigabytes). This never finished.
  • Closing the computer kept restarting the process.
  • Corrupted IMAP cache directory.

The solution:

After a bit of searching I came across a reference to the .OfflineCache folder. This is a hidden folder in ~/Library/Mail/IMAP-nameofaccount/. You have to use Terminal to access it. Removing this folder (when Mail is not running) will cause Mail to start recaching the IMAP mail. This would unstick Mail, but the problem would come back once the All Mail was hit.

I remembered that Gmail labs added some advanced IMAP options. I turned on Advanced IMAP options in Gmail labs. This brings up a few very important options.

Safari.png

Once that option is turned on (and saved), Forwarding and POP/IMAP has an extra option.

Safari.png

If you set the limit, Mail will at most show 1000 messages. This significantly reduces the number of messages that come down. Deleting the cache folder, setting this option, and then restarting Mail (and waiting a few minutes), cleaned up everything. However, there was one more option that I missed that would reduce that 1000 down to none (viewing All Mail in Mail is kind of a waste). Click on Labels and you can turn off the Labels that are shown in IMAP. Basically turn all of them off.

Safari.png

Presto! Problem solved.

Piracy in the Mac App Store

A number of web sites are reporting that apps in the Mac App Store can be pirated. While this seems to be news, it really isn’t in my opinion. As long as I can remember, software has been pirated no matter what developers have done to protect the software. Many applications use a simple user name and registration code for registering; some send a request to a web server to verify the request. In all cases, the software can be cracked by people that are unscrupulous and aren’t buying the software. Isn’t there other news to report on besides something that really doesn’t affect the average user that isn’t going to user pirated software?