Jon Tavernier

Assessing Technology

Consider both functional requirements and non-functional requirements when you need to assess whether a technology will meet your team's needs or a business need.

Functional Requirements

The question you want to answer here is "can the technology perform its main job?"

Non-functional Requirements

The key question to answer here is "do I want to operate and maintain the technology?" I like to understand the things listed below when I check out a new technology.

Authentication & Authorization

  • Determine how both humans and automated process will perform authentication and authorization.

  • For humans, does the technology support your company's single-sign-on provider?

Availability

  • Know whether the application is considered highly available or what you may need to do to achieve high availability.

Company Background

  • Think twice before adopting a new, tiny company's application for an important need.

  • How long has the company existed?

  • Is the company profitable or healthy?

  • How many employees does the company have?

  • What does its roadmap look like?

Cost

  • Someone has to pay the bills! What team's budget will be used to pay for this

  • Understand how the cost works, such as per user, usage based, etc. Has that changed in the recent past?

Data In & Data Out Capabilities

  • Consider both individual entities and mass data movement.

  • Know what reporting capabilities come built-in to the application.

  • Understand how to extract data for your data warehouse.

Deployment Pipelines

  • Understand how to deploy multiple instances of the application in different environments (e.g., development, staging, and production).

  • Know how you can define instances of the technology via version control, such as Terraform.

Development Language

  • Know whether folks on your team have experience with the service's programming language.

Disaster Recovery and Backups

  • Determine how you can recover from a catastrophic failure caused by a human.

Documentation

  • The vendor should provide enough to get started and understand the application. And remember that no documentation is perfect.

Environments

  • Know whether you can run multiple instances of the application or service in a development, staging, and production environment, for example.

Infrastructure Needs

  • Understand what is needed for the application to run, such as in your own cloud provider, the company's cloud, etc.

Integration with other Services & Technologies

  • See whether any integration is offered with other popular applications and services.

Latency / Physical Location

  • Know whether you can run the technology near your other applications. Keep communication between applications is as fast as possible.

Legal Approval

  • Ensure your company's legal team reviews the service's terms or in general, understand how your company onboards new software.

Monitoring & Alerting

  • Understand how you will monitor the service and alert folks when it misbehaves.

Release Status

  • Know the technology's maturity level such as alpha, beta, or generally available.

Reliability

  • Ensure the application can handle hardware faults, how human errors can be undone, etc.

Scalability

  • Understand how the technology scales both horizontally and vertically.

  • Test how the technology behaves with more data, users, traffic, etc.

Security & Secrets Management

  • Avoid storing any connection credentials and other sensitive information in version control. Ensure you can achieve authentication by in a safe manner without exposing credentials.

Support

  • Review the company's support levels, their price, response time, and so on.

Upgrade Effort

  • Understand how upgrades are performed, who performs them, how often they are required, whether downtime is needed, etc.

Usability and Limitations

  • Know whether your resources are limited such as a max number of entities, API requests per second or day, etc.

Vendor

  • If a vendor is implementing the technology for you, know whether they have done so before.