The Devteach conference has started, During breakfast I was seeing all the legends of the .Net world. It was pretty cool to be hanging out with the likes of Roy Osherove, Jeremy Miller, Jean-Paul Boodhoo, Scott Bellware, Oren Eini, Adam Machanic, Carl Franklin, Markus Egger, and Miguel Castro! Anyways, here's a synopsis of day number 1.
I was really excited to see the Agile development track in the conference. Roy came in the room wearing a shirt that said "Geek" on the front and began the session by playing his guitar and singing the countdown to the start of the conference.
This session was a Q&A period with Roy about Agile development. Even the session was done in an Agile fashion. People spoke out questions and then the group as a whole determine the priority of the questions. The top question was about Agile Estimation practices. Just like regular software estimation the Agile way is just as tough. Instead of looking at the long term, Agile tries to estimate the length of development for single tasks and make sure those estimates are as accurate as possible. We're talking about something that will span a weeks time. The other interesting comment was how estimation should be done by everyone on the team. If I say something will take 2 days, Rahim will say it will take me 6 days, and Nicole will say it will take me 4 days. The Agile way will have us discuss our rationale and adjust our estimations until there is some sort of consensus.
There was also a shorter discussion on distributed teams. The major thing I got from that is that anyone in remote locations should be using some sort of source control. The session discussed Continuous Integration, but that may be too much for the few developers we have.
Lastly the topic on getting managers to adopt agile techniques was discussed. The main point was that in order to these techniques adopted you have to have some sort of expert as a mentor or trainer first. The ultimate goal of Agile development is higher quality code. Agile might not be as fast at first to develop under, but in the long run you gain productivity due to the quality of your code. The less time fixing bugs means more time implementing new features.
Rules for Agile Design with Jeremy Miller
The session started off with some points that I really liked. Embrace change and write code that can change. Easier said than done! The session was a good reminder of the many faults in my programming. The biggest problem is not following the "Good enough design" rule. There are times where my implementation is good enough and I should move on to the next task, but part of me always wants to make my code perfect.
A couple themes that run through Agile practices are doing small tasks one at a time. No multi-tasking which goes into the next theme which is to minimize wasted motion, meaning that the focus is on the documented task and not dilly-dallying too long on extraneous programming efforts.
In order to make Agile programming work, you need to work vertically. This is one thing that I think I do already. This means that you write your DAL, BLL and UI at the same time. The more your UI uses the BLL and the BLL uses the DAL you will see deficiencies in each layer easier than if you write the entire DAL all in one go.
RSS, Podcasting and Syndication with Carl Franklin
I had high hopes for this session but my experience with the CBC Radio 3 podcast went over and above was was discussed in this session. It was disappointing to see the code samples used a search and replace template in an ASPX page. Our RSS is outputted with an XmlTextWriter in order to guarantee correctly encoded output and and uses an HttpHandler (for website RSS) since there's no reason to load up the entire System.Web.Page class to output some XML.
One thing that I did learn in the session was that Windows Vista has what is called a Common Feeds List. This allows Windows applications to share feed data between each other. Carl also talks about a web service call Feed Burner which was really interesting because it is a full featured feed publisher. It makes sure feeds are valid before going public and has stat tracking features and a stylesheet for the feed.
Designing Highly Concurrent SQL Database Applications with Adam Machanic
This was another session where nothing was really new. Adam went over the common concurrency control solutions that I learned at school. What was interesting about the session was the he implemented pessimistic, optimistic, and multi-version concurrency control in the data model. He also demoed an application call the SQL Stress Test which might be a tool that we could use to test load issues with certain queries!
The last session of the day wasn't anything new but it's always good to hear material in spoken form rather than reading blogs and articles. Claudio put on a great presentation the highlighted all the aspects of C# 3.0 that were used to enable LINQ. These features are: Automatic properties, Type Inference, Extension methods, Lambda Expressions, Expression Trees, Object Initializers, Anonymous Types. Near the end he explained how in a 4 line LINQ expression it utilized 4 of these new features! I thought that was a pretty cool way to summarize the session. Claudio also had a great sense of humour which is best represented by this slide.