IT is never done. There is no end to any IT project. There is only a "release" milestone. When something is released. The iteration begins.
To be great, you must iterate. It helps if your first iteration is great, but it doesn't have to be.
Unfortunately, most of us want the first iteration to be perfect. So we load up the project with so much great stuff without regards for deadlines or costs. Then, we push the IT team to meet the deadline and budget anyhow. The result is usually anything but perfection.
My team at Geiger is nearing release our new "out of this world" order entry system. OK, it's not so out of this world at all (although we are quite excited about it). In reality, it's the next iteration of the existing (and already well liked) order entry system. The design is all new, the technology is all new, the process is similar but streamlined, and there are quite a few new features.
We left a LOT of features on the proverbial "cutting room floor" deferring many of our ideas to a future release in order to get the first release in the hands of our users. We've made sure to include some slick features, like a wearables order entry that makes ordering wearables a breeze. The enhancements will cut the order entry, training, and support time by about 1/2! Most importantly, our users will love the improved experience. Of course, part of the great experience is a reliable system which is why we are in various phases of "beta" now through release which is not until July!
When we release in July, the project isn't done. It's just the first iteration. We've built this first iteration with future changes in mind ready to constantly add features our users request.
Prior to this, we iterated the design several times. It started with a wireframe representation of how it should look. Then a designer turned the wireframe into HTML and made improvements. Then, a user experience designer further improved the UI (User Interface). Once the design was finalized, the first draft of the specification was written. It followed a similar process of iteration. This also involved adjustments to the UI. Finally, code was developed using the UI and specifications available. Developers were given the freedom to continue to make things better as they did their work. Weekly reviews, consistent with our overall SCRUM/AGILE development approach ensured that the team delivered a product that met the requirements while also allowing for real time adjustments. Essentially, each week we were iterating.
The next IT project you have, focus on getting the core features done really well. Add a few bells and whistles to make the experience great, but not so many that you can't get the product released. Then, iterate.
To be great, iterate.