These are some principles that I’ve lived by and learned working with the best engineers in the best business around the world, and from building a one client to a billion users systems from startups to big corporate, here’s my software engineering manifesto:
- Don’t jump to the first solution you’re familiar with, or the one that just “works” — try to find a modern way to solve older problems, this way you grow and solve problems at the same time.
- Don’t ever think there’s such a thing as perfect software, there’s no such a thing. There are, however, relatively satisfying experiences that slowly decline as technology advances and new tools are implemented for better experiences, and your responsibility as an engineer is to keep your software up to date to provide better experiences and higher values.
- Your software should work like an appliance, plug and play not just for the end users, but also for the engineers that will maintain your software, they should just be able to pull in your code, build it and run!
- Write every line of code as if this is the last time you touch that code, because in a lot of projects, it’s very likely that you won’t get the chance to come back and rewrite your code.
- Know when to become a mad scientist and when to become a cowboy, not every problem requires full optimization.
- Building software for a client you don’t know or never met is like tailoring a suit for someone you’ve never seen, it doesn’t work! get to know your clients on a personal level, understand what they really need their product to be not what you think it should be.
- Documentation was meant for describing the purpose of your code and what it does, undocumented code is like a spaceship without a manual, don’t blame others for not following your patterns, breaking your code or rewriting the whole system if you don’t document your code.
- Take pride and ownership of your product, don’t wait for someone to come and tell you how to make it better, that should be something your regularly do to keep your software up to date with the best technologies and practices.
- Writing software is an opportunity for you to show others how your brain works, don’t come off lazy or stupid when it’s not who you really are.
- Software engineering is a lifestyle to take on existing problems in life more intelligently and efficiently, it’s not a job, a gig or a craft, it’s a lifestyle so if you’ve taken that path, own up to it.
- True engineers aren’t just good at integrating distributed systems and building APIs, true engineers are also good at integrating with like-minded engineers and efficient at utilizing everyone’s intelligence to build better software.
- Pair programming is a dance between two highly intelligent individuals, make your pair feel like they are dancing with a star, because you are!
- Engineering isn’t just about building software, it’s about intelligently taking on requirements for new projects, managing time, priorities and building intelligent relationships with your teammates and even better communications with external teams.
- Continuously learn, listen, communicate and integrate, don’t be an occasional learner, be a consistent day-by-day learner, evolving your skills should be just as important as your basic needs.
- Software engineering is an opportunity for humanity to solve its most complex problems to make a better world for all of us, we can’t get there if we don’t continuously adapt to changes, be agile and continuously learn, the industry is in a continuous state of inexperience, push more to teach others, learn from others and be the best for everyone around you.
- It doesn’t matter how small or big the project you’re working on is, every project is an opportunity for you to evolve, learn and modernize, even if you were building a calculator just for fun!
- Don’t ask for permission to get something right, just get it right.
- Don’t try to solve problems with one hand tied behind your back, ask yourself what is it that you’re not seeing, see the full spectrum, the problem isn’t always in the code that’s in front of your eyes, it could be the requirement itself or the description of it, don’t be a robot, visualize the entire process and think of the person using your system as well as the person that’s going to maintain it.
- As Reed Hastings says: don’t tolerate brilliant jerks, the cost to the team is much larger than the profit of the product.
- As Robert Martin says: “leave the code better than you found it.” And I say leave the team, product and software and the business better than you found it, that’s just what engineers do, make things smarter, faster and better!
- Take second opinions on your work, ask around with an open mind and heart, learn from others, communicate and be respectful, two minds are better than one, the more the merrier!
- The best mind to solve problems is the mind of the person who doesn’t have issues with anyone, transparent and communicative about how they feel and what they think, don’t bottle things up, don’t hold grudges, don’t hate or envy, these are all things that’ll cloud your mind from seeing the best solutions to the hardest problems and from being a better engineer.
- As the agile manifesto dictates, people over process, and as others say people over profits, a better team with better relationships will eventually produce better software and reflect better practices, work towards engineering better team relationships and stronger appetite for learning and growing together, don’t try to best the best in your team, but rather the best for your team.
- Darwin says: “survival isn’t for the strongest or the smartest, but for those who are most able to adapt”, in a forever changing industry like ours adaptability should be your top priority, there’s nothing good about rambling about a technology or a pattern you used in 1995, it just says you couldn’t adapt to newer, better ways and that you’re obsolete.
- Don’t let the technology limitations dictate your vision of how your product should be, bend the technology to follow your vision not the other way around.
- Every project is an opportunity for you to:
- Make someone’s life better (both end users and engineers).
- Start new friendships, yes software engineering is a social practice at a very special intellectual sphere.
- Learn something new and trying something different.
- Teaching others and sharing your experience.
These principles are going to grow as I grow and build more software and get to learn and interact with more teams, I encourage you to build your own, seek wisdom in your life and evolve!
Engineer your way out of all the problems you have, because engineering is what you do for a living! It’s what you’re good at, stay sharp and keep learning!