When I was younger, like in my teens, I would freely spend time trying out different programming languages, frameworks, libraries, etc with much ease. I loved dabbling with different solutions to problems. Some choices would stay with me, like Object Pascal, others would not, Borland Graphics Interface. At any rate I basically had a lot of freedom to move between choices.
I carried that habit into my career as a software developer. After some time I finally realized that I can't freely work with choices when I'm part of a team. Some developers are open to new things others would rather use what they know. I can understand it either way.
Recently I needed to prototype a web interface that did basic CRUD to a set of tables. In mind to use C# for delivery I choose to prototype with Ruby on Rails. In one afternoon I was able to build the prototype (which involved 6 tables and a couple of relationships) including picking up some basic Ruby. I felt the most productive than any other language or framework! And the end result code was highly readable and maintainable.
But my team works with ASP.NET not Rails and I don't feel secure enough to push Rails. I will probably end up falling back on ASP.NET after the prototype is selected but it sure means extra work.
So lately I've been thinking about when should you push a new environment. I don't have a formula for the answer but I do have a list of things to think about:
- What will your current or future team think about it? Are they open to new environments? What about management?
- Does the new environment mesh well with any existing technology? Are you pushing a linux server in an active directory shop?
- What kind of support does the new environment have when you get stuck? Newsgroups, books, articles, blogs all help when you're learning or when you get stuck.
- Will the new environment be around long enough for your applications? Check out the community, see if there's strong push behind it.
- Will the new environment have pro's that out weigh the con's of your current environment? Classic ASP to Ruby on Rails does but would Classic ASP to PHP have the same leap?
- Does the new environment cover your project's needs? Does the environment support the database server natively? Do you need to render PDFs? Do you really want to generate reports by hand using HTML and script or would a report package make more sense?
- Is the technology solid? Check out the dependencies? Does it carry over a lot of legacy components?
- What is the risk factor? What would happen if your team gets 1/2 way through and decides that the new environment is not suitable?
In a current venture to upgrade an Access project to a multitier platform I selected MySql as the database server of choice because I was able to answer a plus for each of those questions. I felt really secure in pushing that choice. So far the team is really happy and we all seem to be on the same page.
I'll see where my Rails prototypes goes in the mean time =)