Isaac Sichangi
2 min readJan 14, 2024
Fundamentals of software development

2024 is finally here with us and as the year kicks off, I’ve noted a lot of content being released on new tech trends to expect for the upcoming year whether it be frontend development, backend development, or mobile development. All this got me reflecting upon the past year and the different projects I was involved with at work together with the many lessons that accompanied them.

The question that keeps popping into my mind is whether we are abstracting software development to a point where the fundamentals are getting lost in between. I appreciate and recognize the fact that frameworks in software development abstract a lot of complexity and help us follow recommended design patterns to write better-quality code. This is good for experienced developers but from my observation with developers getting started, this approach limits their appreciation of what’s under the hood in the specific framework and what problem it is trying to solve. This in turn limits them to think in a specific framework mindset instead of being framework agnostic and being able to handle complex issues the framework doesn’t handle or rather even enhance/extend the framework.

If you have ever done a technical interview with Google you will note that especially in the earlier rounds they focus on technical ability using the basic programming structures i.e. loops, arrays, etc.. the target is to ensure the candidate is comfortable with the basic programming principles and as such working with higher level abstractions would only help to enhance their productivity. This is part of the reason why focusing on the fundamentals is quite important, especially at the early stages of your career.

Another viewpoint to note is that the raw language has been getting inbuilt capabilities for some frameworks to address some of the issues the framework was built to solve. Using the raw language itself often comes with many benefits such as better support and reduced size of your application. A case example would be with CSS and the multiple CSS frameworks that exist e.g. Tailwind, Sass, etc. With the release of Css3, it added enhanced capabilities in CSS which would make you undertake deep consideration before using a framework. The same applies to the multiple JavaScript frameworks a deep assessment of your application should be undertaken to ascertain the need for the use of the framework e.g. for React does your application need frequent updates and does your application need to maintain state?

In conclusion, let us learn to prioritize the foundational knowledge in programming/Computer Science so that we can better understand the systems that we build.