A new Start
Welcome to the first post on revamped site! I decided to start writing again because, since 2016 when I used to be a fanatical developer who chose to write about the Symfony framework, I’ve had a busy career journey that has taken me up to the level of Tech Lead.
What’s to come?
I’ve always been a fan of walking, believing the journey is more important than the destination. For the first part of our journey, I’m going to guide you through setting up IT project infrastructure for a make believe startup that wants to sell access to their services online and starts to find success. Along the way, there will be plenty of time to discuss implementation. Broken down, this means:
- Setting up a working proof of concept in minimal time to prove there is market opportunity.
- Capturing empirical data to prove its worth investing in
- Scaling development practices to deal with a larger team
- Dealing with ever growing infrastructure in a managable fashion
- Reaching a usage threshold, it makes sense to rebuild the stack with high scalability in mind
Once we’ve reached this last point, I’ll start a new series of articles with an emphasis on scaling. Aside from discussing application development, there will also be time to understand:
- Web servers and reverse proxies for accessing services via Nginx
- Data management and making changes over time via PostgreSQL
- Automation to support CICD and managing operations via Jenkins
- Version Control Systems and a clean way to manage changes via Gitea
- Logging strategies and consolidation via Graylog
- System monitoring and incident response via Sensu
- ChatOps for transparency and collaboration via Mattermost
My next post will help you setup your own home lab with minimal fuss managed by Ansible. I don’t want to lose a portion of the audience before we’ve even had a chance to get started so, want to feel I’ve put in effort to make sure we are all on the same page. I’ll be using it as a foundation to build up content on this site from.
The guide will help you configure Windows, Linux, Mac or even Armbian based devices including provisioning Virtual machines via Virtualbox (Windows / Mac) / libvirt (Linux) to create a distributed environment that reflects the real world including:
- Setting up a device to develop from with common development and testing tools
- Deploying a simple web service with a frontend (ReactJS) and backend (Gin)
This may seem like a lot to handle; my advice would be, don’t worry! Firstly because we will be using a tool to do the heavy lifting for us and second, You don’t have to use it all.
Why is this needed?
Discounting money, every software developer wants to “be the best and create the best” they can, to become an artisan of their craft and should always be on the lookout to improve themselves.
Having a lab to experiment with is important for a number of reasons. Firstly, it allows you to try out new tools, technologies and development processes before implementing them in a safe and controlled environment
For being a controlled environment, it also means developers can test their software in a variety of scenarios, ensuring that it works as expected under different conditions. This can include testing for compatibility with different operating systems and hardware configurations, as well as testing for security vulnerabilities and potential edge cases.
A lab is a valuable learning tool, allowing developers to gain hands-on experience with new technologies and refine skills. This results in a more effective developer more able to troubleshoot / resolve issues quickly and approach innovative challlenges with more structure.
For building services along the way, I’ll try to share good architecture knowledge, not just regurgitating principles such as SOLID, 12 factor app, heuristics, etc. but how they fit in to the real world
In a rushed world where Agile is used as an excuse to rush out software (mostly for the right reasons), good architecture enables developers to ensure quality attributes such as performance, maintainability and scalability.
Effective software architecture helps to reduce complexity allowing developers to make changes and adjustments whilst introducing minimal technical debt. This ultimately leads to a more cost-effective and efficient software development process, and helps ensure that the software is of high quality and meets the needs of users.
Please do let me know if there’s anything you’d particularly like to know about and I’ll try my best to cover it in the future. Don’t forget to subscribe to my newsletter and be instantly informed when new articles are released. For now, have a great day and see you next time!
- CEO Fastly: Experimentation Is The Key To Innovation
- Agile Alliance: Learning to Experiment
- packt: Why software architecture is important
- InfoQ: Eseential complexity in Systems Architecture
- MicroSoft: The principles of sustainable software development
- ITPro: Why sustainable Software Engineering is a Win-Win
- Nasdaq: Cloud computing energy efficiency problems