Template projects in software development
One the the big challenges in software development is reducing cost but increase the quality of product. Choosing the wrong tools, framework can cause the big problem for projects. Many software companies have the common solutions for this problem:
- Choose some common tools and framework and assign members to learn that with hope that client will request use it in future.
- Developing API library for common functionalities like security, parse text etc with hope that this library can be used in future.
If you are working in software industry, you may already know these solutions also you know the benefits of choosing these solutions: having the expert for some framework, tools that can be used in future also reduce the development cost by re-using the existing proven code. But in fact, these approaches also have the following limitations:
- There are many well-know tools and frameworks that serve for the same purposes, for example there are some couples Hibernate-iBatis (ORM), Spring-Pico (DI container), Spring-AspectJ (AOP), Ehcache-OSCache (caching), JSF RI - My faces (JSF framework), Tomahawk - Trinidad (JSF components), Facelets - Tiles (Web template), Wicket - Spring MVC - Seam (MVC web framework) etc. Choosing the appropriate tools to spend effort for research is not an easier task also we do not make sure client will use these tools, if they do not the company will lost money for researching without any re-payment.
- Common library that is developed without concern on context also lack of knowledge of API design can cause the effort of development is useless and this work can not be re-used in project.
Moreover, lacking knowledge of tools are planned to use in project can cause the cost of project can not be estimated soon. If some project needs the many open sources or standard web frameworks as Ant, Spring, Hibernate, Java Server Faces, Spring MVC, Facelets etc I am sure that team will spend a lot effort of set up the working environment also integrate for all works well together. I have spent 6 days for configuration only for the tools and framework Spring, Hibernate, Maven, JSF, Facelets, Osgi and Spring-JSF also I faced many problems of solving the version issue among JSF-RI, My faces and Apache ADF framework. I must spend a lot of time for reading books, articles, blogs also some hints on Internet to solve integration problems among these frameworks. It is hard to combine such tools of packaging. If my client's needs me provide solution within 5 days, I will fail the project!
Continue above statements, you must to choose the solution within the strict timeline and send the estimation for project, if you are not sure about your solutions the cost you propose will be high and you will fail to get project, if the cost is low you will face another problem that the development cost can not be controlled well because your team will spend time for fixing integration problems of third-party, handle the problems cause by tools etc and your team will lack time for implement product's functionalities. In web design, we have web template that provides designer the framework to build the website faster and no mistake, there are many web templates that fulfill the user's requirements and use web template is extremely useful while building a website but I see no similar thing in software development. In fact, almost products have the following components and/or optional requirements:
- Login module.
- Password reminder (web application).
- Security mechanism with roles support.
- Logging module.
- Caching.
- Unit test.
- Design base on 3-tier pattern: UI - Controller - Data access layer.
- Tracking performance.
The template project is the scheme that integrate all tools and frameworks into one workable place for the specific type of application. One example of template project is App Fuse. Let's read the following description of AppFuse project at AppFuse website
AppFuse is an application for "kickstarting" webapp development. Download, extract and execute ant new to instantly be up and running with a kick-ass Java webapp running on Tomcat/MySQL. Uses Ant, XDoclet, Spring, Hibernate (or iBATIS), JUnit, jMock, StrutsTestCase, Canoo's WebTest, Struts Menu, Display Tag Library, OSCache, JSTL and Struts (Spring MVC, WebWork, Tapestry and JSF are also options). To learn more about AppFuse, its history, goals and future, checkout AppFuse: Start Your J2EE Web Apps on java.net.
By using AppFuse, you can perform the common functionalities of one web application while you take less time of integrate such complete tools and frameworks work together. And you only need develop some talent guy to expert the template project for each kind of project not distribute effort to various tools and frameworks as the solution 1,2 I have described above. Instead of spending time for many tools and frameworks in separated way, try to combine them in one and spend your organization effort into one solution only. By choosing the template project for each type of project such as Java standalone application (Swing, Hibernate, Spring etc), Java web application (AppFuse) etc, the organization will reduce the research effort that you can advise the client they should choose a template project that meet's their needs about technology. To cover all kinds of projects, we have only the limited number of project template. They will help you increase the quality of project also reduce the effort of development. Sounds great? I will do so!
![]()