willsewell
Joined 10 years ago
Joined 10 years ago
However for some of the core platform functionality depended on by all services, we've seen a lot of value in wrapping because it:
- We can provide a more opinionated interface (a third party library is typically more flexible because it has vastly more variety in its use cases) - We can hook in our own instrumentation easily (e.g. metrics, logging) or change functionality with config/feature flags - We can transparently change the implementation in the future
* Sprint reading: http://www.sprintreader.com/. You can install a Chrome extension here: https://chrome.google.com/webstore/detail/sprint-reader-spee...
* "Bionic Reading": https://www.reddit.com/r/Damnthatsinteresting/comments/usdy2...
One of our engineering principals is to avoid premature optimisation, which is possibly one of the reasons our architecture has grown in this way. So far, whenever we've needed to fix a performance issue we've been able to solve it locally rather than change the architecture.
At the business level, we've been optimising for growth rather than costs, but this could change in the future, at which point we may need to reconsider our architecture. But for now it's working for us.
> bias for action when it's a reversible decision
"Frugality" is a bit less explicit than "move fast _and break things_. I think the reason it could be considered an anti-value is because it implies obvious _costs_. For example it can cost time in "shopping around", or it could mean that you miss out on opportunities - for example missing out on a great employee because you pay below market rate.
I previously felt these contradictions are problematic because they make it harder to use values for prioritisation. It's a good point you make about different values being applicable in different contexts. I wonder whether the context can be incorporated into the value?
For example "Bias for action when the cost of failure is low". In an oncall incident, restarting a stateless service is worth trying even before the problem is understood in depth, because risk of failure is low. There are potential actions in an oncall incident that could quite easily make things much worse - then it's probably worth diving deeper before taking action.
It might not be pithy enough for the value itself, but I think it's at least adding this kind of context to the subtext like Amazon have done in the page you linked to.
I had a go at doing roughly the same thing a couple of years ago [0]. It was mostly straightforward, but the part I really struggled with were rendering the sea. The encoding of OSM coastline is quite quirky [1]. When the edge of the rendering intersects with the coastline it's very tricky to compute which side of a coastline is sea and which is land. As an example - how would you render this [2]?
I wasn't sure how I could solve this, so I wrote up a more abstract formulation of the problem here [3], and asked for help. I think the proposed solution make sense, but I think I would have to implement it by rendering individual pixels and wouldn't be able to lean on a higher level graphics library.
I'm looking forward to seeing how the author solved this problem.
[0] https://twitter.com/willsewell_/status/1172523752699113473
[1] https://wiki.openstreetmap.org/wiki/Tag:natural%3Dcoastline#...
[2] https://www.openstreetmap.org/#map=15/22.0330/88.8819
[3] https://leetcode.com/discuss/general-discussion/1104642/im-s...
Twitter: https://twitter.com/willsewell_ GitHub: https://github.com/WillSewell
[ my public key: https://keybase.io/willsewell; my proof: https://keybase.io/willsewell/sigs/Zx1PoRxVfwEtHWOnXfYvqfcTPmL3KZadH61zNvj4iT8 ]