Introduced in the 2009 edition, this year’s
Microsoft Developer Days is again offering wildcard sessions to anyone who posted a proposal on their
Facebook site. Obviously I posted a proposal as well, and partly thanks to the community and partly because there were only eight proposals, my proposal is now available on the DevDays site for voting. Support me by going over
here and
voting for my session.
What is it?
A formal review of all code and artifacts related to a requirement or task by another person than the original developer. Rework because of review comments must be revalidated afterwards.
Why would you do that?
- Because the average developer
- introduces 10-50 bugs per 1000 lines of code (at least, according to Moore’s Law)
- is not always aware of the potential pitfalls of particular code constructs (hence coding guidelines)
- is not always up to date with all available constructs in a new C# version
- does not have full awareness of all the out-of-box solutions offered by the .NET Framework, open-source sites or commercial vendors
- often does not realize that an ingenious and elegant solution may be too complex to understand by others.
- sometimes loses sight of the overall solution and the initial goal when working on a some piece of code too long.
- Because it helps improve the awareness of, and the understanding behind your company’s coding guidelines.
Notice that the amount of necessary review work can be reduced by introducing the Pair Programming practice.
What’s the bare minimum you need to do?
- Find issues in the interpretation of the functional requirements.
- To verify compliance against your coding guidelines or standards.
- If you don’t have one, consider the Aviva Solutions C# 3.0 Coding Guidelines. Notice that these are an extension to Visual Studio’s Code Analysis, so the latter is still worthwhile.
- To find any loose ends such as TODOs or incomplete code. Resharper 4.5 includes a nice tool window that quickly shows an overview of all TODOs in your current solution. Resharper 5.0 even includes solution-wide analysis that finds dead code.
- To ensure that all code is easy to read and understand. For instance, all members and types have a comprehensive name and non-trivial code is annotated with code comments.
- To ensure that each and every check-in improves the code base, rather than introducing software rot.
What’s the usual thing to do?
- To ensure that all naming of code elements matches those of the functional design, preferably using Domain Driven Design’s Ubiquitous Language.
- To check for the usual pitfalls such as God classes or methods that are way too long.
- To find any redundant code or code that is unnecessarily complex and requires refactoring.
- To find any code constructs that may put other developers on the wrong foot and therefore jeopardize future maintenance.
- To find code constructs that can be replaced with a simple call to a previously developed generic class or .NET Framework construct.
- To stimulate the use of design principles such as S.O.L.I.D. or the design patterns defined by the likes of Martin Fowler and Eric Gamma so that the overall code quality increases.
How do you do that?
- It is important to make sure that all files related to a particular piece of functionality can be easily found. Use a Check-in Policy to associate each and every change with a corresponding work item such as a Scenario, Task or Bug. Since a major change may involve multiple check-ins, especially in a larger team where multiple developers work in the same areas of your code base, Change Sets provide insufficient traceability.
- Use a logging form or something similar to review every piece of code related to a particular work item and store it on the project’s team site.
- Alternatively, copy and paste the code into Microsoft Word, and use its reviewing features to annotate the code with comments and improvements.
- Or even better, install TeamReview and its corresponding Review Response work item and add review comments directly from inside Visual Studio’s code editor, while keeping them together under the associated work item. Also check-out this poster illustrating the underlying review workflow.
The SPC 2010 event seems to have been taking place ages ago, in actual fact it was only last Monday and Tuesday. Anyway I was too busy to report on this straight away, trying to finish two stressful projects at the same time this week.In short, it was a good one. Not ground breaking, but useful because it filled some essential gaps in my knowledge and it was good to take a timeout to focus on SharePoint 2010. The running theme of every session was, “the real product has yet come out, don’t come crying back if it turned out to be different”. My guess is, looking at the SharePoint 2010 Beta, that there shouldn’t be that many surprises.
As a developer, I tried not to focus too much on the developer aspects, thinking that this will come to pass anyway. I went to an intro session and session on unit testing Sharepoint by Peli de Halleux. Here at Aviva Solutions all internal projects use TDD where possible and useful. Peli showed how he is able to make SharePoint development unit testable by using Pex and Moles. Moles allows making test stubs of any .NET code and that way might even make the file system testable. As a showcase Peli and his team made a comple Mole-d SharePoint. Recommended!
Development with Visual Studio 2010 will be fundamentally different, no more manifest.xml, feature.xml and copy/paste of GUIDS. The question is now if this is a good thing in all respects, because a session by Serge van den Oever and Mirjam van Olst showed that VS 2010 flattens out all components of your solution into separate features. Large solutions, like complete site definitions, end up completely unstructured. New opportunities for WSPbuilder!
However, the major surprise for me was the shift of focus for development to SharePoint Designer. SharePoint designer now allows you to save changes as reusable solutions, WSPs. When imported into VS2010, these could be good starting points for your development. Do not expect too much yet, the WSP import in VS 2010 seems to be messy and broken for now. Microsoft has made Designer more powerful to cater for Power Users. In absence of Power Users I think developers should not be shy and use Designer to quickly get from A to B. If the WSP import works that is. Designer failed in sessions on more than one occasion during the event.
When trying to sum up the remaining goodies of this event, Claims based Authentication is worth mentioning. Or this is at least something that caught my attention. How to finally get rid of the annoying logon popup when opening Office documents. Also a new way to cross process boundaries without having to elevate to administrator rights. Spencer Harbar pointed out the highlights, but could not really show it hands on unfortunately. Otherwise the way SharePoint 2010 will be more scalable and less restrictive in implementations showed up throughout all sessions.
On Saturday February 27th, the Dutch DotNED user group, Aviva Solutions and Oosterkamp Training & Consultancy will be hosting a full day session on software quality. The session will be mostly held by myself, but I will be accompanied by my colleagues Jonne Kats and Peter Hesseling.
Unfortunately, due to popular demand, the session was fully booked within 24 hours. But now, we are seriously considering repeating the session in the beginning of April. So if you’re still interested, go to the DotNED registration page and click the link at the bottom of the page to send us an email.
Storyotypes are stereotypes for user stories that can help to define the right scope for your user stories. You can read more about these in the article Using Storyotypes to Split Bloated XP Stories and these slides. Team Foundation Server 2010 includes a new VSTS for Agile process template closely following the Scrum practices and supporting a user story WIT. However, Storyotypes are not supported, so I decided to change the standard work item template to add that field.

You can download the modified WIT template from here. You can install them into an existing project using the witadmin.exe tool (available if you open a Visual Studio 2010 Command Prompt), but it’s much easier to use the TFS Power Tools.
As part of my many assignments, I’m compiling a bunch of best practices into a set of development guidelines for bootstrapping our internal projects using TFS. I’ve decided to share these with the community so that others may benefit from it as well. Beware that these practices are not new nor in any way invented by myself. I'm merely trying to get some good resources together in a nice compact format.
So what are my goals?
- To provide insight into the benefits of applying well known best practices on software development projects.
- To provide examples of applying those practices on new and ongoing projects and explain how to gain the most of out them.
- To help you jumpstart a new project or professionalize running projects.
And what do you gain?
The goal of these posts is to end up with a set of development practices that provide the following benefits:
- Allows you to more quickly and accurately assess the impact of new requirements.
- Promotes building well designed software that allows changing functionality with lesser risks (even during a running project).
- Promotes a consistent code-base that solves similar problems using similar solutions, everywhere.
- Strives for a functionally consistent software system. For instance, ensuring that date fields look the same all over the application).
- Attempts to prevent code duplication so that you never have to make changes at multiple locations if you change a particular piece of behavior or logic.
- Eases the effort for deploying a new release by removing as many human actions as possible.
- Provides traceability on where a particular piece of functionality has been realized technically.
- Improves the developer experience when working on an existing or shared code-base (e.g. readability, purpose and goal of a block of code).
- Provides a safety net that reduces and possible prevents the chance of running into regression problems.
- Attempts to prevent common mistakes or misinterpretations by introducing common rules and recommendations.
- Strives to a situation where each and every member of the team is aware of the project’s affairs.
- Promotes any endeavors that improve the self-education and self-organization of teams.