Sunday, July 28, 2013

Article 1 - Enterprise Application - The Idea and the Plan


I am about to complete 10 years of working in the IT industry and in that time I have had opportunities to perform multiple roles. I started as a developer, then module leader, then went on a lead a team as development manager at onsite, again to return to a technical role for a short span of 2 months before being forced back into a management role due to the need of the hour.

Now that I look back at my journey, I believe both these roles are equally important from anyones career perspective. While the role of a developer helps you to think logically about a situation, get into the details and nitty gritty of things before you take the most optimized/feasible path etc. the management role helps you realize that not all situations in life can be handled logically in a 0 or 1 (binary) manner. Management is all about being in that mid range rather than being at the two ends of the spectrum (0 and 1). Moreover it also helps you realize that many times we are left to take decisions in situation where we are not provided with any actionable information to help us take an informed decision. It also helped me look at things from a 10,00 feet perspective which as developers one seems to easily overlook.

I plan to share some of my personal experiences (both technical and managerial) with everyone so as to benefit the community at large, and with that aim I am starting this series of articles. Another goal, more importantly for myself, of these articles is to try and get back to coding and learn about the latest developments since I left coding about 3+ years back. I like to put it as 'get my hands dirty'. So apart from some development that I occasionally do for my desktop application Getbhavcopy, this initiative is going to be the other project that I am excited to work on.

So the plan is the following :
  • Create a web based contacts manager application
  • that supports all the CRUD operations on a persistence provider.
  • The front end would be in HTML5, which is loosely coupled with a RESTful service layer using AJAX calls to transfer JSON objects.
The application we are planning to build is not complicated in terms of functionality, and it is intentionally kept that way. The intention here is not to actually develop an application that is going to be useful in any way. Instead the focus here is to use the best practices (practical and feasible ones) that one should follow while implementing any application at an enterprise scale.

We should be taking care of the following things in due course (not in any particular order at this moment, but will be ordered as we proceed ahead)

  • Setting up your development workstation
  • Landscape (Dev, Test, Acceptance, Production)
  • Source Control Management
    • Mainline, RC branches, Dev branches
  • Release Management - 
    • Version management of final build
    • Meta-data injection during build and retrieval
  • Build Management
    • Build Configuration Management per environments (Dev, QA, Production)
    • Dependency Management
    • Automated Build and Deployment
    • Artifact Repository Management
  • Test Driven Development
  • Resource Management
    • Configuration files per environment (Dev, QA, Production)
  • Code Coverage
    • Static code analysis
  • Exception and Logging
    • Exception handling
    • Configurable at Runtime logging - no application restart required
  • Internationalization and Localization
  • Batch Processing
  • Cache Management
    • Not just from development perspective but also from a post production go live perspective.
  • Access Control 
    • Authentication
    • Authorization
  • Data Protection
    • Cryptography
    • Hack proofing - OWASP
    • Retry attack remediation - Tokens, Message digest etc.

No comments:

Post a Comment