-
Notifications
You must be signed in to change notification settings - Fork 0
Spectrum Systems
Spectrum System is a trusted technology partner working with a number of large organizations, especially in the financial industry.
Spectrum System had a broad area of expertise, from legacy systems going back to mainframes (Algol and Cobol) to most modern, cutting edge open source technologies. Our development techniques, processes and practices were inspired from the latest trends in agile, devops and microservices, due to their proven effectiveness in delivering results quickly, especially in a distributed environment.
Distributed environments are the norm nowadays, not only because our employees live in different time zones, or that we use systems and services scattered across the globe in private and public clouds (data centers), but also due to the fact that our customers operate in multiple geographies and visibility into our work is paramount.
Spectrum Systems employs a number of very talented and experienced engineers on different continents. Some of our employees are internationally recognized experts in Open Standards and Open Source Software. (Hadrian is one of the authors of the WS-BPEL 2.0 specification, an expert in integration and cloud computing, public speaker and a Vice President at the Apache Software Foundation; TODO: add a few more).
Our techniques were pioneered and perfected in the open source space where some of our employees were very active over more than a decade. The open source space is by its nature highly diverse and distributed.
Our key principles are:
- shorten feedback loops at all stages
- address the problem end-to-end, starting with the execution in production and working back towards developing the necessary pieces
- encourage reuse
- use commodity technologies whenever practical
- avoid vendor lock-in
- complete visibility at all stages
-
The quality of a system is directly proportional with the quality of testing. We insist on extensive testing of the services with develop. Unit and integration tests are an integral part of our deliverables.
-
Failures and surprises are largely reduced in production if testing is performed in environments that closely match the production environment. For that reason we rely on containerization techniques and microservices architectural style for integration testing in environments from development all the way to production. This ensures high consistency in our results. We strive to automate QA as well, whose job is mostly to ensure adequate test coverage and test quality instead of manually executing tests in a different environment.
-
In addition to testing we use static analysis tools (like checkstyle and sonar) to identify potential defects in our code.
-
We complement testing and static analysis with active monitoring of our services, to provide robust, highly-available solutions. We recognize that software development is a complex activity and bugs and inefficiencies are not always easy to spot and eliminate. It is however possible to achieve extremely robust solutions by introducing enough redundancy in the architecture, doubled by monitoring services capable to detect and isolate anomalies.
Our Continuous Delivery pipeline is centered around a few top of the line, widely used products in the space.
We organize our work using Jira or Redmine. They have very useful features and extensions (such as Scrum/Kanban boards or Gantt charts) to plan and schedule work. They provide good visibility to participants into what's being achieved and what remains to be done, allowing both our employees and our customers to plan derivative work.
All code is maintained and versioned in an SCM repository. While we have experience with a few scm tools, from ClearCase to Subversion and Git, Git is by far our preferred tool because of its power and flexibility. For its technical (and social) merits, Git is currently the industry standard.
We use Jenkins for Continuous Integration. This ensures repeatable build and test results. We use Jenkins not only for automated builds of code just contributed, but also for build and delivery pipelines of downstream projects. For that reason the manual QA (both internal and on the customer side) is almost completely eliminated, the only part that's left is to ensure that the test suites are complete and correct.
In addition to automated tests we use checkstyle
and Sonar
for static analysis of our code. Our engineers routinely monitor the analysis reports and use the opportunities to correct and improve our code.
Because of the large number of projects we contribute to, we developed solutions for automated deployment of services as scale, mostly for making our testing more efficient, but also to automate the deployment of our own infrastructure. We run our services not only on local computers or network but also in a number of clouds (like AWS and GCE) and coloc datacenters (Hetzner). Based on our needs we can automatically deploy, configure and wire together within minutes services at multiple locations using devops tools like Ansible, Puppet, Chef or SaltStack using Apache Brooklyn as an orchestrator.
Finally, we use modern tools based on markdown files and git to write or generate documentation.