Wednesday, December 31, 2008
To-Do List Application Update #1
At the beginning of the month, I described my plan for The Ultimate To-Do List Application for iPhone. That wasn't just hot air; I actually have created an app.
It doesn't have all the planned features yet, and it's not ready for distribution to others, but it is complete enough for me to use. It's so useful, in fact, that I don't have a strong need to add the remaining features. But I want to do so anyway.
Here's what it can do so far:
- Maintain a list of lists. Each list has a name. Each list contains a list of items, each of which has a name.
- New lists can be created, and new items can be added to lists. Each such operation is performed by the user by tapping a '+' icon, which brings up a text entry field to enter the name.
- Lists and items can be deleted or reordered by clicking an "Edit" button. Things can also be deleted via the swipe gesture.
- All data is stored in a SQLite database.
The most obvious "missing feature" is the lack of checkboxes. I'm not really missing that feature, because I just delete items as I complete them. So maybe I don't need it, but I'll add it anyway just because the app will look better with them.
Kris and Pebble at the Grand Canyon
My stepson was going to spend the week of Christmas with his father in Tucson, so my wife and I decided we would spend the week at the Grand Canyon. It was a wonderful week, basically a second honeymoon.
We didn't do a very good job of planning the trip. We didn't reserve rooms at the hotel until early December. We didn't reserve a room in Flagstaff, where we had planned to spend a night on the way to the GC from Tucson. We didn't check the weather reports. We didn't have a map. We were very lucky that things turned out as well as they did.
We reserved a room at the El Tovar hotel, which is right on the south rim. We had hoped to get a suite, but had to settle for a deluxe room.
We got to Flagstaff early in the afternoon, so decided we'd just go the rest of the way to the park instead of stopping for the evening. Pebble called and eventually got a reservation for a room a day early.
Unfortunately, we had not checked the weather. About twenty miles from the park, we were hit by heavy snowfall and icy roads. We were in a Mazda Miata, which is not exactly an all-terrain vehicle. Faced with the decision to either go back to Flagstaff (an hour behind us) or get to our hotel, we decided to trudge on.
Twenty white-knuckled miles later, just after sunset, we arrived at the hotel. We both needed stiff drinks before going to bed.
The following day (December 24), we ventured outdoors. Pictures of the Grand Canyon really don't do it justice. It's huge. It's beautiful. It makes you feel infinite and infinitesimal at the same time.
Pebble and I each brought a camera, so we had a little photography competition. I'm pretty sure I won, but she disagrees. (Check out my photos on Flickr.)
On Christmas Day, another snowstorm hit. At lunch, we were given seats with "a great view of the canyon", but all we saw was white. We didn't leave the hotel that day, and we wondered whether we'd be able to drive that Miata out of the park when the time came to leave.
Subsequent days had better weather, so we had ample opportunity to visit various points on the South Rim. We decided to extend our stay an extra day, and got to stay in a suite the last night.
We were sorry to leave. This was the first time since our honeymoon that the two of us have been able to just have fun, without worrying about work, the kid, the dog, the house, and all that other stuff. But we do love our kid, dog, and house, so we were happy to be reunited with them for a belated Christmas celebration.
We hope to visit the canyon again during the spring or summer. And we'll definitely stay at the El Tovar again.
Friday, December 19, 2008
Interacting with Customers
Today I was delighted to discover that Jeff Atwood and Joel Spolsky discussed my recorded question on Episode 34 of the Stack Overflow podcast. I now think there should be a Stack Overflow badge for people who have appeared on the podcast, either as questioners or as guests.
Here is my question (without the ums and pauses):
It is often said that the primary role of a software development manager is to insulate developers from the customers, users, executives, and other people involved with the project. However, I have often found that talking to customers and users gives me a lot of useful information that isn't in the specs about what the true requirements and goals of the project are. To what extent should developers interact with customers, users, and other stakeholders?
Jeff and Joel had some good comments. What follows are my own thoughts about the topic.
When I started out as a developer, I was very introverted, content to just sit in my cubicle and interact with the world via e-mail. However, as I acquired more responsibility, I had to start talking to executives. Eventually, I became a development lead, and had to meet with actual customers.
I was terrified, but it was my job, so I did it. It turned out to be a lot easier than I expected. It was even pleasant. It turned out that customers weren't morons who wanted to torture software developers; they just wanted us to deliver software that suited their needs, which is exactly what I wanted too. I looked forward to the customer meetings, which always invigorated me and got me more excited about working on the software.
Based upon that experience, I've encouraged other developers to get involved with people outside the team, and I've often wished my employers would do more to get us out of our offices and into the users' facilities.
Of course, there are costs and risks associated with customer/user interaction. The time you spend with customers and users is time you aren't writing code, so if you do too much you lose productivity. Developers by nature are usually willing to do whatever it takes to solve problems, so there is the risk that a developer will commit to do something that shouldn't be done. If customers get too chummy with developers, they may try to go around management, which is bad for everyone. And finally, some developers have personality disorders that make them unsuitable for outside contact.
But still, I encourage all developers to try to get into positions where they can talk to customers and users. It makes software development a lot more fun.
Monday, December 08, 2008
An Open Letter to Global Imports BMW
This is the text of a letter my wife and I have sent to the sales manager, service manager, and general manager of Global Imports BMW in Atlanta. (The only response we've received is from a salesman who called to ask what kind of BMW we were interested in purchasing.)
My wife and I recently bought a MINI Cooper convertible from your dealership. While we are very happy with the car, we have been very disappointed with the service we've received from your dealership. We are sharing our experience with you so that you may improve your customer service.
In September, we bought a MINI Cooper S convertible which had been an executive demo, and therefore had a few thousand miles on it. We were assured that we would receive excellent service, and that the dealership would take care of details such as our new license tag and insurance.
Our insurance company never heard from your dealership. After thirty days had passed, we still had not received our new license tag. I repeatedly called the sales associate who had sold us the car. The first four times, I was told that he had "just stepped out" and I left voicemail, which was never answered. Finally, I got hold of him, and he told me that sometimes the tag just takes longer than usual. A week later, we received the tag. It may have just been slow processing by the state, as he claimed, but we suspect that nothing happened with our tag until we prompted him.
In December, the time came for our first scheduled maintenance visit. I called the dealership and made an appointment for Saturday morning at 10:20 AM. When I made the appointment, I told the clerk that in addition to the scheduled maintenance, there was some other work to be done on the car, and we were interested in installing a handsfree Bluetooth telephone module. She said that would be fine, and that we'd simply need to tell the service coordinator when we arrived for our appointment.
She transferred me to the parts department to check on availability of the Bluetooth module. I got a recording. I left voicemail, but my call was never returned. I called a few more times during the week, but each time, I was transferred to a different voicemail account, and although I left messages each time, none were returned.
On Saturday, we arrived at around 10 AM. When we checked in at the service department, we mentioned to the clerk that we had been unable to reach the parts department. He shook his head and said, "Yeah, those guys are never at their desks."
After a few minutes, we met with the service coordinator. This is what she told us:
- On Saturday, only maintenance is done. Any other repairs or work must be done on a weekday, so they wouldn't be able to look at our non-functional CD player or non-functional back-up proximity sensors, even though they'd be covered by the warranty.
- As she was on vacation earlier that week, she was not responsible for anything that had been said to me on the phone.
- It was not possible that anyone would have set up a Saturday appointment without telling us that only maintenance would be done.
- The service department was overbooked for the day, so our car would not be ready before 1:00 PM, which was over two and a half hours from our appointment time. (Why bother making an appointment?)
- Adding a handsfree Bluetooth module to our car (which already has the premium sound system and phone controls on the steering wheel) would cost $1,700.
- We could have a loaner car. However, if we accept the loaner car, then the priority of our service gets decreased, and the car would not be ready until 4:00 PM.
We had already spent an hour and a half driving from our home Dahlonega, so we decided to let the service department do whatever it could. Not wanting to sit in the waiting room for two and a half hours, we accepted the loaner car, puttered around aimlessly for a few hours, and picked up our MINI at around 3:30.
We wasted an entire Saturday just to get an oil change. Next time, we'll go to Jiffy Lube.
After the service, we notice that one of the headlights is misaligned. We are sure it was not like this before the service.
We are very happy with the car, but obviously we are unhappy with your dealership's service. We were waited on hand-and-foot before the sale, but afterward we have been ignored. We will not return to your dealership. I'd suggest these improvements:
- Don't overbook the service department.
- When a customer makes an appointment for Saturday, make it clear that services are limited to oil changes only.
- When customers call, ensure that someone who can help them talks to them immediately or returns the calls.
- Don't penalize customers who accept the offer of a loaner vehicle.
- Don't brag about your service.
Wednesday, December 03, 2008
The Ultimate To-Do List Application for iPhone
I've decided to write a to-do list app for iPhone.
"But Kris," you say, "there are already 837 to-do list apps in the App Store. How can you compete with those? How will yours be different?"
Well, I haven't tried all 837 to-do lists in the App Store, but I've tried several, and I haven't liked any of them. So I'm going to put my programming superpowers to good use, and create the Perfect To-Do List application for me.
So, how will my app be different from the other 837? Here's my manifesto:
Simplicity and Efficiency
The problem I have with all the to-do apps I've seen is that they are too complicated, and require too many steps to do the things I want to do. All I want is to keep lists of items and check them off. Adding a new item will require me to simply tap an Add button, type a couple of words, and tap a Done button. I don't want to prioritize items, categorize them, specify due dates, set their fonts and colors, or align them with my personal vision statement. I don't want to sync with Outlook or iCal or OmniFocus. I don't need to do everything the Getting Things Done way.
With the tap of a button, I will be able to re-sort the list so that unchecked items are at the top.
With the tap of a button, I will be able to delete all checked-off items.
A List of Lists
The app won't just be a single to-do list. I will have a list of checklists, so in addition to a to-do list, I'll be able to keep meeting agendas, my grocery list, my Christmas shopping list, my Christmas card list, travel preparation steps, and every other list in this one application.
But I'm not going to have sublists. Two levels is it. I'm not creating an outliner.
I'll be able to save any list as a template. Later, I can create new lists by copying the templates. This is useful for recurring tasks, like grocery lists.
I will be able to send or receive lists from other users of my app. The particular use case I want to support is allowing my wife to make a grocery list and send it to me so I can pick things up on the way home.
Scratching My Own Itch
This will be my app, suited to my needs and usage patterns. I'll make it available through the App Store, but I will be my own most important customer. People who don't like my app can try out the other 837.
(By the way, the number 837 above is made-up. I have no idea how many to-do list apps there really are in the App Store. But I know the number is pretty big.)