Catchy title huh?? Well, I was doing some digging around today and found some fantastic things I would like to share and open for discussion.
Why are frameworks like ColdBox, Model-Glue, Mach-II, etc, important? In all reality, they are extremely important, because if they did not exist we would end up rewriting them in some shape or form. Software is all about reusability and adapting to change. Nowadays it is also about adapting faster and faster. How many developers working on tight deadlines have the time to ponder and think about all the “magical” ways they can make their components be reused in the future? Or how to really build that SES engine better than anything out there. These are great things to have, but they don’t happen often in reality. We are tasked and need to get things going fast and deliver our business. I like this quote:
And let's face it, business requirements change so quickly that by the time someone else comes along to reuse your stuff, it probably needs to be re-written anyway. By Elastic Path
I can honestly say that every project I worked before using a framework started very simple and with simple architecture. Then as requirements change and grow, more features are needed, and I get cornered into some areas of resolution:
1. I can rewrite what I have in a “get it DONE” fashion just in time for a release. This could result in buggy or hard to test code. I still have not really adapted but just expanded.
2. Download that super duper library I found and just squish into my simple architecture. Again, I am introducing things that are hard to test and could result also in new bugs of introducing a library into my environment. I have not really adapted myself to change, again, just expanded.
3. I can begin to modularize what I have, apply OO analysis and design and create a pseudo-framework that can accept new components more easily without breaking what I already have and expand it. Ok, now I start to adapt, but at what costs?
I might like number 3 but I end up creating a framework of my own or home grown frameworks tested in one environment only, by a small subset of applications and only being able to adapt to a small arena of evolution. This is where proven libraries and frameworks come into play. There is a wealth of value in these libraries as they are used world-wide, different loads, different requirements and their number one priority is how to adapt to change and make our development more efficient. Now, I won’t go into how one is better than the other, etc. Each framework delivers their own feature sets, implementations, etc, but that does not REMOVE the benefits of reusing these libraries.
I am a big proponent of reuse and open source (couldn’t you tell), and I truly believe in avoiding building anything from scratch if I can. I know there are cases when things that I need do not exist or are not built yet, and then I would consider building them. If not, reusing libraries such as ColdBox, just empower me to deliver my business needs faster, gives me a great platform to develop on, I can get help around the world, I can extend its functionality to adapt for change, and so much more.
I strongly believe in community reuse and collaboration, why reinvent the wheel so many times for so many projects just because I don’t want to use something that somebody else wrote, or because I think frameworks are just too complex to work with. This is not a good business decision that could potentially bite you in the future. Writing open source frameworks and libraries is hard work and it takes immense number of hours on research, testability, adaptability, modularity, reusability, etc. The work of framework authors is something to be valued upon and certain trust on them has to be developed. I truly admire my colleagues like Dan Wilson, Mark Mandel, Matt Woodward, Peter Ferrell, Sean Corfield, etc. I know their devotion to helping our community and at the end of the day make our community business needs better. Relying on open source professional frameworks is something engrained in so many communities like python, java, ruby, etc. The benefits really outweigh the cons.
In conclusion, this commentary arises out of certain discussions of late with some developers on why the need of reusable frameworks. I hope this can give insight into why use a framework or open source library. Again, I welcome your thoughts and opinions.