Friday, May 1, 2009

NASA Science Case Study - Part III - Lessons Learned

Now that the site was deployed, we had a chance to sit back and look over what we had learned over the long, arduous process.


When it comes to requirements, gather them early. We didn't, in part to a customer who abhorred looking over sheaves of paper, and in part due to a creative process gone mad. Had we gathered the requirements early, I have no doubt we would have shaved a year off of the project. Instead, we never set them to paper, letting them exist in subtexts like tickets and meeting minutes. There was no guardian of the requirements to make sure things weren't getting needlessly far afield.

Also, requirements go two ways. Many times, when a developer came to an ambiguity, instead of speaking up, he/she would try to forge ahead. This only ever lead to confusion. Now, we have a rule that if you're confused in the slightest about a requirement, you speak up right away, and squawk until you get your answer. If you don't get an answer because the person with the real req in their head doesn't have time for you, it is mercilessly bumped to another release.


You need to vet the skills of your people. People lie on their resumes ruthlessly, and this cost us a lot of time. One thing I learned is that just because someone says the know CSS and Javascript on their resume does not mean they can actually construct either from scratch.

This doesn't make them bad people. We all do it, from time to time. And there's a world of difference from having a passing knowledge of a topic and having deep understanding of it, something that isn't always made clear.

Which brings us to our next lesson learned...

Training is worth the investment

Conferences. Boot camps. Classes. Getting someone in-house. It's all worth it. Our developers were trained, and it made a world of difference for us. Had we gotten everyone on the team the same amount of training, we could have shaved months off of the release schedule.

Use the community

This took us a while to learn, but now we're rabid adherents: learn to love the community. For every sticky problem you have, someone out there, who is smarter and more talented than you, has already solved it. Hell, they might have even followed some actual specifications, which is much better than duct tape in a panic.

Get on IrC. Hook into your local users groups. Join some mailing lists and get on Twitter. Learn to use the community, and learn to give back when you can.

Get your gurus

Our biggest stroke of luck was finding our CSS guru Bill. It was pure serendipity. A new guy had started, and I noticed that he had a cool figurine on his desk. I stopped by to chat, and we started sharing our love of video games and other geeky things. Then, I noticed the CSS book in his pile of design books.

"You do CSS?"

We started talking about that, and within minutes, he'd shot past my rough knowledge of CSS. He extolled its virtues and showed me some cool tricks. I excused myself, then ran to my PM to demand that we grab him.

Find your gurus and treat them well. Make sure you get them cool stuff. Make sure they have what they need to work. Make sure they have cool work that keeps them engaged. Do whatever it takes to keep them in your group.

3rd party products: Caveat Emptor

When we first started, there was the feeling that we could do 80% of the work through Plone Products. Oh, those crazy, naive days...

In truth, third party products had to be carefully vetted. Sometimes they worked well enough, but once we dug in, we found the code arcane and full of idiosyncrasies. Had the customer asked for a slight change, we would have been playing hot potato with that ticket to see who got stuck with it.

Sometimes, we'd just go in and grab what we needed, be it a CSS trick, some template neatness, or a bit of Python.

Over a private channel in IrC, Alexandar Limi said to Pydanny: 'One measure of a Plone developer's skill is their ability to evaluate what others have done.' We now take it to heart, gathering our experts to look at any product we want to bring into the site.

Untested code is broken code

We have people coming in and out of the project all the time. Having functions that sit out in the aether of the code pile that are never called are begging for people to come, pick them up, and try to use them.

Also, NASA Science is large. Some parts of it aren't seen very often by a content editor, developer, or designer. You can bet your bottom dollar, though, that there are visitors that see it many times between releases.

All code must have tests. Unused code must be stripped. Not taking the time to do either ends up costing more time and money than you ever, ever save.

State of affairs

And today, we have a happy customer, a tight develop and release schedule, happy developers, and one more open source product at NASA. This project may have run a chaotic course to its birth, but since then, we've had not only praise heaped upon us, but more calls for open source solutions.

(Part I and Part II)


Catherine Williams said...

Thanks: great three part article. Your sections on IA and usability really illustrate why it's so important to find out what users want!

retsu said...

Wow, its a great story. Do you mind if I translate these three parts into Japanese language and publish them on our regional community site?

retsu said...

I think I forgot to note my contact in the comment for the translation I submitted yesterday. My name is Takeshi Yamamoto as known as retsu. I've been working with Plone community long time and also a member of Plone Foundation. My contact is or Thank you very much for the very thoughtful vivid description.
Probably, using this comment instead of email might be inappropriate. Sorry I couldn't find your email address.

Takeshi Yamamoto

kcunning said...

@retsu: I'd be honored! I'll email you in a bit!

retsu said...

Thank you very much for acknowledgement.
They are now published at
Thanks a lot, again.
Takeshi Yamamoto a.k.a. retsu

retsu said...

I found the URL in the previous comment is truncated.
So, I moved it to the new location and write down into two lines below.

Thanks you.