Tuesday, January 20, 2015

Enterprise Software & Teams

I hardly get off the feeling that software development is just an household activity, just the routine work. It is much more than this.  The potential of innovation is probably more than any other field, if we compare different fields of engineering, per se.  The software could be as small as just two lines of the code to extend already written functionality or it could be as huge as a product distributed across different geographical locations, on different data centres, integrated with multiple systems hosted on various platforms, and last but not the least, a huge team handling the operations effectively and efficiently without hampering the business continuity.

I started using few good tools to enhance my experience working on microcomputer softwares.  The typical software development may include the usage of the following tools to improve the developer's experience working on the product. Let's get into the details of these tools.

  1. Integrated Development Environment (IDE) :  It’s a tool that helps us to create our product ecosystem.  If you are a windows operating system fan then Microsoft Visual Studio.NET would be the good choice.  IDE helps you to work on the product seamlessly. You can navigate to the files, modify the files, build the product, get the binaries, deploy to the application server like IIS, and many more.  I am not the linux fan hence I do not know more about linux development tools.
  2. IDE Extensions : These are the small plugins that enhances the features of the IDE.  These are written to automate minor and basic activities that the developer of the product uses in his daily lives. The extensions helps us to work on the product while reducing the chances of the errors and failures. These extensions can generate a lot of code for you with just a mouse click.
  3. Servers :  I use the build server, application server, and database server while working on the product. These servers helps me to distribute my application load across various machine boundaries thereby giving me the flexibility to change/upgrade the product.  Sometimes I use FTP server to upload my product deployment binaries.
  4. Cloud Storage :  I use the cloud storage for storing my content of the product.  The content, essentially, means that I am storing all the static resources over cloud.  It is more economical for me to go with this option because there are every chances that my application may grow over the period of time and migrating to cloud looks more convenient for me to maintain my product 24x7
  5. Profilers :  I prefer the profilers to profile my product. It gives us the ability to find if there are any bottlenecks or memory overflow while running the applications. These are very matured tools and it is a great feeling working with them.  It gives us the advantage of finding the bottlenecks at the very early stage and can help us to deploy high quality production build.
  6. Emulators :  These are used to simulate the environment that is separate from the standard computer device.  e.g. it could be a tablet or phone, it could be a ATM kiosk, or it could be as complex as a flight cockpit.
  7. Messenger & Mail client : These are helper tools, though not mandatory, to stay in touch with your office friends!


The tools form a great portion of what we invest in the product development.  Apart from that, we have teams!

The software teams can be defined as the group of highly skilled and educated members that can cater the good value to the product. Just like team is very important for the product development, so do its composition.  The team is said to be healthy when all the skills required to execute the product is present within the team and they have a good rapport amongst each other. The concept of the back-up teams is also a good idea. The purpose of the back-up team is to provide their service in case the main team is not be able to hit the bull's-eye.  The team can be distributed as well as co-located based on the requirements.  The communication channel is also an important aspect of the team and so do their recreation activities within office premises.  The motto of the team is to grow individually as well as a group, personally as well as professionally.

The process to execute the software development and maintenance is another good aspect to look at.  Generally, softwares are developed and maintained in small chunks and hence the feature definition keeps changing.  The prototyping of the product can be easily done and it can be evolved over the period of time to release a fully functional product. The process needs to be more agile in the true sense. The agility is required to decrease the time to market and total cost of the ownership as well as making the teams to actively handle the change requests quite faster than they ever did before.  The team gets the good understanding of their partner's business and their prospective growth while working closely with them.

Since we have a human factor involved, it becomes very important for us to tackle their growth and development.  Good recreation activities, hangout time, hobbies time is a good way to relax the team off their work. It is an individual choice to take the decision about their recreation.  It's all about good time spent together, even though it is only for the few moments!


There are lot of changes we see around us and software industry is no exception to it.  We see the range of the tools available that can make the life of the developer's easy and we can certainly opt for a valid license copy.  At the same time, the standard of the education has also been increased so the industry can reap the talent of fresh engineers who has the capabilities and interest to build their career in the field of the softwares.  More great stuffs are yet to come and we should be very well prepared for it!