The CodeCountdown ended and let me tell you, it was exciting from the beginning to the end. I will try my best to cover all of the important aspects.
The Background
I wrote a brief description of the project and the concept in a previous blog. To get the down low on what the idea behind the code countdown is read my previous blog
The Team
David Silverlight(Me) - Project Manager and Developer
Shawn Weisfeld - Lead Developer
Scott Klueppel - Developer
Brady Merkel- Graphic Designer
Vinay Ahuja - Developer
Dennis Bottjer - Developer
The Environment - a.k.a. The Fishbowl
The development environment was in a big room with glass wall and was very much like a fishbowl. Shawn decided to hang a "Don't feed the programmers" sign on the window. People would come by and check out what we were working on, which was displayed on the wall in front of us. It would alternate between machines a bit so people could see not only what we were building, but how we were building the application. One developer came in and actually hung out the whole time just about just to kind of check out the team in action. At one point in the day the room was quite full and it was actually a pretty fun environment. We spent a good part of the afternoon watching various " youtube" videos, which closely resembles my actual work environment.
What did we start with?
Although we did not have any code or really anything to start with at the beginning of the day, there were two things that we agreed upon prior to the beginning of the Code Countdown. We all agreed on a programming methodology and a language. Prior to the event, we agreed to build the application using C#, pure asp.net and Enterprise Blocks. We had discussed a number of other approaches such as DNN, Code Smith, one of the Starter Kit, Sharepoint, etc. In the end, we decided that if we use a tool like DNN, it would be more of a testimonial to what DNN could do rather than what asp.net could do. Who really knows what the best choice was, and many folks commented afterwards that we should have used "insert favorite tool here", but that was our decision and we are sticking to it.
Let me give you the play by play:
Timeline:
8:00 AM - I made an announcement at the keynote of what we were about to undertake. I did a quick review of what we were about to build to the audience and were we would be building it. I introduced the team and mentioned my backup plan in the event that the whole project was a failure. That's right, dark sunglasses and a fake mustache (which I still have). Now for the big question.... would we be showing off our app at the end of the day, or would I return at the end hiding behind my disguise?
8:30 AM - We were setting up our environments. Shawn, the lead developer, had the tremendous forethought to bring a router so that we could connect to his machine for sharing files and accessing his SQL 2K5. Things went pretty smoothly and the database was no problem at all, but we had a few snags in the file sharing. In the end, we got things worked out in about a half hour.
10:30 AM - By this time we managed to reach our first milestone, which was to have a very ugly but integrated framework, one of the admin data entry screens done, the membership section finished and all of the database objects created. We did not finish it exactly at 10:30, but we got enough done to give us a huge confidence boost on whether we could complete the project by deadline.
1:00 PM - By this time, we finished most of the admin screens. We also finished what we called our "RTB" form, which was a form that replaced all of their static forms with ones that were database driven. The term "RTB Form" stemmed from the admin screen used to enter this data which consisted of simply a Rich Text Box and a form text identifier. This RTB form would allow us to knock off about 6 screens from the app. They were originally 6 static forms, but became one dynamic form with a different screen type.
2:00 PM - We were "cooking with oil" as they say. We had about 90% of the app done and all of a sudden we just hit a wall. For some reason, we all just got really tired. You could just feel it. Maybe it was a lunch coma or maybe just coding in high concentration. Who knows? We only had a little bit to do. We had to knock off the Paypal screens which Scott took the reigns on. We also ran into a slight snag with Membership. For some reason, the menu should show certain options for admins and it wasn't behaving as expected. As it turned out, somebody in the audience who was watching us develop joined in and threw out some suggestions and helped us to nail it. Audience participation really helped us at this point. That was pretty cool, IMHO.
3:00 PM - At this point, we finished all of the major areas of the application. We spent the next hour cleaning it up. It worked, but let's just say that it didn't look so pretty.
We did quite a bit of cleanup and implementation of Brady's design and minor bug fixes, testing and making sure that everything worked properly.
4:30 PM - We started closing up shop. We were done! We were also very proud of ourselves at the same time. This gave us about an hour or so to chill our and get ready for the closing at which we demoed the app. The good news is that I didn't have to wear the fake mustache and sunglasses after all.
How did we pull it off?
I think that one thing that had the biggest impact was that the team ended up working really well together. There were virtually no disputes and each team member was able to just take a portion of the app and run with it. This was key because there was virtually no time factored in for having to get somebody up to speed or to solve arguments on the best approach to coding. The team just worked! It was really a beautiful thing and enforces something that I have believed for many years. A small team of experienced developers can get amazing things done. Often times the work of much larger, but less cohesive teams. We were able to minimize hardware and software issues by working on our own development machines. Those types of issues can eat up a half day. In short, it could not have gone better.
Coding in a day - Nice programming model
It is actualy amazing what you can accomplish when you "have to" finish a task by a hard deadline. It completely cuts down on feature creep, that's for sure. Having everybody in the same room, right next to each other makes for really great communication. This might be a good idea for future projects.
The Finished Project
Remember, this was not a test demo app. It is a real live app that will be published next week. I will soon be blogging about where you can see the application that we built and download all of the source code so that you can see exactly what techniques we used. The event was recorded as well, so you will also get to check out the video of it and see the team in action.