I’ve been working on a hobby project for the past little while, and I wanted to blog my way through it as I go. My intent is to use a lot of new technologies, agile best practices, and some trendy architecture patterns, and use the project as an example of how these various technologies and practices can be used to good effect.
The project itself is creating an application to allow my group of friends to manager our weekly Poker League. I’ve mentioned this before on my blog many years ago, it’s a project I’ve always wanted to do but never was able to find the time. My group of friends have held a weekly poker game for something like 8 years running now. We play once a week and one of my buddies keeps track of all the stats and publishes them on a website: St James Poker League. The goal is that this application would replace that website. It would also solve a couple of real problems that we have today:
- During the game we record the results by somebody writing them down on whatever scrap of paper is lying around (this is often a paper towel, or a random used envelope). Then we hope that it makes it to our stat keeper in one piece, and doesn’t get lost between the time of the game and whenever the results are entered into the website.
- I’m not sure exactly how our stat keeper updates the website, but I think it’s some combination of Excel and manually editing HTML files. And he can be pretty tardy in updating the site, sometimes a couple of months go by before we get updated stats (although when he wins the stats seem to get updated pretty quick).
In theory this application should solve both these problems by allowing any of our regulars to enter the game results live as the game is happening, or just as it finishes (there’s always a computer laying around somewhere). This eliminates the paper-towel results tracking, and gives us instant stat updates.
But lets get to the part that might have some interest for my readers. I’m sure you probably don’t care all that much how I track my weekly poker stats. I plan to implement this project using a lot of the agile practices, ALM tooling, and architecture patterns that I commonly recommend to my clients. And I plan to blog about the interesting bits as I go along. Specifically some of the things I plan to use and possibly blog about include:
- Using the new Agile Backlog Management tooling in TFS 2012 to build up a project backlog, plan our sprints, and track progress
- Using the Story Mapping technique to help organize, visualize, and plan the backlog (this an awesomely powerful technique that doesn’t get enough attention, and has poor tooling support today)
- Writing Effective Automated Tests – specifically I plan to show some examples of code I “cheated” on and did Test-After and ended up with some very ugly tests. Then I refactored the code to be more test-friendly.
- Using CodedUI test framework in VS 2012
- Setting up a TFS Build to help drive quality into your code
- Using Visual Studio Layer Diagrams to manage dependencies
- Choosing appropriate aggregate boundaries when using DDD in your domain
- How to use CQRS pattern (and Event Sourcing) while still keeping things simple
- Taking a typical Web Services app and deploying it to Azure (this is my first time doing this – exciting!)
- Using TFS Lab Management to automate your build-deploy-test process
- Using Microsoft Test Manager (MTM 2012) to manage your manual test process
- Publishing an app to the Windows Store
- Rewriting a WPF App into Metro
What I’m hoping will be the cool part of this series is that I’ll be able to discuss all of these topics in the context of an actual project and application under development (and I’ll make all the source available).