This past weekend was a blowout of charity coding – Ann Arbor MI, Columbus OH, and Knoxville TN all had GiveCamp teams. Nathan Blevins was the lead for Knoxville, and once again led us to a huge success. Instead of writing about our charity and how we helped them, I want to tell you how we got there. This is the making of the software sausage…
Warning: The following content may not be suitable for all readers. Reader discretion is advised.
These aren’t the projects you’re looking for…
I arrived late the first night – stuck in the office Friday – but Nathan was kind enough to hold the kick off until I arrived. I was teamed with Alan Stevens, Cicelie Caulton, and Nathan Kelly. The first bit of news – one of our projects had been pulled and replaced with a new project. Nathan had spent a good chuck of time fleshing out project details for us, but we no longer were on that project. I started reading though the project documents and went into “MediaPulse Mode” (aka the inner software consultant kicked in). The project we were given was really three projects, and two of which were a scope that couldn’t be done in a weekend. Nathan got us the contact info and we setup a conference call between the team and the charity.
It’s all about expectations
If you’ve been a software consultant, you know that expectations are everything. If you hand something they didn’t expect, you have a meltdown. Our point of contact was very easy to work with though, and realized there was only so much we could do in a weekend. We got them key items wanted from him, and went into planning.
For the GiveCamp, AgileZen was provided. While Nathan was squaring away getting us access, we began to talk CMS systems. In the 2008 GiveCamp, several companies had donated licensed solutions, but I suppose the economy clamped down on that this year. DotNetNuke was mentioned, along with several horror stories of performance issues (some I have experienced). We considered some PHP options, like WordPress or Drupal, but not being PHP natives it would be unsure if we could execute a full project in a weekend (no fault of PHP). Community Server came up, as did SiteFinity, but we couldn’t find out if the licensing was okay from their web pages. Graffiti was also mentioned, but I know it has a single admin limit in the free version so it was out. At this point I recommended Oxite, the CMS project from Microsoft based on ASP.NET MVC.
Why yes, I had a few beers, why do you ask?
Getting Oxite up and running is a feat in and of itself. The project has many dependencies, and the wonderful Microsoft Legal Team has made it so Oxite can’t include those (free, sometimes from Microsoft) dependencies in the download. Alan and Nathan K worked on getting the thing to build while I setup the database. By the end of the evening, Alan was able to build the project and checked it into source control. It was midnight, so we headed out feeling good about our progress. I didn’t get home until 2am, because I got my truck stuck in Nathan B’s driveway, but that’s not relevant.
Saturday morning we set out creating tasks in AgileZen for the project, and mocking up the site with Balsamiq. I cannot say enough great things about Balsamiq – in 30 minutes we had a solid plan and everyone was on the same page. We sent the mockups off to the charity, and Cicelie called to get approval. We even had a charity watching us work over ustream.tv and tweeting how exciting it was. The odd thing was the tweets implied we were working on their project, an animal shelter, and we started mentioning that and how it seemed odd. Then they started asking on twitter what was going on, since they were told we were their team. Web 2.0 got really awkward for us, so we snuck off camera to talk with Nathan B. The best answer I heard was that in Ann Arbor there was a board with post it notes and someone moved assignments around. Nathan forgot to look at the Ann Arbor board on his way to the Knoxville location, but we were cleared to remain on our charity.
Now that we started working with Oxite, we were starting to see it was going to take more work than initially expected. It appears one doesn’t install Oxite, then customize, but rather you customize Oxite source then install. Nothing wrong with this, but we had a tight deadline. We start running down the options from the previous night, and discovered SiteFinity would be okay for our needs – it’s not well advertised that there is a free version on the site.
Facebook API Sucks
Sorry, don’t have a witty title for this section, but it’s the truth: the Facebook API sucks. We decided to use Facebook for the events section of the website, since the charity wanted a Facebook page as well as a website. This seemed like an easy task – just pull in the event feed from Facebook, and show it on the website. I spent a few hours trying to figure out how to do this before realizing the real problem: you can’t. Facebook, I hate you even more, and I didn’t know I could.
Life is better when you share
We needed a webhost, as it looked like their current host wouldn’t run .Net or at least version 3.5. Verio had provided accounts for the GiveCamp, and we started to set one up. I noticed something odd from the start – our connection to the SQL Express database recommended integrated security. It also seemed this database lived on the same server as IIS, and many sites shared the same app pool. Remember this, it will be important later.
Getting connected to the database remotely was rough. This turned out to be something on our side of the network blocking the needed ports, but I was able to bounce off of a server in the cloud to get us working. We used the Database Publishing Wizard to dump a script of the local SiteFinity install, and I ran it on the Verio server, but SiteFinity still didn’t work. It was about 5pm Saturday, and we still didn’t have a working CMS. I drunk a full pot of coffee over the course of the day, and needed something stronger, so I tried a 5 Hour Energy shot.
5 Hour Energy Fail
About an hour later, I’m ready to fall asleep on my keyboard. I know how the 5 Hour Energy commercials talk about how much stuff they don’t put in their shot – well, they should put that stuff in because it doesn’t work. Nathan K. was able to help keep me focused and we figured out the issue with SiteFinity. Somehow the database publishing wizard only wrote 80% of the needed SQL, and our database wasn’t complete. No sweat, Nathan found a magic “rebuild all” switch in SiteFinity, and we went for that. It didn’t work.
The error was that certain objects existed in the database we needed to delete before running the rebuild all switch. This was interesting, because I had deleted everything from our database, did a select * from sys.objects to verify, and even tried selecting from the table in the error message. Something caught my eye in the error – the account reported started with “IPOOL_” and wasn’t the account we were given to connect to the database with remotely. Nathan K. was using the recommended by Verio connection string, which didn’t have a database specified.
Integrated Security + Shared App Pool = I don’t want to say.
Let’s hope the best case was we created a few extra tables in someone else’s database… worst case I don’t want to think about. Kids, don’t mix SQL Integrated Security and Shared App Pools. With our CMS working, and my 30 Minute Energy drink expiring, I headed home to sleep.
I didn’t know there was a 5am!
5am was the plan, but it was really 6am before I got going. Since Nathan B’s network had given us issue the day before, I decided to just skin the CMS from my house. Cicelie had emailed me the template from the night before, and I went to work. SiteFinity is skinned through a combination of Master Pages and ASP.NET Themes so I had no problem wiping out my ASPInsider/ASP.NET MVPness and going to work. In a few hours, I had skinned the CMS and headed of to meet up with the team.
Once we arrived, Cicelie went to work adding content, I fixed various CSS issues and setup some advanced pages like Events, and Nathan K. went to help the other team since we were pretty much ahead of plan. How the hell that happened with all the issues we had is beyond me, but it all came together quite well. There was some miscellaneous clean up, items like setting up Google Analytics, and then we were ready to show the charity.
SiteFinity Makes Us Look Awesome
Alan mentioned we should have Live Meeting accounts as MVPs and also for the local user group. Lo and behold, I had actually setup my Live Meeting access, and after getting some remote help we had an excellent connection between us and the charity to demo their new site. There were a few pieces we didn’t get the info on (like the Paypal info for a donate now button), so I showed how that could be completed. Then we got a question that could have ended badly – how to add another level of navigation.
No matter how much you plan, how great tools like Balsimiq Mockups are, there will always be something that isn’t known until you demo it for the client. Our navigation was flat, both on SiteFinity and in the design template. Nervously I showed how to add a page in SiteFinity as the child of an existing page, while wondering what the reaction was going to be to adding a subnav control, and configuring it properly. I knew the fact it didn’t hook into the main nav was going to be a question, and I didn’t have a good answer other than “I think it’s possible, but you’ll need to add it to the template and adjust the CSS” If they could do that, they wouldn’t have needed help in the GiveCamp!
Par for the course
You could look at all these issue and begin suggesting ways to improve the next GiveCamp. I’m sure there are a few things that can change, but I think these types of issues are just part of the GiveCamp. We cram an entire IT project, including budget overruns, project delays, and changing requirements into a weekend. The end is all that matters, and in the end we were able to help out a charity that needed us.
You can check out our charity and the site at Latino Family Services.