As developers and engineers we are constantly introduced to new languages, libraries, frameworks, toolchains, workflows… it quickly becomes overwhelming. How are we supposed to keep track of that service or framework that will solve the problem that is relevant now, but wasn’t quite applicable when we read about it 6 months ago? It is important to establish a set of methods for discovering, evaluating and remembering useful technologies.
I will preface this by saying that the approach I am going to outline has worked for me so far, but I am in no way suggesting that there are not other ways that could work better for you.
The first step in building up your stockpile of tools and reference materials is to find them. I make use of a number of different channels for obtaining this information.
Weekly email digests are a great way to get a curated list of articles and projects that are relevant to a particular segment of technology. These can be for a particular language ecosystem such as Python or Ruby, a problem domain such as Data Science or a specific source such as Hacker News. These newsletters allow you to easily find interesting projects and articles without having to go hunting for them yourself.
Twitter can be useful for finding great articles and tools, depending on who you follow. The danger here is that it is easy for your stream to become crowded with noise. I tend to follow someone if they have some interesting content and unfollow them if they spend more of their time posting about irrelevant topics than useful information. One way to find interesting people to follow is by seeing who gets frequently retweeted by those who you are already following.
Another way to discover useful projects and reference material is through industry publications such as The New Stack or community sites like Hacker News and Product Hunt. One caveat for sites with a strong focus on user commenting is that the discussions frequently devolve into flame wars which are best avoided.
Once you have found a potential resource it is important to evaluate it before committing it to your archives. This process varies depending on the type of resource, but its importance is independent of the purpose of the resource.
If what you are evaluating is an article from a blog or news source then your evaluation can be done by reading through it and deciding if it was informative and useful enough to bookmark or, if you don’t have enough time when you find it, briefly skimming the contents to determine whether it is worth coming back to. Assuming that you decide to save it for later reading then I highly recommend using a service such as pocket which allows for offline reading on your phone or tablet. Once you have read the entirety of the article and decide that it is worthwhile to save it for future reference, then you can either archive it in pocket or bookmark the location in your browser. I like to use the Google Chrome browser, largely because of the fact that it will automatically synchronize my bookmarks across computers for me, though Firefox offers this capability as well.
When the resource that you are evaluating is a software project, you must take a different approach to establishing whether it is something that you would like to remember for the future. Most commercial products offer a limited trial period for testing out their product, in which case that is likely to be the best method for deciding whether you intend to use it going forward. Sometimes, however, you are not in a position where you are able to fully test the capabilities of that product. In this situation, the next best thing is to read through the feature description of the product and search for reviews and testimonials that other users have written. Open source software can follow a similar course of testing without the restriction of a time-limited period, though it also offers other methods by which you can determine whether to add it to your arsenal.
The most popular location for hosting open source projects is GitHub, though many other sites exist with similar capabilities such as BitBucket and GitLab. These sites have the ability to track issues and pull requests, as well as keep track of repositories that you are interested in. One indicator of the popularity of a project on these sites is how many people are following it along with how many open issues and pull requests there are. Another indicator of the quality of an open source project is the level of detail in the README, as well as whether there is a dedicated documentation site. That’s not to say that there aren’t excellent projects that have poor documentation, but there is usually a lower likelihood that they will get used due to difficulties in discovering the purpose and capabilities of the project.
Once you have found and tracked these various resources, it is important to make it easy for your future self to locate them when you need to. I am often faced with a particular problem for which I remember that there was something that I came across previously which would prove useful. I rarely remember the exact name or location of what I am looking for but I try to keep things organized in such a way that I can easily re-discover them when needed.
For my browser bookmarks I use a folder structure that is meaningful for me with entries like ‘Programming References’, ‘Interesting Projects’ and ‘Data Science’. For some categories it is necessary to break them down further with folders such as ‘Python’, ‘Ruby’ and ‘Web Design’ nested underneath my ‘Programming References’ folder. By employing a measure of consistency in how I select which folders to add new entries to, I can easily find what I need at the time that I need it. This same principle applies to any source code or applications that you may have stored on your local file system.
For organizing projects that you have starred in GitHub there is a free service called Astral App. Astral provides the ability to connect to your GitHub account to import the list of starred projects and then add your own tags to them. By tagging them in a consistent manner it becomes possible to apply useful filters when searching for a specific repository when you need it and can’t recall the specific details about it.
Now that your various references, services and repositories are properly organized and searchable it is a trivial matter to find what you need when you need it. This can add up to significant time savings as you progress through your career. It is important to periodically re-evaluate your reference archive to make sure that the tags and hierarchies that you use are still relevant to you. What you consider useful and necessary is bound to change as you learn and improve so I recommend archiving old resources that are now less relevant to your particular skill level, but don’t get rid of them entirely because they may still prove useful to junior level co-workers and acquaintances.
Some of the places that I like to use for discovering and managing new content and projects are listed below, although this list is by no means exhaustive..