The following story is horrifying, yet very familiar to any professional developer.
Chris the Client: How’s the app coming along? Are we ready to release it?
Dave the Developer: Great! All the features are working perfectly. And I’ve designed these classes to be small and reusable. It’ll be easy to maintain going forward.
Chris the Client: That’s fantastic! Let’s release this version 1 to the App Store.
Dave the Developer: Awesome!
Chris the Client: We’ve got some initial feedback from our users. And we want to add this new feature, and change this to that. How long will it take?
Dave the Developer: Hmm… If we’re going to do that, I’ll need to refactor this part of the app. It’ll take maybe a week.
Chris the Client: Why? I thought you said it would be easy to maintain.
Dave the Developer: Yeah, but your proposed changes will dramatically alter the way how things are working now. It’s not that simple.
Chris the Client: Okay, do whatever it takes. We want to get this out the door as soon as possible.
Dave the Developer: I’ll do my best.
Chris the Client: Some of our users are seeing crashes when they do this. Can you fix it?
Dave the Developer: Let me take a look… Ah, I found where the problem is. It’ll take a couple days to look into fixing it.
Chris the Client: Thanks.
Dave the Developer: This bug is really tricky. But it has been fixed. And I’ve released 1.1 to the App Store.
Chris the Client: Our users are still seeing crashes when they do this. I thought you said it was fixed!?
Dave the Developer: Yes, it was fixed. I’m not sure why it’s still happening. I can take a look.
Chris the Client: Yes, please do.
Continue reading →