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.

<h2>Functional Requirements</h2> <p>The question you want to answer here is "can the technology perform its main job?"</p> <h2>Non-functional Requirements</h2> <p>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.</p> <h3>Authentication & Authorization</h3> <ul><li><p>Determine how both humans and automated process will perform authentication and authorization.</p></li><li><p>For humans, does the technology support your company's single-sign-on provider?</p></li></ul> <h3>Availability</h3> <ul><li><p>Know whether the application is considered highly available or what you may need to do to achieve high availability.</p></li></ul> <h3>Company Background</h3> <ul><li><p>Think twice before adopting a new, tiny company's application for an important need.</p></li><li><p>How long has the company existed?</p></li><li><p>Is the company profitable or healthy?</p></li><li><p>How many employees does the company have?</p></li><li><p>What does its roadmap look like?</p></li></ul> <h3>Cost</h3> <ul><li><p>Someone has to pay the bills! What team's budget will be used to pay for this</p></li><li><p>Understand how the cost works, such as per user, usage based, etc. Has that changed in the recent past?</p></li></ul> <h3>Data In & Data Out Capabilities</h3> <ul><li><p>Consider both individual entities and mass data movement.</p></li><li><p>Know what reporting capabilities come built-in to the application.</p></li><li><p>Understand how to extract data for your data warehouse.</p></li></ul> <h3>Deployment Pipelines</h3> <ul><li><p>Understand how to deploy multiple instances of the application in different environments (e.g., development, staging, and production).</p></li><li><p>Know how you can define instances of the technology via version control, such as Terraform.</p></li></ul> <h3>Development Language</h3> <ul><li><p>Know whether folks on your team have experience with the service's programming language.</p></li></ul> <h3>Disaster Recovery and Backups</h3> <ul><li><p>Determine how you can recover from a catastrophic failure caused by a human.</p></li></ul> <h3>Documentation</h3> <ul><li><p>The vendor should provide enough to get started and understand the application. And remember that no documentation is perfect.</p></li></ul> <h3>Environments</h3> <ul><li><p>Know whether you can run multiple instances of the application or service in a development, staging, and production environment, for example.</p></li></ul> <h3>Infrastructure Needs</h3> <ul><li><p>Understand what is needed for the application to run, such as in your own cloud provider, the company's cloud, etc.</p></li></ul> <h3>Integration with other Services & Technologies</h3> <ul><li><p>See whether any integration is offered with other popular applications and services.</p></li></ul> <h3>Latency / Physical Location</h3> <ul><li><p>Know whether you can run the technology near your other applications. Keep communication between applications is as fast as possible.</p></li></ul> <h3>Legal Approval</h3> <ul><li><p>Ensure your company's legal team reviews the service's terms or in general, understand how your company onboards new software.</p></li></ul> <h3>Monitoring & Alerting</h3> <ul><li><p>Understand how you will monitor the service and alert folks when it misbehaves.</p></li></ul> <h3>Release Status</h3> <ul><li><p>Know the technology's maturity level such as alpha, beta, or generally available.</p></li></ul> <h3>Reliability</h3> <ul><li><p>Ensure the application can handle hardware faults, how human errors can be undone, etc.</p></li></ul> <h3>Scalability</h3> <ul><li><p>Understand how the technology scales both horizontally and vertically.</p></li><li><p>Test how the technology behaves with more data, users, traffic, etc.</p></li></ul> <h3>Security & Secrets Management</h3> <ul><li><p>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.</p></li></ul> <h3>Support</h3> <ul><li><p>Review the company's support levels, their price, response time, and so on.</p></li></ul> <h3>Upgrade Effort</h3> <ul><li><p>Understand how upgrades are performed, who performs them, how often they are required, whether downtime is needed, etc.</p></li></ul> <h3>Usability and Limitations</h3> <ul><li><p>Know whether your resources are limited such as a max number of entities, API requests per second or day, etc.</p></li></ul> <h3>Vendor</h3> <ul><li><p>If a vendor is implementing the technology for you, know whether they have done so before.</p></li></ul> <p></p>