"There's no sense in a man picking out the worst name he can find for everything."
Dashiell Hammett, Red Harvest

On Wednesday, I attended the NH UPA presentation on focus groups. I spent a lot of the time wondering about the effect of group dynamics on end products. The immediately striking moment came no more than a half hour after the presenter said to always watch for the person who chooses to sit opposite you as they intend to challenge everything, a volunteer sat right down and played his role. Reminded me of a zillion client meetings with one of my old co-workers who had a gift for making an entire room uncomfortable before he ever opened his mouth. It was obvious from his body language he was going to argue with anything if he could be arsed to pay attention.

How does this drive design and development when the answers you get are colored by the dynamics of the group? While it works for consumer products with wide appeal, does it work for software? Does it work for consumer  products with wide appeal? Whether a focus group improves or hurts the end result compared to what a lone tinkerer would have built in their garage, it's hard to imagine the final product isn't watered-down. Large groups of stakeholders are used to define software because you can't trust developers (who are almost as literal-minded as the computers they work with), but that doesn't make gathering marketing folks, VPs, and whomever had free time around lunch on Thursday the best way to develop an application. I just can't shake the feeling so many projects get derailed by someone trying to find something to say in a meeting. It was an adjustment from high school to college, going from a place where teachers were more than ready to tell you you were wrong to tenured college professors who'd let any fool capable of raising a paw offer an answer, no matter how wrong. "Ok, run with that." Please don't.  I never saw evidence that if you let someone talk long enough they'll get around to the right answer, and that's when the problem had a definite right answer. Let someone talk long enough and they wind up talking about themselves. No matter what promises they walked in the door with, how they were going to be the voice of the front-line customer service techs, after a couple of minutes of rambling the answers are what they think.[1]

I was contacted by a company I work with about bailing out a .NET project gone South. It's written in .NET4 and the fact I never got around to installing VisualStudio 2008, much less 2010, tells you when my Microsoft Empower for ISVs subscription ran out: last week. Plus you only get two years in the program, so now I get to sign up for MAPS, which requires you to take a 10 question quiz to prove . . . you can use a search engine, I guess. The Microsoft Partner site is built like they're trying to keep you away. It opened 4 or 5 windows (IE-only, of course) all over the screen (somehow managing to throw them across two monitors-- by looking for the bottom left and right corners of my screen, I guess), two of which sat and watched me, apparently. It finally opened the test window, only to have it throw a 500 error and not even show a friendly error page suggesting anyone gave a shit. Even after I completed the test today, the link to purchase a license was broken, asking for a network login on the server. I had to discover some other click path to find a way in to the store. Maybe that's how they really test partner candidates.

I added django-axes to the resident management project I'm working on. Axes tracks failed login attempts; normally you'd use it for making sure no one's trying to break into your site. In this case, I'm more interested in seeing who isn't able to login since we're physically mailing usernames and passwords out to users and we will not have email addresses for the users until after they've signed in and updated their accounts. Even though I needed to customize it a bit to fit our needs (mainly because I'm not using the generic Django login view for reasons which might not have the greatest of justification), it was easy to fit in and customize. Given how little work it is to add, I'm making it part of my standard Django deployments going forward as it provides a level of insight into hack attempts and protection against brute force attacks that any project should have.

An "Ah, duh" moment yesterday: added a line in the deployment script on my current project to run syncdb on each update. Not exactly rocket science, not exactly the best idea ever, but it ensures the deployment server at least has all the database tables. Sounds obvious, but it's a testament to Django that I rip through small tasks fast enough I close the ticket as done without ever thinking, "Hey, I just added x new tables to the database, better make sure the server has them before anyone tries to QA."

1. If you don't recognize this tune from this graf, it's "The Snob's Waltz", an aria sung only by the rarest of divas. The song is notable for having no conclusion.


No comments yet.