Saturday, December 27, 2008

Pramod Sadalage, has written an article on Behaviour Driven DB development. http://www.methodsandtools.com/archive/archive.php?id=78.

He writes about adding behaviour to the domain model and how that behaviour is translates into database objects, with tests. In the project I'm working on, which driven by a Web UI I use the UI behaviour to build the presenter and  through this add behaviour to the domain model. It's at the last stage that I add the persistance, through Nhibernate.

Saturday, December 27, 2008 11:20:26 AM (GMT Standard Time, UTC+00:00)  #    Comments [0]  | 
 Thursday, December 11, 2008

here is a random thought I had today.

From what I've seen, in the past 2 years, agile practices have spread among the .Net community.  The .Net framework  gives us the power to do TDD and follow other agile principles.  the community is now empowered with a rich API , so that we don't have to worry about how to build things.  We now have to worry about what we can build and how to build it better.

We have been freed from the shackles of VB and classic asp, with a good OO framework, that is getting better. You name the problem and there is a very good .Net based tool to help you solve it. You want mocking , you have Rhino Mocks, you want persistence you have NHibernate, you want testing APIs, you have Nunit, Mbunit and what not. 

The technology and tools to build better software is here, are you using it ? if not what's stopping you ?

Thursday, December 11, 2008 8:03:25 PM (GMT Standard Time, UTC+00:00)  #    Comments [0]  | 
 Wednesday, September 17, 2008

Seriously, do yourself a favour and go buy this. Keep it on your desk, have it while pairing, use it to bash sense into someone.

Clean Code: A Handbook of Agile Software Craftsmanship . There’s a pretty good review of the book here http://www.markhneedham.com/blog/2008/09/15/clean-code-book-review/

Related Posts:
Martin Fowler Talk

Wednesday, September 17, 2008 2:26:00 AM (GMT Standard Time, UTC+00:00)  #    Comments [0]  | 
 Monday, August 18, 2008

 

If you get an error with the message in the install log like;

dotnetfx35.exe failed with 0x80070643 - Fatal error during installation

It helps to run a manual cleanup of any .Net 3.5 framework installations before trying again. Use the automated cleanup tool here. Remove the .Net 3.5 version already installed. You may need to do it twice to do a complete cleanup. Then start the SP 1 setup again.

Monday, August 18, 2008 9:58:32 PM (GMT Standard Time, UTC+00:00)  #    Comments [0]  | 
 Sunday, August 17, 2008

Wordle tag cloud for my blog. Nifty

image

Sunday, August 17, 2008 7:30:17 PM (GMT Standard Time, UTC+00:00)  #    Comments [0]  | 

When to make design decisions is a touchy subject when doing iterative software development.  Ever since starting to do TDD, I’ve seen how TDD can drive the design. I’ve also seen how bad it is when a team gets caught in the trap of doing a big up front design. Two bits of advice that have helped me a lot in my current project are;

Doing the simplest thing that could possibly work

Defer decisions till the last possible moment.

What I’m still trying to learn  is;

What is the simplest thing that could work, but doesn’t increase the cost of change later. What is the simplest thing I could do, but still gives me a foundation to build upon ?

How long can I defer a decision ? How do I avoid leaving a decision till too late ?

A panel discussion led by Martin Fowler sheds some light on this. You can watch it here, and it is a must see. The panel talks about  these two topics and their experiences.

What I gleaned from this is , doing the simplest thing does not mean doing the stupidest thing. Doing the simplest thing possible is under the constraints of proper separation of concerns, encapsulation and having tests to cover what is written.

Doing the simplest thing does not mean you can dump your business logic, persistance and presentation logic all in the code behind file of an ASP .Net page. Keep doing the simplest thing possible by using existing design patterns that reduce the cost of change later. The simplest thing is not an excuse for writing bad code. Having proper separation of concerns in the design ensures that changes can be made in  the simplest thing that was done earlier without adversely affecting the rest of the system. 

The domain model should not be aware of the persistance or presentation logic. Design decisions don’t affect the domain model design as frequently as other parts of the system. The domain model reflects the business and the decisions are usually made long before the project is begun.

Doing the simplest thing that could possibly work usually means, how to persist a certain part of the domain model ? how to present domain model data ? and how to pass the data from the domain model to and from the different layers. It is how to implement a certain business requirement in domain model code.

A key safeguard here is having tests (unit and acceptance tests ).  While doing the simplest thing possible do write good unit tests.

Martin Fowler talks about reversibility in design decisions. A good design decision is one that you can reverse and go back to the point before the decision was made. He stresses encapsulation again.  Design decisions that are encapsulated are not expensive to change. If your persistance medium is changed, this decision should not affect the rest of the system. Proper separation of concerns isolates design decisions. The panel also stresses the importance of spiking. If you have choices to make, try those choices with a scaffold or a simple prototype and explore the options. It’s much more cost effective to make a decision through spiking than to undo a choice made to production code. Again the emphasis is made on tests. Tests protect the system, they tell you how much you are likely to break. 

During the past week a colleague of mine, did a fairly big refactoring of key parts of the code. He did it in a separate branch, and made sure that all the existing tests passed and wrote new tests where needed. Impressive. His design decisions do not affect the trunk, till we are sure that we are happy with it and it hasn’t broken any part of the system.

In my current project I defer decisions till the first hint of pain of not making that decision appears. I make  the choice just about when we are starting to hurt by not making it. I keep postponing it till then.

To sum it all up;

Do the simplest thing that could possibly work, do not repeat yourself defer decisions till the last possible moment, but still do write the best code you can, and drive the design with tests.

Sunday, August 17, 2008 7:15:10 PM (GMT Standard Time, UTC+00:00)  #    Comments [0]  | 
 Friday, August 15, 2008

image

Friday, August 15, 2008 9:39:21 AM (GMT Standard Time, UTC+00:00)  #    Comments [2]  | 
 Sunday, August 10, 2008

If you live in the UK and looking to pick a new broadband provider, have a look at the performance monitoring report by the broadband information site samknows.com . The report is based on data gathered by routers attached to volunteers’ connections. My provider Be Unlimited does fairly well and is in the top 3 in terms of performance. They do have a problem with a slow DNS server, which I solved a while back by switching to OpenDNS. Overall, for £18 a month, no contract plus a static IP, its well worth the money. If you are a bandwidth hog like me its a good deal. They advertise 24Mbps, but in reality the average is around 15 – 18 Mbps. I consistently get 17 Mbps, which is pretty good.

The straight line distance to the exchange from my place is around 500m, but according to BT the actual cable length is around 2Km. This and the old wiring at my place is probably why I’m not getting anything close to 24. I’ve been able to get 7Mbps, by connecting the router directly to the BT  master socket .

Sunday, August 10, 2008 9:05:38 PM (GMT Standard Time, UTC+00:00)  #    Comments [0]  |