Rebooting Software Engineering: Time to Go Back to Basics?

David Garcia
3 min readJul 31


Back to basics @

A few weeks ago, a company approached me via LinkedIn because, according to them, I have an attractive professional profile and background that matches their software development team requirements. But what got my attention about that opportunity was that the company sought developers feeling comfortable and willing to write raw source code (without using frameworks or other third-party libraries).

As the software industry continues to evolve at a breakneck speed, our toolboxes are inundated with new programming languages, frameworks, and technologies. But are we mindlessly embracing these shiny tools without adequately assessing their merits? Are we letting familiarity and ego dictate our tech stack decisions, or are we genuinely questioning the necessity of their usage?

In software development, a commonly observed phenomenon is that developers tend to gravitate towards tools they know or feel comfortable using, often disregarding potentially superior alternatives. For instance, many software engineers instinctively reach for complex, established frameworks like Laravel or Symfony when tasked with a PHP project. They neglect the potential benefits of using raw PHP, such as better performance, greater control over the codebase, and reduced dependency.

Raw PHP is not a silver bullet but can fit specific use cases well. Sometimes, developers might find that a complex PHP framework, loaded with features they won’t use, is overkill for a small-scale project. But due to our familiarity with such frameworks and the fear of leaving our comfort zone, we rarely consider using raw PHP, even when it might be the more appropriate choice.

Another area where we see this default bias is with synchronous programming languages like PHP. The industry is moving towards a more concurrent processing model, but many developers still cling to synchronous programming languages. Languages like JavaScript and TypeScript, known for their asynchronous process handling, can provide a performance boost for I/O-bound tasks and improve scalability. They allow non-blocking I/O operations that keep the application responsive even under heavy load. Yet, again, our comfort zone and the “we’ve always done it this way” mentality may prevent us from exploring these potentially advantageous avenues.

However, the purpose of this argument is not to diminish the value of established frameworks or synchronous languages. Instead, it encourages us, as software engineers, to challenge the status quo, question our defaults, and make more informed decisions. The next time you embark on a new project, don’t automatically reach for your go-to language or framework. Instead, stop and think: What does the project require? Are there better alternatives we haven’t considered simply because they’re not in our usual toolbox?

Taking this “back to basics” approach can empower software engineers to craft solutions that are more in tune with the unique needs of a project rather than relying on a one-size-fits-all strategy. We need to recognize that our field is an ever-evolving landscape. We should be adaptable, critical thinkers eager to explore new tools, techniques, and paradigms. Only then can we leverage the true power of software engineering and build innovative, efficient, and scalable solutions.

So, let’s reboot our approach to software engineering. Let’s question our tool choices, challenge our defaults, and consider all potential options. Let’s strive to become more adaptable, learn continuously, and embrace the rich diversity of tools available. After all…

Choosing the right tool for the job can make a significant difference in the success of a project.



David Garcia

Senior Software Engineer, Backend, NodeJS & Symfony developer, workaholic, passionate for new technologies and OSS contributor.