Writing code that fulfills a functionality is a very important first step in the process of developing an enterprise application, but it is only the beginning, the enterprise application is far from done...
So what else is involved in developing an enterprise application?
As it turns out there are several other aspects of development that have to be considered:
- Is the code unit tested with sufficient test coverage?
- Is the code thread safe, in the face of multiple users accessing it?
- Is the code transactional?
- Is the code secure?
- Is the code easy to debug? Is it instrumented with logging at appropriate levels?
- Does the code handle exceptions and errors?
- Is the code optimized for performance and for memory consumption?
- Is the code resilient? Can it recover, from a failure?
- Is the code easily extensible and maintainable?
- Is the code portable across deployment environments?
- Are all the configurable properties externalized and easily changed during deployment?
- Is the code able to inter-operate with legacy systems to be integrated?
Answering all the above questions to the satisfaction of the non-functional requirements, is equally important. Many developers are aware of all the above aspects of development but completely ignore them, when asked about estimates when they think they can complete a particular functionality or feature of the enterprise application under development :-(
On a side note, even when we as developers decide to write our own reusable component or framework, please take into consideration that all the above aspects need to be built into the component/framework and hence many times it makes better sense to use an opensource component which is popular used or has withstood the test of time.Don't re-invent the wheel :-)
Taking an application from developers machine to production
Taking a functionally complete application from a developers machine upto production is a long walk. Lets see some of the common things that need to be done:
- automated integration tests especially for regression testing
- scripts for automated checkout, packaging and deployment
- automated configuration of application as per environment eg. integration, qc, uat and prod
- scripts for application life cycle management - start, restart, stop, application
- scripts/tools for application database cleanup and archival
- scripts/tools for application log files cleanup and archival
- scripts/tools for monitoring application health and sending alerts
- scripts/tools for scrapping application logs for exceptions, etc and sending out alerts
- scripts/tools for performance and memory monitoring of application
- migrating existing database to new application database + testing app against migrated data
- scripts for scheduling house keeping work around the application
As can be easily seen, there is a very substantial and important component of "operations" which needs to be undertaken, for successful implementation of any application. All these activities can hardly be classified as typical coding. These need to be factored into time estimates as well as workforce planning