Friday, September 20, 2013

Creating a Successful Development Environment: Trial and Error

Written By Bryan Page,
Developer at Rockton Software
Originally, development was a very time consuming process requiring the use of super computers and large processing times. Technology evolution has made things much easier for developers with personal computers. Since personal computers, the process has become more localized for a developer; you pick your favorite editor, write your code, compile it, and test it on your local machine. This has worked wonderfully for most programs and programmers for a long time, and it is still adequate for a large sector of the development community. However, once again, we are seeing applications being developed that require the use of full servers to develop, process, and test applications. In our case, we found that to be true for when we work with our business line of applications that make your work simpler and easier.

When developing for an application such as Microsoft Dynamics CRM, there are many moving pieces that need to be in place and set up in order to test code successfully. Essentially, it takes a full server configuration for each developer and tester if not a full multi-server configuration for end to end coverage. The old school thought process would be to buy each person a cheaper server that they can use to develop and test against which does still work, but this is certainly not the most productive approach out there. Setting up, maintaining and protecting each of the machines is a huge time suck for everyone involved. You now have doubled, tripled, or more the amount of machines that are most likely configured differently, breaking at times, data loss which when failure occurs, will take does the developer but probably also your IT department.

Many companies have taken to the cloud for a solution. There are many providers out there that are offering hosted servers that can allow you to set up servers that are partially preconfigured, create backups, take snapshots, etc. With most companies claiming higher than 99.98% uptimes and a multitude of pricing options—this is certainly a viable solution. This allows you to replicate your environment for each person and let them drop their own code on top of that. If a failure occurs, you can simply rebuild, redeploy, and be back up in 15-20 minutes without having to take the time to troubleshoot machine issues that may have been introduced. Since each developer would have their own environments, you still are maintaining isolation between each other, but you can assure that they are all using the same infrastructure for their development work and testing.

One thing about the cloud hosted option is that most likely behind the scenes the hosting servers will be running Microsoft’s Hyper-V. Hyper V was introduced into Windows Server 2008 as a beta and included with the Windows Server 2008 R2 as a full product. It continues to be included with the Windows Server 2012. This doesn’t help the end consumer that is attempting to get away from maintaining servers, but the big win comes with Hyper-V being introduced and packaged with Windows 8. This now gives us the ability to run hosted virtual environments directly on our local PCs. What benefits do we gain from running Virtual Environments on our local PC? Essentially, we eliminate the dependency on internet connections and guarantee developer isolation; by having machines on our workstations, we no longer have to worry about network latency causing delays or network drops. The speed increase publishing code out to our local machines versus over the internet has proven to be 2-10x as fast simply by taking internet connections out of the picture. This also eliminates the concern with developers grabbing the wrong IP and accessing the wrong server and no firewall restrictions to find ways around.

To get a personal workstation or laptop with large amounts of RAM and a solid processor capable of hosting the Host OS, as well as several virtual environments, has a higher initial investment than what you would use for a standard PC. But, from what we have found, here at Rockton Software, with the productivity increase, reliability and savings over running hosted machines, the initial investment makes up for itself quickly.

Rockton Software www.rocktonsoftware.com had been talking about creating an environment for developer isolation, but when multiple developers are working on a project together, there is also the need to combine all their work into one location or solution. Yes, you could have meetings to connect together and manually try and merge the different components, then test the project as a whole, but there is a large amount of wasted time in that approach. What seems to work best is using a good source control tool. We have found that Team Foundation Server works great to meet our needs as it integrated well with Visual Studio. This allows us to check in and lock files, merge any conflicts that may arise, track code reviews, this creates branching paths and backups the code that we have been working in giving us a sound mind that our code is safe, and that we can keep track of revisions and who made them. Similar to server situations, you can either host your own machine to act as the Team Foundation Server or find one of the many hosting companies that will host and maintain the server for you and provide you with access.

With Team Foundation Server, you are looking to centralize the machine so that everyone can gain access to it. Once the developer has pulled down the latest code, they will use the code as-is in their isolated environment. When they have completed their task, tested that it meets requirements, and successfully built the solution using their changes, then they will connect again and publish out the changes, thus, allowing other developers to see the changes. This gives you the ability to maintain developer isolation with the ability to still collaborate and team build on a project together all while working on their local PC.

We, Rockton Software, have found a combination of developer isolation and developer collaboration by combing a local Hyper-V instance and a hosted TFS solution. Looking back, I do not know that we would want to go any other route for our CRM development: Connect. Hopefully, you are able to set up in a similar way, but if not, I would suggest at least giving it a try. Once you see the benefits, I would bet that you won’t look back either!

As always, if you think you have a better way—let us hear it! We are always looking for ways to increase productivity and reliability!

2 comments:

  1. Great article and awesome content Thanks for sharing with us.
    This post really helpful for the programmers....

    ReplyDelete
  2. Thank you for sharing useful information. I'll follow them. Such a Great article..

    ReplyDelete