Domain First Programming
You have probably heard a number of people say that software development is as much an art as it is a science.
That is what makes it so hard to learn and to teach.
That is also what makes it so hard to run software development projects.
As much as we try and manage them in a similar fashion to other projects, we always come to the realization that the 'art' portion of this is what makes it so tough to quantify certain things.
Most developers mature over their career and get better at the estimation process and at quantifying how long it takes to build certain things.
But there is still a lot of room for improvement for all of us.
It is for this reason that our community is always looking at new approaches to running and managing projects.
From a development standpoint one such approach is designing software from a Model/Domain first standpoint.
You may wonder if this is just the new fad or if it has any real merit.
Well, even some of the fads have at least some merit.
As is usually the case in our industry, there is no one size fits all - every environment, project, etc is different so suitability of any approach will naturally vary.
So what does it mean to design your software with this new approach? Most developers have been trained and are used to thinking from a database first perspective.
Usually most of us start by trying to come up with the database model or schema and tweak it to no end until we feel we have it ready enough to start building software on top of.
Naturally, for smaller scale projects (think scope) this may work.
But as the scale grows you quickly come to realize this is pushing out actual programming work farther and farther out.
Which means it is also pushing out your window to build and test your software - that which will actually be seen and used by your customers.
The model first approach contends that a system is oftentimes more than just the data that will sit in the back end database.
The real value is in the behavior - all the logic that lets the users interact with that data and solve a business need or problem.
So with this approach, rather than trying to perfect the database design first - an almost impossible task - you start by writing code first.
You use this to gain feedback from your customers while you perfect the database.
That is what makes it so hard to learn and to teach.
That is also what makes it so hard to run software development projects.
As much as we try and manage them in a similar fashion to other projects, we always come to the realization that the 'art' portion of this is what makes it so tough to quantify certain things.
Most developers mature over their career and get better at the estimation process and at quantifying how long it takes to build certain things.
But there is still a lot of room for improvement for all of us.
It is for this reason that our community is always looking at new approaches to running and managing projects.
From a development standpoint one such approach is designing software from a Model/Domain first standpoint.
You may wonder if this is just the new fad or if it has any real merit.
Well, even some of the fads have at least some merit.
As is usually the case in our industry, there is no one size fits all - every environment, project, etc is different so suitability of any approach will naturally vary.
So what does it mean to design your software with this new approach? Most developers have been trained and are used to thinking from a database first perspective.
Usually most of us start by trying to come up with the database model or schema and tweak it to no end until we feel we have it ready enough to start building software on top of.
Naturally, for smaller scale projects (think scope) this may work.
But as the scale grows you quickly come to realize this is pushing out actual programming work farther and farther out.
Which means it is also pushing out your window to build and test your software - that which will actually be seen and used by your customers.
The model first approach contends that a system is oftentimes more than just the data that will sit in the back end database.
The real value is in the behavior - all the logic that lets the users interact with that data and solve a business need or problem.
So with this approach, rather than trying to perfect the database design first - an almost impossible task - you start by writing code first.
You use this to gain feedback from your customers while you perfect the database.
Source...