Reflecting on Tool Dependency vs. Efficiency in Software Engineering

Chien Hoang
2 min readNov 12, 2023

After nearly two decades working in Software development, I’ve recently been reflecting on how we, as engineers, lean on various tools and technologies in our work. Don’t get me wrong, tools like serverless computing and low-code platforms are game-changers, but there’s a catch. I’ve noticed in my own work that sometimes these tools can make us a bit complacent about understanding what’s happening under the hood.

Take low-code platforms, for instance. They’re super convenient, but there have been times when I’ve felt limited by their capabilities, especially when dealing with complex, specific requirements. This is where I think the real challenge lies. And as for automatic code generators — while cool, they can churn out code that turns into a tangled web, hard to maintain in the long run.

Working with complex frameworks and libraries has been a similar experience. They can speed up development, but I’ve often seen them bloat our applications unnecessarily. The same goes for over-relying on specific cloud services. They offer great scalability, sure, but getting too locked into one vendor’s ecosystem can be a drawback.

I approach pre-built solutions and plugins with caution. They’re tempting, but I’ve learned that they can sometimes slow down the system or introduce security gaps if not chosen carefully. And ORM tools — they’re supposed to simplify our lives, right? But there have been times when I ended up with inefficient database queries because I didn’t pay enough attention to how the ORM was handling things.

Now, don’t misunderstand me. I’m all for using tools to make our jobs easier. But I’ve learned that balancing these with core engineering principles is crucial. For instance, instead of building multiple serverless services, I’ve found that a simple monolith app, especially when efficiently coded in Golang and then deployed to a K8S cluster, can offer better performance and easier maintainability. This approach not only streamlines development but also ensures a deep understanding of the application architecture. Another case is that instead of using ORM for a simple query due to convenience, I’d rather manage it with a raw query and well-indexed, and the result will be much more efficient with full control (my experience with this was that with just a simple-bad query can take down your whole database).

In the end, it’s about making sure our applications are not just quick to develop but also efficient, robust, and easy to maintain. I’ve found that keeping a close eye on my reliance on these tools helps me stay sharp and ensures that I’m solving problems in the most effective way possible.

I’d love to hear your thoughts on this. Have you had similar experiences in your projects where finding the right balance between tools and core engineering skills was challenging? What strategies or lessons have you learned in this regard?

--

--

Chien Hoang

Tech Driven currently @Tamara an Unicorn Fintech startup 🦄