Software philosophy is important than the Software itself

Today was a very special day. We had Kosuke Kawaguchi coming to our office in Akasaka, Tokyo and telling us about how to develop plug-ins for the Jenkins continuous integration system. At first I thought it would be a challenge because I did not know Jenkins from before and I thought that maybe I can't develop the plug. 2 hours later I had understood the philosophy behind Jenkins. It followed a plugin-architecture much like that of eclipse and had a couple of hundreds of Abstract classes that were fairly easy to implement and thus allowed the code to extend the functionalities. More importantly, the thing to "get" was how Jenkins was structured in a fairly straight forward interface-defined manner. In about 3-4 hours I had covered the gap from being a "n00b" to a person with a fair bit of understanding of the underlying core technologies in place. That said, I am very much impressed with the ease one can implement the plugins. No wonder there are so many plugins already on the jenkins hosted server.

Anyways, this episode taught me something. That software philosophy is much greater than the software itself. If you can connect a lot of people using using the philosophy then maybe you have a better job of reaching out to them and telling them hey this can be done this way because of something. I think philosophy has a much greater role in determining the future of software because software is not just stagnant it evolves over time and thus it needs to be backed up by philosophy. When we have that kind of a philosophy, I am sure that people will understand how to use it. That is what I am saying now this is because some of the software just pops up and then it vanishes we do not even know why they manage to live such a short life. I think it is because they do not have a philosophy associated with them and philosophies are closely related to architecture of the platform or the software in question. It may be motivated by the architecture and not completely denote the functionality of the architecture itself. And I guess plugin-based architectures are so much overlooked but they offer the most sophisticated features and customizations. People like to extend these softwares because they come with bare minimum functionality built within them but plenty of extension points to start from and start forking/pulling/merging.

This is what in my opinion moves things forward: a software philosophy more than anything else.