2008-10-31

Initial tough

How to start it? After so many years extending the live of a mature software. It's now time for me to take all I learned and to applied it to a brand new generation of software. In this blog, I will keep track of the steps I'm doing to make it append. I want to document the best practice and standard to use. In the process, I want to read about each aspect, make some prototypes and summarize my conclusion.

I don't know yet all the detail I will need, but I want to follow some base principles.

  1. Simplicity
  2. Maintainability
  3. Scalability

Simplicity

I believe that when something is simple, the chance of doing it wrong is small. And when it's complex, the chance of doing it wrong is growing. So I'm looking for simplicity for the user and for the the implementation of the technology.

Maintainability

No matter how complete the initial release will be, this will be only the first step in the life of the software. I have learned the lesson the hard way with an enormous initial technical debt. This is one point I will try to illustrate with example I lived.

Scalability

I'm not a big fan of over doing the architecture process to be able to scale. I believe in delivering something working now is more important than the perfect thing in 6 months. When you have enough customers with the initial project, you will have the resources to make it scale. It's far better than having no customer at all because the project is already stretch to it's limit trying to have it perfect. However, I will be a fool to write a software with no possibility to upscale. So, I want to leave place for improvement without doing them right away.

Technology choice

I have always worked with Windows. Programming with C++ / MFC, then with c# and the .Net Framework. I have a good experience with Windows application and some with smaller project with classic ASP and ASP.NET. I have also worked with MS SQL Server. With all this experience of Microsoft technologies it feel natural to continue this path for the next project.

From the current technologies available from Microsoft, I have chose ASP.NET MVC.

  • Web model is easier to deploy than Windows application.
  • I feel that the architecture of Model View Controller is more stuctured and will beter suit the need for a comercial software.
  • RESTful application seem simpler
  • Without session state to maintain, it let more place for scalibility
  • It's the new thing ;-) It give extra motivation point...
What I will look for
  • layer separation
  • each layer role
  • naming convention
  • Data access
  • Internationalization
  • Exception handling
  • Unit test
  • etc.