This is first, in series of posts on how to write Better Software. The series would try to touch upon stories which would result in development of better software.
This post is about having a minimalistic development environment setup to do effective software development. As you can see in the picture we need 5 entities to begin with.
- Development machine(s)
- Version control system
- Collaboration tools
- Continuous integration server
- Test server (may be optional to start with)
Being a JAVA guy, the post would have a bias but you should be able to apply it to any environment.
Development machines – These are the machines where the software journey starts. Make sure that these are machines with which developers feel comfortable throughout the day. They should be sufficiently powered and the workspace should be ergonomic. For e.g. Agile recommends that if you are doing pair programming then the screen size should be at least 17″.
Next the IDE should have powerful plugins to do effective development. In Java world the 2 common IDEs are Eclipse and Intellij. Having the right plugins makes sure that the code that you are checking in well structured and well written. Following is a list of plugins that I would recommend for the IDE.
You can start with these and we would come to the more advanced plugins later.
Version Control System
Good code needs to be checked in somewhere. Right? Good version control systems include
When the team is working together then they need to share information. This information may be in the form of docs or better still in the form of a wiki page. I have worked in software development teams where all information related to the project was stored in a wiki. The best part of this was that all developers could now edit and maintain the information themselves without going through the documented bureaucracy. The information which could be put on the wiki could be …
- How to build the project
- Version control system location and login info
- Project description and user stories
- All other project related documentation
- FAQs etc
There are a lot of open source wikis available.
Another requirement is a place to store the issues/defects/bugs. When making a release you would want to release it with known bugs and fixed in this release numbers.
A few good ones are
Continuous Integration Server
This is one of the must haves if you want to do serious software development. These tools help integrate all the developer code as soon as it is checked in. Immediately you know whether you have broken the build or not. Gone are the days when once a week builds were done and till that time everyone was checking in code without realizing how their code works with rest of the system. With CI servers in place, as soon as you check in code, it is integrated with rest of the code via your build script which would be written in Maven or Ant. Junits are executed and a report generated stating the health of the code. Tools to look at
You would want to do a quick comparison before narrowing down on the one which suits you best.
Last but not the least you need to have a test server. I have mentioned this as an optional component to start with. However sooner than later it becomes a necessity. You might be able to integrate most of your tests to execute with the CI Server but still there are Test Engineers who would want to verify your code using automated tests. The code on the test server might also be exposed to nightly performance tests. An inherent hook that you can build into your code for performance monitoring is with the help of JAMon.
You would write your automated tests using tools like
Other Unit level tests would be using
With all these things in place you can be assured of a right start to developing better software. Remember this is the minimalistic setup that you need to start well.