Software development is an interesting process
Once you've identified what needs to be developed there's typically some aspect that you haven't dealt with before. Here are some examples:
- a data type in the persistence layer (e.g. GIS Shapefile data)
- an unfamiliar MVC framework (e.g. moving from Struts to Spring MVC)
- a different JDBC connection pooling implementation
- Grails and Groovy instead of java with Spring and Hibernate
The decision to use the unfamiliar has been made with good reasons, it's your job to get stuck in and make it all work.
The approach that I like to take in these types of situations is to isolate each unfamiliar component and have a scratch project where I can try things out quickly and without effecting my development codebase.
With a testing environment in place, I can try out some distinctive characteristics that the application requires.
An example: Loading in some GIS data
This is the sort of thing that you expect to be trivial, after all the product has extensive documentation and is in use in hundreds, if not thousands, of organisations worldwide.
Underestimating the importance of this aspect of a project cost me a weekend researching and installing GIS libraries into PostgreSQL a few years back. Our team developed on Windows workstations, and intended to deploy the finished product onto a Linux server (Debian, in case you're interested). Sure enough, when I tried deploying to a Linux staging server the core of the system that we had been working on for several weeks failed to even initialise.
This was a case of what I like to call, "You don't know what you don't know". We knew what we wanted to produce, we knew what API to use to produce it, but we didn't know that the implementation we had based our GIS manipulation on would not work under Linux.
Fortunately the project schedule had been planned (by yours truly) to get the GIS code in place early on, so apart from my lost weekend the development continued and delivered on time and on budget.
The client subsequently commissioned me to use the same technology for another project, which was an interesting exercise in reusing code originally intended as a "one off". Both sites are still up and running.