I find it amusing that even though Peter and I have been on very different schedules as of late (and thus haven't run into each other around the house much) his latest blog entry captured very much what I've been focused on as of late.
I have been neglecting regular updates to my blog for the last month or so because I've been coming home completely mentally fried. At work, I have been struggling with many of the questions that Peter described in his blog for a particularly difficult feature in the product I'm currently working on. I seriously spent a few days just trying to figure out what a user would expect to see and be able to do with this one particular facet of our product. I then spent two weeks brainstorming solutions with everyone else on the team to come up with a list of six or seven options. Next, the dev team went through and "costed" (calculated how long a feature would take to get working) each option. Finally, we went through and listed all of the side-effects each option had. After about a month total of data collection and analysis, it became fairly clear which options were feasible (note, we didn't have all the data like test costs, or localization hit. those costs weren't necessary to see which options were expensive and which weren't).
Late last week, we met with the other teams that would be affected by the option picked and made a decision. We picked "Option 1". Option 1 was "Cut the Feature". You see, we're closing in on Beta2 and many of best options just couldn't be considered because there isn't enough time to get all of the existing work done and add this new work on top. Sometimes it can be very frustrating to watch a feature fall on the floor because we miscalculated something(s) in the beginning and don't have time to go back to fix it correctly. Other times it's just frustrating trying to figure out what to do with such problematic features and cutting them is something of a relief even if you now have to worry that you've cut too deep. Ultimately, I think cutting this particular feature was the right thing to do but I do wonder how users will interact differently with the product without this feature.
I obviously can't go into details about the exact feature here (otherwise I would have already) but I wish I could. I often wish that my day job project could operate like my Open Source project. The feedback loop is so much tighter when the community is built into the project. Maybe after we ship I'll discuss it, but I doubt it.
Finally, first version projects (like what I'm working on) are notoriously difficult to wander through because quite often you're building something for an audience (community?) that doesn't exist yet. Each feature is vetted against what you imagine your customers are going to need because your customers don't exist yet. In my humble opinion, that is why everyone says you should wait for the third version of a product. It usually takes a couple versions of customer feedback to be incorporated into the product before users find the products truly usable. This is yet another example of why I enjoy working on my Open Source project; the feedback loop is much tighter.
On a brighter note, it looks like all of this struggling will be behind me in the next week or two. Then I'll be off to Italy for a week. When I get back from holiday, I'll actually get back to write code again. Yes, for the last few months I've been of working on a non-coding feature. I can't tell you how much I am looking forward to writing code again. I always thought I could be a PM (I know I'd be a lousy Tester) but now I know better. I'm a Developer. I write code.