Logo
main-image-desktop
Hero Image

Application & cloud modernization services.

We help optimize, simplify, and future-proof critical business applications.

Hire Adiuvat to help you solve these problems

graph with data
Limited visibility into systems
graph with data
Systems falling over from load
graph with data
Unsatisfactory developer velocity
graph with data
At the mercy of legacy systems
Limited visibility
into systems
Systems falling over
from load
Unsatisfactory
developer velocity
At the mercy
of legacy systems
Hire Adiuvat to help you solve these problems

Services we can help with

Assessment

Learn about your systems and priorities, and provide a t-shirt-sized set of estimates for changes force ranked by impact versus cost in time and money.

Integration

New business opportunities, better visibility, etc. If you simply need a tool integrated integrated into an existing system and don’t have the bandwidth, we can take on that goal.  CICD, test proof, monitoring proof, turnkey.

Cloud Migration

Reliability, futureproofing, unlock developer velocity. From lift-and-shift to fully reimagining systems in the cloud, we can take your system into the future. Typical use cases are for maintenance cost, or more throughput, or even lower latency.

Break up the Monolith

Faster developer velocity and more features. It’s extremely common for the first few versions of the product to make sense built as a monolith, but as it scales it hits a wall of productivity and throughput.  We will federate your monolith into a service-oriented architecture.

Containerization

Typically legacy apps have unique environmental requirements, and containers are the simplest answer to this problem that translates extremely painlessly into the cloud.

On-going Support

Before, during, and after development and rollout, we are there to continue to support the application and when the need arises, continue to modify the application to improve efficiency, address changes in the business or workflow, or implement newer technologies to improve the user experience.

Assessment

Learn about your systems and priorities, and provide a t-shirt-sized set of estimates for changes force ranked by impact versus cost in time and money.

Integration

New business opportunities, better visibility, etc. If you simply need a tool integrated into an existing system and don’t have the bandwidth, we can take on that goal.  CICD, test proof, monitoring proof, turnkey.

Cloud Migration

Reliability, futureproofing, unlock developer velocity. From lift-and-shift to fully reimagining systems in the cloud, we can take your system into the future. Typical use cases are for maintenance cost, or more throughput, or even lower latency.

Break up the Monolith

Faster developer velocity and more features. It’s extremely common for the first few versions of the product to make sense built as a monolith, but as it scales it hits a wall of productivity and throughput.  We will federate your monolith into a service-oriented architecture.

Containerization

Typically legacy apps have unique environmental requirements, and containers are the simplest answer to this problem that translates extremely painlessly into the cloud.

On-going Support

Before, during, and after development and rollout, we are there to continue to support the application and when the need arises, continue to modify the application to improve efficiency, address changes in the business or workflow, or implement newer technologies to improve the user experience.

Why choose us?

01
Relentless focus on your business goals (tech is a tool, not a religion).
02
Deep systems experience across many domains.
03
Scientific approach
(code proves it works, systems prove they are up).
04
Engineering management expertise so you can focus on your other priorities.
05
Buck-stops-here mentality, old-fashioned personal responsibility.
06
Small teams for cost and time efficiency.

Common migration paths

Local to Cloud
Windows
to
Containerized Linux
Lift 'n Shift
App to App
Visual Basic
to
C#
C/C++
to
C#
Python
Golang
Bottlenecked Data to
Bigger Data
Local SQL
to
NoSQL
Streaming
Distributed SQL
Bottlenecked System to Distributed System
Monolith
to
Service-Oriented Architecture (micro or not)
Cloud Transformation
Manual
Scripted
to
Terraform
CloudFormation
ResourceManager
Single cloud
to
Multi-cloud
SysAdmins
to
DevOps
NoOps
Onprem
to
Containerized apps

Technology expertise

OS
Linux
ubuntu
alpinelinux-logo
redhat
windows
Backend Tech
docker
terraform
aws
Kafka
redpanda
confluent
Data Processing
spark
flink
databricks
snowlake
Database
mondodb
redis
postgresql
mysql
API management
kong
Mask group
tyk
Clouds
aws-cloud
azure
google cloud
Languages

Legacy software
modernization process

01
icon

Discovery

Understand your problem, prove that to you, and flesh out how we can help, including directing you to other experts if that's right!
02
icon

Planning

Deep dive and force rank of opportunities within the scope of the problem. Initial architecture diagrams and initial high-level design review to firmly settle the project.
03
icon

Modernization

Changes to existing systems or building replacement systems and building the proofs that they deliver the promised value. Iteration until the goal is achieved!
04
icon

Deployment

Getting into production safe and sound, and iterating alerting/monitoring until you are well in control of the situation.
05
icon

Support / Maintenance

Normal DevOps iteration, incident management, Service-Level Agreement (SLA) fine-tuning, and generally being there for you as your needs evolve.

01

Discovery

Understand your problem, prove that to you, and flesh out how we can help, including directing you to other experts if that’s right!

02

Planning

Deep dive and force rank of opportunities within the scope of the problem. Initial architecture diagrams and initial high-level design review to firmly settle the project.

03

Modernization

Changes to existing systems or building replacement systems and building the proofs that they deliver the promised value.  Iteration until the goal is achieved!

04

Deployment

Getting into production safe and sound, and iterating alerting/monitoring until you are well in control of the situation.

05

Support / Maintenance

Normal DevOps iteration, incident management, Service-Level Agreement (SLA) fine-tuning, and generally being there for you as your needs evolve.

Your complimentary discovery includes:

1.

30-minute meet and greet

Meet the founders, talk over the high-level problem and our approach to software.

2.

60-minute initial dive

Get a map of the territory for consideration. If the mission is to assess many systems for candidate projects, go wide. If the target is already known, begin probing deeply into its architecture for pain points and opportunities.

3.

Proposal

While we'll play our understanding back to you along the way, to make sure we understand - the destination of this journey together is a short proposal including goals, technology suggestions, an estimate of time, and cost options.

Schedule your no-commitment discovery call to see if we're a good fit for each other today.

We're a growing team of backend engineers

Having built and maintained highly available systems for several companies over the last five years, in addition to over 70 combined years of software development experience. We usually field 3-5 people, but further scale is easily obtainable if your project is larger than one team.

From infrastructure-as-code to site reliability to greenfield to renovation... we span the entire space of backend problem-solving. We will take on your difficult, grungy problem and crush it. Your goals are our priorities.
jon
Jon
Principal
logan
Logan
Managing Director
DevOps
Tin
Tech Lead
Photo of Chris
Chris
Engineering Manager

We help clients who...

Are driven by their goals and dreams, and are looking to expand their team's skills and knowledge.

They should be able to speak intelligently about the things that matter to them and have an open-minded attitude toward technology.

Their company values results over details, and is open to different solutions to problems, so long as they are realistic about costs.

They understand that software is an integral part of their business process, and want to work with someone who shares this view.

They manage by objectives, not by process, and trust their technology partner to manage the strategy.

They have a large amount of data to deal with and need systems that can help them process it efficiently.

They recognize the value that the right technology can bring to their ecosystem and are looking for someone who understands the problems they face and can be an advocate for their brand.

Our Principles

01
Untested code is broken code. Unmonitored systems are probably misbehaving right now. Systems need to prove they're meeting SLA.
02
While satisfying the terms of the contract is important, satisfying the customer is more important.
03
While perception is important, reality is more important. While details matter, goals matter more.

Frequently Asked Questions

When it comes to legacy refactors, we *always* take the existing tech stack into account, and recommend upgrading only when it will actually produce ROI for the client. If you are using C# or Java, that’s probably fine. If you are using COBOL/VB6, probably not!

Our baseline tech preferences:

  • Cloud:  AWS is better than Azure is better than GCP, but all are acceptable. If you are on-prem and want to stay that way, it’s fine.
  • Containerize everything (Docker)
  • Terraform
  • Python for millisecond or above latency apps
  • Golang for microsecond latency apps
  • Postgres, MySQL, or MS SQL Server depending on client's backend
  • NoSQL (many good choices!)
  • For Kafka, we strongly recommend Redpanda on price and quality
  • For API management, if REST only we recommend Kong, for streaming data Gravitee is best in class.  If GraphQL is a primary consideration, Tyk.  Many choices!

In the real world, it’s usually a mix.  

The method we use is to write a plain English design document talking through your goals (for example, you may prefer managed services to not have to maintain as much software) and mapping those goals to technology choices.
As a general matter, we believe edges of systems (interface points) should be custom, so you can vary the technology behind the interfaces without as much pain.  That is, when a given product goes end-of-life and you must replace it, an interface will save a lot of time and money.

Also, instrumentation is best left flexible, so having firebreaks throughout the system where you can emit custom logs and other performance information allows for much more robust monitoring, alerting, and overall a better experience from the business point of view (to say nothing of the improvement in DevOps quality of life, and thus cost).

We tend to make extensive use of third-party tech by default, but contained within a matrix that is under the full control of the client, to maximize ROI while minimizing several often-overlooked forms of risk:

  • Dependency risk – will the open source module you rely on just break?
  • EOL risk – when it goes end of life, how will you keep going without interruption?
  • Security risk – will hackers insert code to that third-party open source repo and hack you?
  • Cognitive-load risk – a dog’s dinner of many different technologies raises system complexity and ultimately time and money costs.   Systems become hard to maintain, reason about, and change.

That is up to you.  We are happy to provide:

  • DevOps on-call
  • incident resolution on demand
  • training and full handoff (and your people will be delighted by the documentation we leave behind)

Whatever you want is fine with us.  We’ll make an agreement and deliver.

Bespoke – the elite companies we’ve worked for as full-time employees universally scorned faddish development approaches.  We expect team members to own goals and be their own QA departments.  However, “the SDLC” – the software development life cycle – at Adiuvat is essential:

  • Requirements Gathering (never ends, but is frontloaded per hunk of work)
  • Design – output is a document describing the unit of work
  • Design review – peers, leads, and stakeholders gather, provide feedback, and stamp or reject (includes security review)
  • Coding
  • Code review (includes security review)
  • Deployment planning
  • Deployment review (optional but encouraged)
  • Deployment and aftercare

We give engineers units of work (and responsibility) large enough to let them act like owners.  This not only ensures they grow professionally but increases efficiency over other approaches. We reject the scrum-versus-waterfall dichotomy.

Heavy user-interface projects that are customer-facing are best served by firms dedicated to that type of product development. Additionally, we do not do mobile development beyond relatively simple evolutions of existing products.

If you have a super-specialized ask, e.g. “reduce my AWS bill by $250k”, or “perform a penetration test of my website or API portal” – there are specialized firms we can recommend that will crush this for you.  We don’t need to be a middleman. However…

We have no problem acting as a general contractor if you have a multi-part project that will require competencies outside our norms, but our core organic competency is backend development, so projects we take on will naturally always contain significant backend work.