Wednesday, October 29, 2008

To-do Triage

My blog has really fallen off in frequency of content this month. Don't worry, I'm not going to sit around making excuses. The fact is, if something is important enough to you, you will make time for it, and that's why I'm finally back to writing today.

It's been an amazingly busy month, here in October. I've mentioned in previous posts the startup that I'm working on right now, and in these last few weeks it's started to grow at what is frankly a frightening rate (exciting for a founder, frightening for a software developer). I usually manage to knock out 10 or so development items in a day, but in the same time period I add 12 more to my list. This sequence is not in my favor.

From one perspective, I could say that this is horrible, as you can prove mathematically that if those two rates both stay constant, I will never catch up. However, there's another way to think about this situation (which is probably the only thing keeping my sanity together at this point).

With a list as long as mine (and growing), I have more good ideas than I have time. In a way, that's very positive, because if it was the other way around I'd probably spend most of my time working on things that were already fine the way they were. More importantly, though, I am forced to choose what I need to get working on every morning, and I think that this is where having an especially long list actually benefits you.

I used to work in an agile shop (yeah, I've done both XP and SCRUM; they're OK but I'm not going to get religious about them), and one of the things that I liked about the process was that the most important features naturally floated to the top because they were the ones the customer asked for as their biggest priority. If you ran out of time on an agile project (and you had done it right) you would by definition only have the least important features left that got unimplemented.

A similar weeding-out process occurs with my code-base every morning, because I have to do some triage to decide what's going to get worked on today. Thus, due to the number of development items I have to choose from, the feature that gets my attention for the day is never anything other than the most critical item on the list, because I know I just can't get to all of them.

Given this perspective, that seemingly unending list of items to do seems less like a cancer growing to destroy me, and more like a cornucopia, a horn-'o-plenty-of-ideas if you will. I just hope that horn doesn't get big enough to crush me. ; )

Saturday, October 18, 2008

Tip for TextMate users

This one's going to be super-short, due to me being super-busy. If you use TextMate as your code editor (which I do, and I highly recommend it), you may be familiar with the clover-shift-F command which allows you to do a global find throughout your currently open project. You may also notice the speed of this operation go way down over time. If you've got a LOT of files in your project, and you keep adding frequently, there are other solutions like using grep. However, if you are not running an explosively big project, and you notice a speed decrease over time (like me) the single best thing you can do is to delete your development.log and test.log files, which build up to become insanely long over a few months of development. Yes, it's a ridiculously simple tip, but I went from searching through my whole project in 90-120 seconds to 5-6. Big difference.


Saturday, October 4, 2008

The Right Tools

It's been a busy week in the startup world. Now that we actually have people using our product, I have more on my plate then ever as the feature requests from new users roll in. We're having demos for new clients at least once a week now, and before you know it we may actually start producing revenue. ; )

I'll tell you truthfully, my time has been mostly spent scrambling to put out fires as new issues come up. The great thing is that so far no "fire" (bug/defect whatever you want to call it) has spread beyond the first couple people who have experienced it, and they've so far all been fixed and deployed within a couple hours.

This is great for a couple reasons, the first being of course that having fewer bugs means you have a better product, but the more important part I think is that the people who experiece the problems notice that once they arise they disappear quickly, and we are in communication with them the whole time letting them know how the process is proceeding. This has given the company a very good reputation amongst the people who are using it, and I would love to attribute this success to myself, but the fact is that I happen to be using a toolbox that helps me keep abrest of everything quickly and successfully, and THAT is the primary reason things are going so well. Below, I have listed the all tools that I'm currently using that have made a significant difference to me just in the last week.

EngineYard Hosting

I know, you readers have seen me mention EngineYard often enough to believe that I'm starting my own fan-club for these guys, but the fact is they're just fantastic. Every issue I've had, major or minor, has been dealt with as soon as I report it in a friendly way, with great speed, and totally above and beyond my expectations. You just can't beat a good hosting company like them, as it takes one major concern (maintenance and troubleshooting of your production server) entirely out of your hands. Also, did I mention the friendly part? When I have a question, even a *stupid* one that I know I should probably know the answer to, they're more than happy not only to answer it quickly, but to take action on my behalf should I ask for it. Yes, they're relatively expensive in the hosting world, but it's worth cutting back else-where in your operation to have the EngineYard team taking care of you.

NewRelic Performance Monitoring

To date I've had 13 serious performance issues with this current web application. Do you know how many of them have been experienced for more than 1 day? More than 2 hours? Zero. I use NewRelic RPM to keep track of my application's performance, and because of they're great detailed information and pleasent-to-use website, I can catch most performance problems almost preemptively. I can see which controller actions are taking the longest to respond, which database queries are slowest, and a pile of valuable information that has saved me potential embarrassment time and time again.

Hoptoad Error Notification

If there's one thing you do TODAY about your production application, make it this: MAKE SURE YOU ARE BEING NOTIFIED OF PRODUCTION ERRORS. This can be a task that gets put off and off, but you don't want to be in a position of having to wait for users to report a problem before you know about it. Most production errors can be fixed before the first person even calls in about it if you can find out about it exactly at the time that it happens. HopToad has made this easy for me, and I am currently a big fan of theirs. Easy setup, wonderful web interface, and very detailed reporting. When I get notified of a problem, it's in my email, in my RSS reader, and it's detailed enough to give me a complete back trace and the number of times the problem has occurred to date. I don't need to rush to my commandline to SSH to my production app and start digging through logs. Usually I just take the parameters that hoptoad tells me the user passed into the request, and throw them verbatim into a functional test. Once that test is passing, I know the error won't happen again. As a Rails developer, If you aren't currently using them (or another exception notifier that's just as good), you have no good reason not to.

Lighthouse Ticket Tracking

Finally, it's easy to forget to do things that you don't write down. My lighthouse account keeps me focused because I log all my tickets through there, and they're super-easy to use. Admittedly, you could just use a spreadsheet on your local machine, but using Lighthouse has some added advantages. Mainly, the other members of my team can easily see what I'm currently working on, what's been finished since the last deployment, and what's next in my priority list, and they can add information to them as needed (attach files, leave comments, etc). Fairly cheap, very pleasent to use, LightHouse comes highly recommended.

So there you have it, four tools you shouldn't leave home without.

NOTE: I am not financially affiliated with any of the above services. I have no vested interest in you using their products over any other competitors. I really do just like them that much.