Lean Programming teaches you to eliminate wasted effort in development projects by favouring “pull” design over “push” design. This means infrastructure concerns should be only designed and built to satisfy the needs of business requirements (pulled on demand) instead of building that what you think the application will need later.
This means you should develop the system incrementally by developing vertically – by building one feature at a time instead of building the system one horizontal layer at a time. By working this way you can be sure that infrastructure development is no more that what you absolutely need.
Working horizontally you risk following:
- Not getting adequate response of what you are building (no functionality to demonstrate)
- Writing unnecessary code for a features that will not be in a built
- Building wrong code because you don’t understand business requirements, or requirements has been changed