A Training Application

Colin and I are having lots of fun building a training application at work at the moment. We've only been at it for a week or two but we've made some decent progress. Our overall architecture (more of which later) involves a lot of different moving parts which, taken together, can obfuscate the detail and make it difficult to see what's going on. So, with that in mind, we've decided to concentrate on some of more important pieces to start with, and build a relatively simple application to demonstrate those pieces. In no particular order, that means:
  • Domain Driven Design with NHibernate
  • Building a UI with ASP.NET MVC and jQuery
  • Inversion of Control with Autofac
  • Test Driven Development with xUnit and Rhino Mocks
  • Agile Planning with Extreme Programming
So, still a number of ideas and technologies involved there but probably the bare minimum to build a decent application. We have a set of stories to do with out scenario (around job application management, candidates, interviews and so on. We've almost got to the point where we have a decent skeleton which every/most application needs - page management, users, security, basic administration and so on. We're hoping to be able to put the source out there - it's self-contained and uses SQLite for the database and NHibernate automatically generates the schema. So far, we haven't done anything super-clever, though Colin has come up with some nice code to deal with MVC Model Binders and I've got a decent page management domain model, from which we automatically generates Routes and hook up some convention-based UI (AJAX calls and so on). We've just started 4 new graduates at our company, so in a few weeks time they will get the chance to work with the application, implementing some of the stories themselves and learning the technologies and ideas involved. Having this application available is also useful for us to be able to implement a new technology or try out some different ideas without having to start from scratch every time. Phase 2, we're going to lever in a service-based approach, using technologies and ideas like WCF, REST and Mass Transit.

Another Framework?

We are purportedly constructing yet another framework for this project. However, in reality, the work we are doing is really just building upon many of the developments in the industry over the last years, giving us a solid foundation to work with. None of what we are doing is revolutionary - indeed, we are actively trying to use concepts, tools and techniques that have momentum behind them. In essence, we are setting out patterns and practices which we believe will be most likely to yield a successful project. We are following the agile practice of not building a framework or architecture in isolation, before the real work starts in earnest. Everything we code will be necessary to support actual requirements, rather than just for the sake of creating something clever. There are a few areas where we might need to innovate, particularly in places where there isn't much consensus behind the best approaches - for example, acceptance testing, behaviour-driven development, messaging and multi-tenancy. In other areas, we'll be standing on the shoulders of giants and using standard tooling, not always provided by Microsoft. These include:
  • Domain Driven Design and nHibernate
  • Service Orientation and Windows Communication Foundation
  • Enterprise Integration Patterns and Message Queuing
  • Model-View-Controller
  • Test-driven Development
  • Web Standards
  • Software Engineering Fundamentals, including Inversion of Control and Separation of Concerns
I'll talk about many of these topics, and how we are applying them (the interesting bit) over the coming weeks.

Is This Thing On?

I have kept a personal blog for a while now (although I've let it slide a bit recently) but it's about time for me to start talking about some of the development ideas that I have, if only for my own benefit, so I can look back in a few years and say "what was I thinking?". I've been a software developer for a fair length of time now and, although the adage "the more you know, the more you realise how little you actually know" holds true in my case, I've reached a position where I hold some sort of technical leadership position within my organisation. I'd like to be part of the wider development community though and I guess this blog could become the start of that. Until January this year, I worked for myself - I developed a web-based application called Mentor, which was (and still is) used by health care professionals to manage the long-term care of their patients. I guess working for myself had run it's course, really. I was doing less development and more support and sales (if you could call it that) and I decided to wrap it up and become a permanent employee again. I was lucky enough to find an organisation that was looking for someone with my skillset and I joined FNZ in early February. FNZ have a successful application which is used by financial advisers and their clients to manage their wrap accounts. We have 2 very large clients in the UK and several in New Zealand. The company started in the UK in 2005 with about 15 employees and now there are over 100, and another 100 or so in NZ. My task at FNZ is to help design and construct a development framework to move our current application, which was architected a number of years ago, before the days of .NET, into a extensible, customisable platform which can be used to serve a large number of clients and help turn FNZ into the number one provider of wrap services in the country. More or less, we know where we are going and we are about to start to work towards migrating our existing functionality into a new, modern codebase. To do this we need to focus on using solid software engineering fundamentals allied with agile development practices. I'll use this weblog to document our progress, try out some ideas for size and hopefully help a few others along the way.