Every time a new member joins the team, an existing member sets up a new environment, or a new version of the compiler comes along, you have to synchronize settings.
My team recently started using Workspace Mechanic, an Eclipse plug-in that allows you to save those settings in an XML file that you put under source control.
The plug-in periodically compares the workspace settings with the contents of that file. It notifies you in case of differences, and allows you to update your environment with a couple of clicks.
Towards a Frictionless Development Environment
Workspace Mechanic is a good example of a lubricant, a tool that lubricates the development process to reduce friction.
My ideal is to take this to the extreme with a Frictionless Development Environment (FDE) in which all software development activities go very smoothly.
Let’s see what we would likely need to make such an FDE a reality.
In this post, I will look at a very small example that uncovers some of the basic components of an FDE.
Example: Creating the Class Under Test
In Test-Driven Development, we start out with a test and there is no class under test yet. Eclipse has a Quick Fix to create the class, but we still have to manually invoke it and select a source folder to store it in (assuming you have different source folders for main and test code).
It would be nicer if the IDE would understand what you’re trying to do and automatically create the skeleton for the class under test for you and save it in the right place.
The crux is for the tool to understand what you are doing, or else it could easily draw the wrong conclusion and create all kinds of artifacts that you don’t want.
This kind of knowledge is highly user and potentially even project specific. It is therefore imperative that the tool collects usage data and uses that to optimize its assistance. We’re likely talking about big data here.
Given the fact that it’s expensive in terms of storage and computing power to collect and analyze these statistics, it makes sense to do this in a cloud environment.
That will also allow for quicker learning of usage patterns when working on different machines, like in the office and at home. More importantly, it allows building on usage patterns of other people.
What this example also shows, is that we’ll need many small, very focused lubricants. This makes it unlikely for one organization to provide all lubricants for an FDE that suits everybody, even for a specific language.
The only practical way of assembling an FDE is through a plug-in architecture for lubricants.
Building an FDE will be a huge effort. To realize it on the short term, we’ll probably need an open source model. No one company could put in the resource required to pull this off in even a couple of years.
The Essential Components of a Frictionless Development Environment
This small example uncovered the following building blocks for a Frictionless Development Environment:
- Cloud Computing will provide economies of scale and access from anywhere
- Big Data Analytics will discern usage patterns
- Recommendation Engines will convert usage patterns into context-aware lubricants
- A Plug-in architecture will allow different parties to contribute lubricants and usage analysis tools
- An Open Source model will allow many organizations and individuals to collaborate
What do you think?
Do you agree with the proposed components of an FDE? Did I miss something?
Please share your thoughts in the comments.