Übermensch Consulting

i t   c o n s u l t i n g   e v o l v e d

Technology

philosophy

The tenets of our approach to software development are simple:

  • Use the right tool for the job
  • Test early and often
  • Convention over configuration
  • DRY (Don't Repeat Yourself) it out

Right Tools

We subscribe to Neal Ford's notion that polyglot programming is a fundamentally better approach to software development than the old "one language to rule them all" approach. By taking great care to choose and commit to the right set of tools, you can greatly boost the productivity of your developers without sacrificing maintainability, security or the ability to hire new talent. One example of this philosophy is Google's decision to allow it's developers to code in C, Java or Python, depending on which is best suited for the job at hand. Another combination of languages we feel is greater than the sum of its parts is Java, (J)Ruby and Clojure.

Test, test, test

Good test coverage, upwards of 100%, and automated testing, preferably as part of a Continuous Integration process, is a necessity in this day and age. Automated tests give your developers the confidence to make the big changes they need to when the time comes, which allows them to factor out common code, remove dead code and, generally, keep your applications aging gracefully. This will help you extend the shelf life of your applications by avoiding many of the pitfalls that plague most of what we call "legacy" applications. And, of course, good testing increases the reliability and stability of your code and reduces your bug count and the chance of regressions.

Convention over configuration

Thankfully, the reign of the XML configuration file is nearing its conclusion. Developing well-documented conventions and sensible defaults leads to much less overhead when starting new projects and an easier time customizing that configuration later. 'Nough said!

DRY it out

Excellent tooling and powerful and expressive new languages are making it easier than ever to abstract out common code and share it in many different places. There is just no reason at this point to allow the old bug-prone copy-and-paste mentality to exist in your organization. By factoring common code out to a single place, if a bug is found in that code, or an enhancement is requested, you have one piece of code to change and, as importantly, test. It also lessens the chance that you will forget to make the change every place it's required.

Fluencies

We work with a wide range of technologies, and are happy to learn those we haven't had the pleasure of working with. Most recently, our focus has been on Java, Ruby/Rails, Clojure, SQL and AJAX. We also have extensive experience with C/C++ and PL/SQL. That said, the tenets of software development remain the same no matter what the language, platform or process: use the right tool for the job, test early and often and reduce repetition and boilerplate wherever feasible. If you need help getting your application there, we're here.

ÜberThoughts