This is a quick post on Awesome Lists. If you are a software developer then in the last couple of years you would have encountered an awesome list on Github. There is even a curated topic on Github[1] for awesome lists. Typically, an awesome list is about a specific technology. For example, there are awesome lists for all programming languages, frameworks, tools, etc. There are also awesome lists for non-tech stuff like product management, hiring, books, and many other topics. Then, there are awesome lists of awesome lists.
When I first learnt about these lists 4-5 years back I also started collecting(hoarding :)) them. Over time I realized most of these lists are not useful. They are just a laundry list of web links. They don’t tell you what to do with that stuff, how to navigate the landscape for that specific technology/topic, and how to answer real questions.
To make it more clear, let’s take awesome-microservices[2] as an example. It has more than 10000 stars. Below is the table of content of this awesome list.
On the surface when you look at the Table of content shown above it looks like a useful list. Your first instinct will be star it or put in your note taking application. But, the day you need to make any decision in your Microservice architecture this list will be mostly useless. It only lists technologies under each of these categories. You will be lost by these options under each category. You don’t know if these projects mentioned in the list are still active or recommended.
When you are building a system using Microservices there are many important questions you need to ask. Let’s go over some of these questions:
- Should you really use Microservices? What should be a Microservice?
- How should you decide which API gateway to choose? Do you really need any API gateway? When does the API gateway become overambitious?
- Should you use monorepo or polyrepo? For this we need to read awesome-monorepo -:)
- Which patterns and anti-patterns exist in Microservices? How are these applied in the real-world?
- Which API style to use in Microservices? Should we go with GraphQL, REST, or gRPC?
- How to test Microservices?
- What caching strategies to apply?
- Which real-world case studies should you read?
There could be many such questions. In my view an awesome repository should provide references to these real world problems. A year back I tried to do that by creating a useful-microservices-reading-list[3] where I listed resources which I think answer these questions. I am sure it is far from done. There are many good resources still missing and there are still many practical questions which still need resources.
I am not saying all awesome-lists are useless. But, yes there are a considerable percentage of them which don’t solve any real purpose. Useful lists are difficult to create and to create them you need to put in the required hours.