A Thought on Nodes within a System
Last week I gave a tech talk on the architecture of the mobile website I have been building out for the past six months. At the end of the presentation, I was asked what the key takeaway would be. This is a prettied up version of my answer:
"The key takeaway is to think of your running application as one node connected to a greater system, and to define your connections to all other parts of the system in configuration files (or via commmand line arguments).
"A connection could be a third party API that you pull information from (such as Twitter) or an analytics package that you include in your application (such as Google Analytics) or a database connection string or even URLs for other sites in your company's porfolio. All of these are parts of the larger system that when linked together form the service that your application provides the entry point to.
"Defining connections in configuration files makes changing and testing the system as a whole managable. There is much to be said for being able to remove, reconnect, and replace any of the connections on application startup easily. You gain a high level of control over overall system state. You can test against different versions of connected services at will. You can remove connections entirely and see if your application falls to the ground or ideally limps along boldly with determination.
"As software engineers we tend to obsess about how our functionality is coupled within code. Extending that same obsession to the connections this application has to other parts of the greater system has made my life easier and turned this application into something of a cockroach. I'm pretty sure that by the end of the year it will be able to survive a nuclear attack just as easily."