Skip to content

Latest commit

 

History

History
89 lines (65 loc) · 5.29 KB

technology-choices.md

File metadata and controls

89 lines (65 loc) · 5.29 KB
title description
Technology choices
How to make technology decisions at Artsy

High-level architecture and technology choices are some of the most important and carefully considered decisions we make as engineers. This document describes how we make decisions, including:

  • A radar for capturing current technology preferences and
  • Technical plans and reviews for adjusting those preferences or making other significant technology decisions

Evolving Technology at Artsy

We want to accomplish a lot with a lean team, which means we must choose stable technologies. However, we also want to adopt best-of-breed technologies or best-suited tools, which may need work or still be evolving. We've borrowed from ThoughtWorks' Radar to define the following stages for evaluating, adopting, and retiring technologies:

  • Adopt: Reasonable defaults for most work. These choices have been exercised successfully in production at Artsy and there is a critical mass of engineers comfortable working with them.
  • Trial: These technologies are being evaluated in limited production circumstances. We don't have enough production experience to recommend them for high-risk or business-critical use cases, but they may be worth consideration if your project seems like a fit.
  • Assess: Technologies we are interested in and maybe even built proofs-of-concept for, but haven't yet trialed in production.
  • Hold: Based on our experience, these technologies should be avoided. We've found them to be flawed, immature, or simply supplanted by better alternatives. In some cases these remain in legacy production uses, but we should take every opportunity to retire or migrate away.

Artsy's current choices can be edited in raw form here and viewed in radar format here.

Technical Plans and Review

See this document for more information on technical planning.

Frequently Asked Questions

Helm (e.g.) is an interesting technology to keep an eye on.

It sure is!

No, seriously. It might be a great fit for Artsy's needs.

Sounds like it should be assessed. Go ahead and add it (via pull request) to the radar. This is also a great time for spikes or proofs-of-concept.

I think we should incorporate Sorbet (e.g.) into our stack!

Propose a technical plan for how this choice could be trialed in production. Clarify the goals and potential benefits of the trial. If replacing an alternative, consider whether we would consolidate on the new choice (and how) or support multiple approaches. Specify a target timeline for deciding about the trial either way. Avoid trialing multiple unproven things in the same project or system.

We've had a positive experience with Phoenix (e.g.) and should adopt it in more places.

Congrats! Is there a critical mass of engineers (>=3) comfortable working with this tech? If so, consider a Knowledge Share or practice meeting discussion to review your experience and share any lessons. Make a pull request to the radar and make sure to request comments from the relevant engineers or experts. Remember that it may not be sufficient to just "adopt" a new choice. If this replaces an alternative that's in place at Artsy, that should probably move to "hold" and a strategy be decided for migrating away from the old tech (e.g., opportunistically or deliberately).

I just want to build a feature this way or with this library. Is a technical plan necessary?

Use your judgment. Minor dependency selections may not warrant broad input. If a library or approach influences how future code will be written or how other developers will work, though, it's often worth a time-out to consider competing options, get feedback, choose deliberately, and document the choice.

What plans or communication are expected when creating new projects or repositories?

As above, if the new project will affect developers' work or employ technology that's not "adopted," a technical plan is recommended. In all cases, lean on our other documentation and communication practices like:

When should I use an RFC? When should I write a technical plan?

RFCs or Requests for Comments are ideal for discussing changes to how we work as engineers. Technical plans are better for considering technical approaches and technology or tool choices. You can't go wrong, though! Both ensure we discuss in the open and record our thinking.