Software, that you need to create software.

Let me share a secret with you. There is only a handful software, mostly free that are sufficient, enough and really more than enough for managing design and development activities of most of your java based projects. In my career spanning across the globe for more than a decade now, I have seen so many combinations of (mostly non required, pricey, and inept) supporting software, that I am compelled to write down a list of what I consider are must haves (not necessarily free, but worth the price if they are commercial).

Intended audience of this article are enterprises (people working in / for enterprises) which need an end to end holistic approach to manage software solutions. It starts from software that are used to capture the first set of requirements, to software that are used by personnel supporting the product in production. 

Capture requirements
You need a software to put down your requirements in, get others to review, provide feedback, track those feedback, and email around a lot. You need a Microsoft Office or Google docs. Personally I would rather go with Google docs as the collaboration is much much richer. Although one needs to be sensitive to the needs of the business. If you are in a domain which handles sensitive user information i.e. investment bank, Google docs might not be an option for you.
You could do with a wiki (any of the many products that are available in the market e.g. confluence). But I don't think a wiki by itself will be enough. It will need support from other tools.
On the other hand, I have seen product suites like Rational Rose, but frankly I don't think you need that level of sophistication for most of your projects.

Baseline captured requirements
You need a system to put in your requirements once they have been seen and signed off. You could do with any of the version control system i.e. Visual Source Safe. Although I must add VSS has seen bad press e.g. read this. I personally feel very comfortable with Sharepoint. However, I will reiterate, any version control system e.g. SVN  (free) will also work just fine, although there will be some bells and whistles missing.

Create an enforceable architecture
Now just to be very clear, let me explain that I am not suggesting that we create an "enforceable" as in "practical" architecture. I am suggesting that the enterprise invests in any of the tools that allows architects to create visually an architecture that the tool can later run against the source code (that developers will write later) and point out the breaks / deviations from the architecture. Unfortunately, this is not one of those items that you can get cheap or free. The software that allows you to do this are enterprise grade and demand that premium. The two such software that I know of are Structure 101 and Sonargraph.

Use tool to create a basic project structure (standard project structure and not something that someone in the team thinks to be cool)
Use Maven (free) to crate fully functional standards compliant java application skeleton, complete with unit testing, up and running in under 15 minutes. 

You could use Eclipse, IntelliJ or any of the other editors to do this for you, but trust me you are better off sticking to Maven running from command prompt at this stage of project. If Maven creates the basic program, compile and run it from command prompt, it is a standard project (minus any fancy plumbing that any editor might deem necessary) and that means you will have a much smoother time integrating with the host of other tools that I am going to mention later in this article.

Start coding
Import the running skeleton application in Eclipse (free) and start coding. Keep adding unit tests with JUnit (free). Keep a tab on the reporting coverage using Emma (free). Host web based applications in development environment in Jetty (free) and in Tomcat (free) on production environment. Get continuous integration using Jenkins (free) and get all the reports that you need on your source code on Sonar (free).

Test the code (and no I dont mean developers testing their own code and certifying it)
A bunch of testers, testing till wee hours the day before shipping, and ticking off cells in a spreadsheet, is worse kind of nightmare. If you are on the hook for delivering the software (you are a project manager, technical project lead, or any of the other dozen of titles that I keep hearing) and if you find your testing team in this scenario, give up, go home, get a good night's sleep and rewrite your CV. Seriously.

Automate. As much as you can and as early as you can. Have the automated end to end tests running every night and spit out reports every day morning. Take the reports very seriously.

As an enterprise, please invest in something like Quality Center. Please also invest in something that can do performance testing e.g. Load Runner. Selenium (free) is a very good, but underutilized tool. Please invest in buying these tools, evangelizing their adoption, upgrading your resources to make best use of these tools. These are worth the investment.

Move to production
This is an entirely different ball game. We need at the least the following
  • A system to deploy applications in production.
  • A system to securely manage access for folks working in production. 
  • A system for end users to put in helpdesk tickets.
  • and a few more ...
I will cover this bit of the puzzle in my followup article on this topic. Till then, happy coding.

This article has been reproduced with slight modifications at http://java.dzone.com/articles/software-you-need-create


If you want to get in touch, you can look me up at Linkedin or Google + .

No comments:

Post a Comment