Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.27 KB | None | 0 0
  1. Foursquare's New Technology Policy
  2.  
  3. # Why?
  4.  
  5. Being able to introduce new technologies (programming languages, frameworks/platforms) is great, but there can be significant production and maintenance overhead to new systems:
  6.  
  7. * If it's a replacement, we need to get it up to our current standards and reeducate everyone who uses the existing one
  8.  
  9. * If it's an additional system we need to do everything for a replacement AND integrate all of our existing tooling/monitoring/etc so that we can give consistent guidelines for people on call or who are doing development
  10.  
  11. * If someone leaves or is busy with other projects we don't want projects using the new technology to be left to rot or to find an unwilling new owner
  12.  
  13. * Even if it can be enabled quickly, software cost is not solely derived from the implementation. Software maintenance has been estimated as roughly ~75% of the **TCO** (Total Cost of Ownership).
  14.  
  15. This proposal is to give some guidelines on how to introduce a new technology in a way which will be sustainable and give it the best chance of long-term success at **Foursquare**.
  16.  
  17. # What does this apply to?
  18.  
  19. There aren't any hard rules. If you're uncertain about whether a new technology falls under this policy your best bet will be to ask in **#serverarch**. Asking in advance of the work can save everyone from writing something that doesn't end up being used.
  20.  
  21. To give some examples, if a technology meets a few of the criteria below it probably applies. **Note: it doesn't matter if we are building the technology ourselves or integrating a 3rd party one.**
  22.  
  23. * **It is a new programming language**. These involve a lot of integration work, will have different runtime characteristics, and require new methods of debugging and fire fighting.
  24.  
  25. * **It involves running a server that will receive a new kind of traffic**. Especially if it being down or broken would take down the site or offline infrastructure.
  26.  
  27. * **It replaces something we've built a lot on top of**. Something like a new RPC or build system.
  28.  
  29. * **It's something people will ****_start_**** building lots of things on top of**. Examples include new distributed computing framework, new databases, new languages.
  30.  
  31. * **Something which changes the architecture or runtime characteristics of our systems**. Examples include async rpc systems, remote endpoints, etc.
  32.  
  33. * **Something that duplicates or replaces an industry standard or widely-used open source implementation**. If the technology or project does not directly underpin a core business offering, we should strongly prefer proven open source tools over custom implementations. Custom infrastructure can quickly age into tech debt. Examples include implementing any offering already covered by Apache, Cloud Native Computing Foundation, an active GitHub project with 500+ stars, etc.
  34.  
  35. # The Process
  36.  
  37. If you'd like to introduce a new language/framework for a production system you must have your proposal accepted before it can move past the toy/prototype phase. If your proposal is rejected it will likely mean throwing away the work you did. For the best chance at success you should involve the main stakeholders early on rather than surprising them with a request to adopt a running system.
  38.  
  39. The committee will be made up of:
  40.  
  41. * The eng-leads group
  42.  
  43. * Senior individual contributors who work in relevant areas
  44.  
  45. * Other stakeholders of the new system.
  46.  
  47. Since this is a large group in most cases the proposal will be assessed by a technology-appropriate subset of members. For example, we would want to make sure our data scientists were well represented if we were introducing a new machine learning platform but we wouldn't necessarily need everyone.
  48.  
  49. For advice and help with the proposal, the #**serverarch** group is a great resource (**serverarch**@). They should also have a good idea of whether the technology under consideration requires a proposal.
  50.  
  51. # The Proposal
  52.  
  53. To make sure you're starting from a sustainable base with your new technology you should try to cover as many of the items below in your proposal as possible. Your proposal does not need cover all of the criteria below to be accepted, especially for non-critical technologies, but the more it does the more convincing it will be.
  54.  
  55. * **Why:** An argument that the new technology has benefits over existing choices that outweigh its build/maintenance or ongoing integration costs
  56.  
  57. * **Scope:** A plan for what sorts of systems this technology *should and should not* be used to implement
  58.  
  59. * How many estimated SE weeks to build and ship to production?
  60.  
  61. * Any part of our stack able to force rewrites/maintenance of the proposed technology?
  62.  
  63. * **Cost/Benefit analysis **(please be precise, numbers are persuasive)**:**
  64.  
  65. * What do we gain by adopting the proposal?
  66.  
  67. * What are the costs of not adopting this proposal?
  68.  
  69. * **Deployment Plan:**
  70.  
  71. * **Integration Plan:** A plan for continuous integration, monitoring, logging, deployment and production/usage cookbooks.
  72.  
  73. * **Conversion Plan:** If the technology is a replacement, a sketch of a plan for how to do the conversion from the old technology and an estimate of how long we'll be running both technologies side by side (it's okay if the answer is "basically forever", but we want to know)
  74.  
  75. * **Rollback Plan:** A sketch of a plan for how we would remove this technology if it didn't work out
  76.  
  77. * **Owning manager sign-off:** Sign-off from the manager of the team that will be supporting the technology. If you are the manager of that team, check with your manager.
  78.  
  79. * **Volunteers:** At least four engineers—including at least one member of the appropriate support team—who have signed up to learn how to write production quality code and firefight issues with the system (as appropriate)
  80.  
  81. * Unless a volunteer already knows the technology well this means having them write code using this technology, not just doing code reviews.
  82.  
  83. * All of the volunteers agree to support the new systems in production, including being on call. On call in this context meaning being available for the appropriate support team (e.g. prod) to contact.
  84.  
  85. * It is the job of the volunteers to make the system resilient enough and well documented enough that the support team doesn't need to contact them.
  86.  
  87. * The volunteers would be listed on a page of "system owners" that helped find people who know about a technology.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement