Fine Grained Reactivity - Implementing a reactive frontend from scratch
In this blog, I explore the internal working mechanisms of react hooks like useState and useEffect
Read moreFor the past eight years, I've been working as a software developer creating web and mobile applications. I'm currently focused on building scalable and maintainable backend systems using PHP and Symfony.
I hold a Bachelor's degree in Computer Science and Information Technology from Tribhuvan University, Nepal. I'm also a Pimcore Certified Senior Developer.
I enjoy learning new technologies and sharing my knowledge. In my free time, I contribute to open-source projects related to the tech I love, hang out with family and friends, watch movies and football, and play video games.
A timeline of my professional journey and the skills I've developed along the way.
anyMOTION GmbH
Developed high-performance RESTful APIs using Symfony and Pimcore. Contributed to Pimcore core development, enhancing backend functionalities. Optimized and refactored complex backend logic for better performance and maintainability.
Proxify AB
Specialized in Symfony and Pimcore backend development, API design, and integrations. Contributed significantly to Pimcore core, improving backend systems. Implemented scalable and optimized backend architectures.
Sastodeal Pvt. Ltd.
Developed and customized Magento 2 Enterprise backend solutions. Integrated custom ERP/Finance solutions with Magento. Designed and implemented B2B2C backend platforms with high scalability. Led Magento Cloud deployment, backend performance tuning, and version control strategies.
Javra Softwares
Built Magento 2 PWA backend using React.js and Symfony APIs. Developed and customized Magento 2/Pimcore backend modules. Implemented Test-Driven Development (TDD) practices for backend reliability.
Initiative Nepal
Developed robust Laravel-based backend solutions for various applications. Integrated and customized ERP, HRM, and CRM backend functionalities.
Mirror Grid
Developed and maintained Laravel-based backend applications. Designed database schemas and optimized backend queries for performance.
Among these languages, I have the most experience with PHP, Javascript, and Typescript. PHP is my breadwinner. I think it's becoming a very good language to write code on in the recent years.
On the relatively short time I've had with Go, I really enjoyed working with it. I love the simple structure without the fuss and I have borrowed many of it's concepts onto other languages as well.
Same with Rust. I have a project where I built a programming language using Rust and however many hours I spent using Rust was worth it in the end. I think learning rust made me a better programmer because the compiler forces us to think about memory and I've carried that thought forward to the languages that are not so strict about it.
I have also worked with Lua, but not in a production environment. I mostly use it for configuring neovim.
Beside these languages, I have familiarity with C, C++, Java, C# and Python. I have used these languages during my days at the university but didn't have a chance to use them in a production environment yet.
I have worked with Laravel for a long time and I love it. I think it's the best PHP framework out there. I have used it for building APIs, web applications, and the very own blog that you're reading this on. My favorite part about Laravel is the Eloquent ORM. I also enjoyed working with AdonisJS because of how similar it is to Laravel.
Symfony is a beast. I especially love the way it handles dependency injections. I think the container is the best feature of Symfony. Besides the framework itself, the symfony components are the backbone of many other frameworks including Laravel. I'm not a huge fan of Doctrine, but when it's a Symfony project, you're kind of stuck with it. That's the only complain I have about Symfony.
If symfony is a beast, then Pimcore is a monster. I have worked with Pimcore for a long time and I love it. It's especially great for modelling complex data structures for different use cases.
Fastify is great for building APIs. I gave it a try when I was looking for a more performant alternative to PHP. I instantly liked the middleware approach and the way it validates request data.
I have also worked with Express, but I didn't enjoy it as much as Fastify. Maybe it's because I didn't have a chance to work with it for a long time, but I found it a bit incomplete. I mean the HTTP thing is great, but coming from laravel, I missed like 90% of the features that I was used to.
I put the frontend technologies in the order that I enjoyed working on the most. As I'm much more inclined towards backend, I might be a bit biased here, but I think the order is pretty accurate.
For obvious reasons, I have to put HTML at the top. However, good ol CSS on the other hand looses the battle against tailwindcss for me. For me, the best part about tailwindcss is I don't ship the stuff that I don't use and it's really hard to do it correctly with CSS.
I really enjoyed working with AlpineJS because of how easily it ties with backend rendered templates and provides a great way to add interactivity to the page without the need of a full blown SPA. Moreover, it powers technologies like Livewire which is pretty awesome on it's own.
Depending on the complexity of the project, I either go with vanilla js/alpine or react/vue route. Simpler projects do not need extra bloat and I'm always against adding unnecessary complexity to the project. But when the project is complex enough, I go with react or vue. I have used both of them and I like them both and I've suffered with both of them too.
Rest of the technologies are pretty much outdated and I wish to never use them again, but life isn't sunshine and rainbows and developers have tech debts.
I have worked with Android and iOS for a long time, but I don't consider myself a mobile developer. I have used React Native for building mobile applications and I think it's a great tool for building cross platform applications.
Before React Native really kicked off, I used Ionic for building mobile applications but I can't say that I'm following it these days.
I mostly work with relational databases and I have used MySQL and MariaDB the most. I have also used Postgres in a few projects. I have used MongoDB on just one project in production. Redis and elasticsearch (opensearch these days) are almost in every project that I have worked on. I have extensively used elasticsearch for full-text search and in the last year or two really dived deep into the internals and even implemented my own little full text search engine.
For the most part, I leave the webserver configuration to the devops team, but I have worked with Nginx and Apache in the past so if I really have to, I can work with them.
I have used RabbitMQ in scenarios that requires asynchronous processing and when I need to know for sure that a message is processed. I have used Redis queues in the scenarios where timing is critical but not the acknowledgement of the message being processed.
I've worked in large eCommerce projects built with Magento2 as well as with Pimcore eCommerce Framework. I also have worked in projects where both these technologies were combined and Pimcore was used as the source of data for Magento storefront. Although both of these technologies provide excellent feature rich solutions for what they do, they both realy heavily on pretty outdated technologies on the frontend which makes development very painful. But, as from a backend developers perspective, these tools provide a robust set of primitives as well as a lot of stuff out of the box for free which is pretty cool.
I use docker for local development and deployment. I use git for version control and use composer/npm/yarn for dependency management. I absolutely love lazygit and I use it for all my git operations. Neovim is my editor of choice and am always optimizing my neovim configurations to bring the best out of my workflow. I usually work in virtual machines via SSH and tmux has been a saviour for me. With this workflow, I can quickly switch between different projects with just a few key-presses and it has made developing fun for me.
fzf has improved my workflow a lot. I use it for searching files and git history. I have integrated it in neovim so that I don't have to leave my editor to quickly search for files. I use it with telescope.nvim so it has a nice UI within the editor as well.
In this blog, I explore the internal working mechanisms of react hooks like useState and useEffect
Read moreIn this blog, I try to implement an inverted index.
Read moreIn this blog, I try to explore the underlying concepts behind a fulltext search engine.
Read moreA CLI tool that helps you find errors in your website by crawling all the pages listed in sitemaps
Read moreFollowing the first part, I try to deep dive into creating a lexical analyzer for my custom programming language
Read moreHave a project in mind or just want to chat? Feel free to reach out!