The typical answer to the question of 'How often do you use data structures at work?' is either ‘All the time’ or ‘Never’.
My thoughts on this have changed over the span of 7 years.
Intern / Trainee:
They asked me to use a cache!
JavaScript sucks at this kind of stuff. I will use C++ with Knuth’s algorithm of dancing links to speed it up. The datatype will be integers, so maybe I can use Maxwell’s equations to…
My answer then: They are used all the time! Every millisecond counts!
Fresher:
Hmm, I need to read the codebase they have. Maybe I could use some algorithm here to speed up the cache. No…the idea is too rigidly based on the datatype. Some other day perhaps.
My answer then: They are used, but only by the senior developers. They write the infra code. I can't find the time between bug fixes and feature requests.
Second Year:
My cache has a bug. And a memory leak to boot. Let’s copy paste this code from StackOverflow. It has 200 upvotes, so it must be perfect. Better meet that product manager now.
My answer then: No one uses algorithms except research guys or very senior developers. They probably pick up the code from elsewhere anyway.
Now:
We need a cache. It should be extensible. I’ll take advice from my colleagues on how to make it easily useable and scalable. A custom expiry algorithm here will be perfect.
My answer now*:* If necessary, I’ll write the algorithm myself.
Apart from the above, we use algorithms and data structures to understand how systems work. Have a look at Consistent hashing and NoSQL Databases. You need a strong base of algorithms to ever design something like that.
What describes our growth as software engineers is: The more senior we get, the more relevant algorithms become.
Successful products are difficult to manage, and those problems often require advanced knowledge.
If you are preparing for system design interviews, here is a video course with ten detailed designs: InterviewReady.
Have a great day!