Friday, April 27, 2007

Mentoring

I wouldn't be where I am now if not for Peter Morrone. I began working with Peter after leaving a consulting firm where my days mostly consisted of c++ hacks, boring installers and c# bug fixes.

Peter and I set off on a mission. It seemed impossible. The deadline was an x on the calendar, less than 4 months from my start date, and even one day late was failure. The software was going to be used for broadcast graphics -- the systems would be running 24/7.

Even with a bare list of requirements, the application required the ability to be remotely controlled and have remote distribution of uncompressed high definition video assets. All these operations had to have fast response times.

On my first day, we started developing and the application grew fast, with technologies and patterns I had never used. By the due date, the application was shipped and delivered, the customer reported 2 bugs over a 3 month period.

Every morning we would get together and discuss what I was doing and what he was doing. We'd talk about designs. We'd talk about how things were going. He introduced me to design patterns and authors like Bob Martin, Scott Ambler and many others.

Peter was more than my manager, he was different than a friend.

I was the sole coder on the project, but if I was alone, the project would have failed.

Peter kept me on track, helped me find solutions, patterns and improved my designs. He trusted me.

He let me grow.

Thank you Peter.

Thursday, April 26, 2007

Vista drag and drop

Can someone please help me out?

Application A runs with medium security permissions on Vista.

Application B runs as a Browser Plugin in IE on the same machine.

IE runs with low security permissions on Vista.

Application A will not accept "drags" from application B because Vista prevents lower security applications from giving data (and potentially hurting) higher level applications. In theory this is a nice thing to do.

If you add some registry settings, A can accept "drags" from IE -- woo hoo.

Here is the problem: B sometimes starts its own "drags" and A won't accept them (even though A accepts drags that IE started)

Any ideas? (disabling protected mode does work, but is not really a solution)

Monday, April 16, 2007

Xbox broken

Again...

And I finally ordered Guitar Hero :(

Hopefully it will be back by the end of next week. Customer support was fast to respond and very helpful. Since this is our third repair, they assigned a supervisor to track its progress.

Its only been a day and I'm already experiencing withdrawal :(

Wednesday, April 11, 2007

The value of user testing

There is great value when you let your users try out your application as it evolves and allow their feedback to inspire you further.

Here's a great demonstration:
Halo 3 Documentary (I recommend downloading the HD version onto your 360 from the marketplace)

Did anyone else notice the dual monitors with multiple keyboards? Are they pairing over there?

I'm drooling over here :P

The developers responsibility

What is our responsibility as developers?

1. Build the best solution
2. Maintain visibility
3. Uncompromising ethics
4. Continuous learning and sharing

We are an engineering discipline, but at an early stage, there is much to discover, too much reinvention, vast (differing) opinions of best practices, poor adoption of quality, little understanding of our art by outsiders and too much competition and stubbornness within the community.

While, I write passionately, I have an ethical dilemma of building the best solution, while experimenting with new technology and keeping my stakeholders aware of my risk taking. How do we justify using unknown technologies to solve problems that have known solutions? How do we share our experiences with our competitors in a way that is valuable to the community? Is it possible to fulfill all my responsibilities? I think so. We're making progress, but we have a long way to go.

Thanks for the inspiration!

Thursday, April 5, 2007

Thanks for the Scrum Training

I'm a certified Scrum master; I learned the secret handshake and everything!

I highly recommend taking the class, even if you have read a lot about scrum or are working in a scrum organization. Ken had very good insights, was thoughtful in answering questions and sent me home reflecting many things.

As for my fellow classmates, I'd like to thank everyone who supported the leukemia and lymphoma society with your tardiness! For those who are curious, $47 was the total penitance; though the number of late resources was quite less -- quite a generous group :)

Slightly off topic, if you are in Boston and are looking for an Italian restaurant, you must try Giacomo's (Ken, you really missed out!). The new law that lets you bring your bottle of wine home, makes the affordable wine menu great even for the designated driver, who happened to be me.

Speaking of driving in Boston... hmm... its too late to get started on that one.

Wednesday, April 4, 2007

Scrum and the product owner

Oksana and I (do we ever do anything alone?) are in Boston for Scrum training with Ken Schwaber this week. The class is interesting; I know a lot about scrum and have been practicing (or trying to practice) it since 2003.

One thing that I kept reflecting on during the class, is the true value of the product owner.

Before Oxygen, I always lacked the single wringable neck. I met with stakeholders, had iterations, backlogs, daily meetings -- everything, but the true product owner. Most times, I would have buy in from users and developers to participate in meetings and monthly reviews, but I never had what I have at Oxygen and it was a flawed way of working.

There is a conflict of interest between the product owner and a developer. Yes, you share a goal, however, its the developers job to expose risk and estimate effort and the product owners job to evaluate the information to make decisions that will decide the fate of the project.

It wasn't until training today and working with people that didn't have the luxury of the product owner that I remembered the pain lacking one. I've been trying to write about this and I have no words...

Luckily, Ken did a few weeks ago, this is what I want to say. I really loved reading it when Ken wrote it; today I appreciated how lucky I am (once again).

Tuesday, April 3, 2007

A call to women developers

An Italian blogger, rosalba, has started a collection of blogs, articles, books, code samples and anything else development related written by women.

I think its great; if you're out there, you should let her know!

Monday, April 2, 2007

Empty Interfaces

A recent practice I've taken up is empty interfaces.

Why you ask? Generics!

I love generics, they've added a whole new world to my design, but when it comes to using a generic interface, I find it best to wrap it in another interface, even if that interface is empty.

Here are some reasons:

1. The name is longer and intellisense isn't smart enough to fill in the types -- more typing (on the keyboard) is never fun (though visual assist does guess pretty well)

2. The name does not imply its responsibilities. Sometimes the generic interface is all you need, but the type of the interface is too generic to understand its responsibilities and behaviors.

3. If you need to add something extra to the interface, it will be quite painful to replace usages with an explicit interface.

4. A generic type name is an ugly type as a string -- I can never remember how to put a generic in the application configuration.

5. Less encapsulation -- if you have a generic interface that has two types, one type is implementation specific (like its used to consume another generic interface) and one type is consumer specific, consumers need to have more knowledge about implementation than they should, just to use the interface.

Here is a reason not to:
1. FxCop -- it gives you a warning... Here is what I think -- FxCop is great at giving warnings, but thats its job, it doesn't understand context, FxCop is not a reason on its own not to do something :)