Wednesday, 22 October 2014

Degrees of freedom in software

One of my current projects involves developing a new application to act as a backend setup service.

For licensing reasons this particular application cannot be deployed into our cloud environment - so I've been evaluating what options are open from various perspectives.

  • Operating System
    • Fixed to the same as other services running from the same machine.
  • Language level
    • Possibly tied to the same as existing applications - unless we can tweak chef provisioning to support multiple versions (maybe simple?).
  • Application server
    • Hopefully completely flexible, which should allow us to use the embedded approach.
  • Dependency injection framework
    • Hopefully completely flexible, although the main library dependencies are very Spring oriented.
    • Slight preference for UtterlyIdle as that matches the other components.
    • UPDATE: Due to the tight coupling of a third party library, a selection of Spring framework dependencies are bundled in the application and will be required at runtime.
  • Build system
    • Relatively flexible, but easiest with something that plays nicely with dependency management - leaning towards Gradle rather than Maven.
  • Continuous Integration and deployment
    • Need to decide between Go and Jenkins.
    • Likely to involve scp and shell scripts.
  • Monitoring and logging
    • Although this environment will have easier file system access than our cloud setup we should log to the logging service.
    • We could expose JMX profiling for monitoring of memory usage etc. on our internal monitoring infrastructure.