About Me
My name is Patrick Roy. For 30 years, I have been having fun writing code. I have named this site Software Aficionado based on the definition "a person who is very knowledgeable and enthusiastic about a subject". Maybe I am only knowledgeable about software but I am definitively enthusiastic. See also LinkedIn, influences, My LeetCode, GitHub. I am fluent in French and English.
I am a technical leader with broad enterprise software development experience from roles in architecture, management, operations, performance test, security, and automated quality assurance. I currently work for Acerta as a Senior Cloud Architect where we are building the LinePulse data analytics solution for the automotive production industry; a multi-tenant Software as a Service platform (SaaS) constituted of an asynchronous ingestion pipeline, a microservices backend, and a Next.js frontend. I am also the co-founder of EMVEE data where we are building a data analytics solution for the car retail industry.
A software project is controlled chaos. Brilliant people come together to build but steer in all directions. The act of leadership is getting the best of everyone so the group can deliver most value. Your experience is what makes leadership possible because you understand the team and have gone to similar destinations before. This form of leadership requires connection which for me comes from being hands-on.
My guiding principles for software development are simplicity and agility which I summarizes with these mottos: "code costs" and "there is no 'what if' in agile". I share a rising opinion (for example Allen Holub and Ben Hosking) that agile development often diverges from its root principles in the agile manifesto. Agility applies to software architecture as well as to product features.
I strongly believe in continuous delivery because it increases average feature availability and supports agile development. Without broad automated tests there is no point trying. DevOps is a necessity: builds, delivery pipeline, infrastructure as code, production monitoring, and so much more.
I hopefully believe in microservices because we need to divide work across teams, be flexible, and scale applications with high availability. State management is more difficult; you will miss your ACID. You will argue about service separation, freedom vs standardization, size, and of course testing; experiment slowly.
No estimates advocate: Allen Holub, David Farley, and SWAG wiki. Use projections to stay in business.
I am an avid learner. Every day, through books, articles, videos, podcasts, and discussions, I continue the infinite journey of trying to be a relevant software architect. Recent books: Team Topologies, Modern Software Engineering, and Fundamentals of Software Architecture.
This performance testing tool company published my testimony.
Lessons
Things change. No point trying to predict in which direction. Introducing change is hard; something to do with human nature I think.
We can only solve problems if we believe it possible; be optimistic. People hear what leaders say.
Risk is everywhere. Decide and live with the consequences.
Efficiency includes respect and empathy.
How many failed initiatives can you afford to get to a success? Does it matter?
Results is what you leave behind. The sweat and tears dry up.
Fundamentals
Respect - We disagree. If not, we would not have jobs.
Honesty - The truth hurts sometimes but it leaves you free to focus on the essential.
Learning - Learn alone and together every day. There is no limit.
Accomplishment - Is a happy customer using software you wrote not beautiful?
Dream - Software engineers are magicians; they create what used to be impossible.
People
Take care of people. Work is a marathon.
People are smart and curious. When engaged they will impress you.
Ensure people get the credit they deserve.
Pure joy: designing a feature with peers and barely talk because you can read each other's mind.
Being in a great team is a privilege you earn by building trust and making difficult decisions.
I love to make people smile with my not so funny humour. They seem to enjoy it so I keep going at it.
Management
There is an infinite amount of work; do some yourself, delegate most of it, and ignore the rest.
Build solid relationships. You will need them to face the storms and reach far away lands.
Gratification comes from seeing your product improve; the work of countless people toward a common objective.
The movie would be a thousand shades of grey; every decision is based on partial information.
Software
Software is never perfect; it must be good enough to generate revenue exceeding its development costs.
Developing an application feature set is half the work. The other half is deploying it in production.
Coordination between teams is a hard problem. It can consume more resources than the hardest technical challenges.
Architecture is tied to your organization. With delivery timeliness in mind favor short term requirements and proven technologies. Share information for the team to be the architect. You will never get it right but keep trying.
Key Performance Indicators (KPIs) are treacherous creatures. They affect the system they measure.
A good name makes a difference; it helps the mind remember, it guides people, and it prevents ambiguity.
API between components deserve the utmost design attention.
Feature flags are a double edge swords. Use them wisely.
Programming is a craftsmanship. Clean code must be readable and factorized to reduce documentation.
Design software that ages well. You would not want you maintenance costs to ruin your lucrative business. Refactor to death.
Performance always matters but keep in mind "Premature optimization is the root of all evil" -- Donald Knuth
Ensure you invest in focused automated testing at the appropriate layer.
Code reviews; the best teaching tool.
Documentation must be alive; often generated, focused, and close to its consumption and change triggers.
There is no "what if" in agile. Satisfy the requirements with the least amount of work.
If only we could live in a world where the time-quality-cost triangle does not apply.
Creation of quality enterprise products requires adapted processes and tooling.
Trends
Deliver fast and often so you can fix without costly investigation. Production monitoring is a new form of tests. System tracing tools are game changers. Many bugs only happen in production. At least now, we can catch them.
Cloud based applications is the largest paradigm shift I have experienced. A mesh of services tied with a small amount of code to deliver massive functionality.
AI; Intriguing these black box models but so powerful when accurate. Although new, it is still all about the data.
Event driven systems are like purring cats. Silence is the alarm bell.
Configuration as code brings much needed automation and traceability but not everything is idempotent. You will need to get creative. Automate, automate, automate.
Serverless. Yes.
Testing strategies in microservice environments need to be adapted. Consumer-driven contract testing is costly but will safeguard your system in the long run.
Kubernetes, the defacto container orchestration, is not your friend; it will cost you an arm and a leg in configuration and maintenance. Consider hosted versions or better a more managed platform if you can.
Code is still the precious. Nurture it with best practices and it will give you back for years.