Tip of the Week articles at FlashArray [Follow-up]

This article is a follow-up to the last article about Tip of the Weeks at FlashArray. We are now publishing these tips for more than a year. As part of our regular Engineering Productivity survey, we also got positive feedback.

Topics

  • TotW/27: Error handling at FA. We do not use exceptions. This article gives tips about how to raise errors, handle errors, and propagate errors.
  • TotW/28: Discusses different ways to asynchronously wait for events. It was the part of a bi-weekly series on concurrency that starts with TotW/22.
  • TotW/29: Discusses how to use C++ namespaces at FA
  • TotW/30: Discusses our multi-producer, single-consumer notification API.
  • TotW/31: An article about the explicit bool conversion operator in C++. Initially, we assumed that most articles would be about core C++. To our surprise, these articles were the minority, with most articles focussing on our custom libraries. This is the first core C++ article since TotW/20.
  • TotW/32: Discussed our multi-producer, multi-consumer notification API.
  • TotW/33: Gives tips about marking tests as expected to fail in the pytest test framework.
  • TotW/34: Discusses how to adjust the log levels of our logging API at runtime.
  • TotW/35: Discusses a hybrid data structure instead of a std::vector if only a few elements are expected. Hybrid data structure here means data structures that are optimized for a few elements (to avoid memory allocators and be cache-friendly), but allow growing to large number of elements seamlessly. To learn more about these data structures, I can recommend this talk from Cppcon 2016.
  • TotW/36: Discusses std::tie to write comparison operators in a less error-prone way.
  • TotW/37: Discusses how to write hash functions.
  • TotW/38: discusses a tip on how to write good log messages.
  • TotW/39: Discussed lambda captures in C++.
  • TotW/40: Discusses how to specify which of our memory allocators to use for a specific, important class.
  • TotW/41: Discusses the override specifier in C++. The publishing of this tip was synchronized with enabling the modernize-use-override clang-tidy check.
  • TotW/42: This was quite a basic tip about what constructors are and when to use them as well as what do not do in them.
  • TotW/43: Discusses how to “death tests” in our unit test framework.
  • TotW/44: Discusses how to use type hints in Python 3.
  • TotW/45: Discusses East Const style and West Const style in C++. Our C++ guidelines prefer East Const style.
  • TotW/46: Discusses how to register a class for automatic formatting in log messages.
  • TotW/47: A tip about how to use subprocess in Python.
  • TotW/48: A tip on how to remove tuples from our database. As discussed in this research paper from SIGMOD 2015, our database uses elide functions for tuple removal.
  • TotW/49: What happens if you call std::move. IMHO one of the most used and least understood operations in Modern C++.
  • TotW/50: Explains our ordered, concurrent map data structure we are using.
  • TotW/51: Discusses a specific aspect on how to write to our database.
  • TotW/52: Discusses our in-memory interval set class, which we intensively use.
  • TotW/53: TotW/12 discussed parameterized test. This tip discussed how to write tests parameterized on types using a system based on C++14’s generic lambdas.
  • TotW/54: Discusses an aspect of our smart pointer classes.
  • TotW/55: Discusses our different forms of assertions.
  • TotW/56: Highlights a different way to define a C++ unit tests which makes it easier to test asynchronous code.
  • TotW/57: Python fstrings.
  • TotW/58: Rate-limited in our logging infrastructure.
  • TotW/59: Python raw strings.
  • TotW/60: Enumerations and why enumerations should be preferred to bool parameters
  • TotW/61: A catch-all article about reasons to prefer Modern C++ to what I called C-style C++.

My goal was to reduce the number of articles that I wrote in the second half of the first year of TotW. And I did not fully succeed, as I still contributed most articles. However, four authors now contributing articles and one co-author stepping up and reviewing almost every article and taking over the main authorship on half a dozen.

C++ is still the main topic, with Python being the language used in 6 articles. Java was no longer had a dedicated article, but it was mentioned in TotW/60.

Most tips that I write are growing out of mentoring situations with other engineers or reviews. This keeps them relevant. Another source of inspiration are the large-scale refactoring efforts the team has done in the last year. Often you notice idioms that are outdated, but appear in new code due to code reading. Sometimes we are working on actively removing the old idiom. Sometimes we are improving the documentation. And, sometimes we write a TotW about the idioms and the tradeoffs.

Even after a year, I am still convinced that the TotW format is a great tool for internal knowledge transfer.