The new gig I started in December as the company's technical architect ("technical" to make the distinction that it's not "information architect") has been an interesting experience for me thus far. My experience at Insurance.com was excellent in so many ways, because the processes were entirely solid and my peers were rock stars without the ego. Getting laid-off from there sucked, but it also presented an opportunity to find something where I could lead processes and have that "enterprise" experience applied to a place that needs it.
My new employer has been primarily a creative marketing endeavor for most of its history, and app development has been a smaller part of their business. Appropriately, their processes around development, QA and deployment were a lot less structured than I was used to, so my initial goals were to mitigate risk and decrease costs in every area I could while leading the overall technical direction of new projects. As you might expect, there are a lot of cultural challenges to deal with.
But I did hit most of my goals in the first three months, including the establishment of coding standards, good source control, continuous integration, solid libraries and code reviews. I'm really happy with the way the team pulled together and bought in to what we were doing.
So what does this have to do with the title of this post? Being a largely creative agency means that people spend a lot more time thinking about how to make things functional and visually attractive. This has really influenced me a great deal, and I didn't expect that. It's like the classic comparison where people say that Windows was written by engineers for engineers (see any of Vista's copy confirm dialogs, if you need an example), while OS X was written by engineers for their grandmothers. The user experience matters. Working for a company rooted in design, I've really come to appreciate that.
No where does this become more apparent than in the various communities that surround the .NET ecosystem. We're surrounded by poorly thought out, and often ugly, implementations of all kinds of stuff. For example, in the official ASP.NET forums, you can click the button to subscribe to a thread for e-mail notifications. But here's the catch... you might not actually ever hear from the site. That's because the poorly organized user control panel has a switch to turn it off. So subscribing to a thread doesn't really subscribe you to it. There's no indication or clue that what you just did didn't actually do anything.
I think we have some incredibly awesome tools to work with in the .NET world. I mean seriously, every day I thank God for Visual Studio (not to say it doesn't have its quirks), ReSharper, anonymous types, Cruise Control .NET, and now, the MVC framework. It blows my mind that we have so much power at our finger tips to deliver really great stuff. But in the case of the poor design that I just mentioned, there are actually people who spend time being apologists for this kind of thing. They'll go as far as justify the design and chalk it up to some user issue. Are you kidding?
Yes, I can be a gear head too, but come on, my .NET brothers and sisters, we have to do better than this. We need to pay better attention to how we design our interaction with humans. I see all of this stuff built on Rails or PHP that is just so entirely slick and easy to use, and it really has nothing to do with the back end, except that the developers in those spaces seem to pay more attention to the front end design. Dependency injection is a fascinating thing to talk about with very obvious benefits, but at the end of the day, if your app is hard to use or sucks in some other way, it won't mean anything that you can manage and alter the app easily because no one is using it anyway.
The user experience matters. Stop ignoring it.