Benjamin Cane is a Distinguished Engineer at American Express. He has more than 16 years of experience with roles in both systems and software engineering. He leverages both his systems and software skills to build end-to-end platforms.
How to get better at being an Engineer
The will to win, the desire to succeed, the urge to reach your full potential... these are the keys that will unlock the door to personal excellence.
What is Personal Excellence?
Personal Excellence is the philosophy of developing oneself to reach your full potential. You can apply this philosophy to both personal and professional worlds.
Software Engineering is a Craft
Like a Carpenter, Musician, or Architect (buildings), Software Engineering is a Craft. We, as Engineers, are
The pursuit of Personal Excellence as Software Engineers is the pursuit of becoming experts in our field.
Precision and Familiarity of Tools
As with any craft, craftspeople must be familiar with the tools of their trade. Becoming an expert means more than just familiarity but also precise use of those tools.
For software engineers, our tools are Frameworks, Libraries, and Platform Services.
Application of Techniques
Techniques are a key part of a craft; techniques differentiate between a quality product and a mass-produced one. As a craftsperson, we should constantly be focused on improving and learning how to apply the techniques of our craft.
In software engineering, Design Patterns, Algorithms, and Standards are our techniques.
There is the concept of apprenticeship in many crafts where an experienced expert will teach and mentor an upcoming apprentice. While schools often can teach a trade, the mentor and mentee relationship offer more than just knowledge. But rather a transfer of experience.
In software engineering, this is seen as mentoring, which can happen both organically as part of a team structure or through personal relationships.
Pathway to Excellence in Engineering
Pick a specialty and focus on it
There are many specialties within Software Engineering, Machine Learning, Distributed Systems, Web/"Full Stack," etc.
Find a specialty that interests you, and focus on learning as much as you can about that specialty.
Learn about other specialties
While it's key to specialize in a subject or two, it is just as important to be aware of the other specialties.
Having a little experience in other specialties can give you a better perspective on your own specialty.
Take time to exercise your skills
Like any skill, Software Engineering (coding, design, etc.) can degrade over time. It's important to keep your skills sharp by using them daily.
If you find yourself over-indexed on one skill i.e., Coding or Design, do these things*:
- Create dedicated time in your day to practice this skill
- Have a side project that allows you to practice
- Contribute to Open Source as a means to develop a skill
- Contribute to Innersource as a means to develop a skill
* These can be worked into your 9-5 job and do not have to be "extra" or "at-home."
Know what's next in the Industry
As you specialize in software engineering, you need to be aware of and in tune with the future of that specialty. Technology is ever-changing; what is new today is tomorrow's legacy.
Use social media, blogs, conferences, meetups, or foundations like CNCF.io to date on new technologies.
Experiment with new tools & techniques
As you practice your skills and work to hone them. It is important to incorporate the new and upcoming technologies you learn about.
Make them part of your side-projects, contribute to interesting open-source projects in your space. Experiment with what's next so that way you have the advantage when tomorrow's technology is today.
Find Mentors and Mentor others
It's important to have a couple of mentors that you can learn from. Different people have different perspectives. It is best to pick mentors invested in helping you and give you a different perspective than what you have today.
Just as important as it is to be mentored, it is important to mentor others. Not only can you provide a unique perspective and experience to another. To teach something, you must know it well enough to explain it. This often pushes you to understand your own experiences better.
- Reach for Personal Excellence in anything you choose to pursue in life
- Treat Software Engineer as a Craft, because it is
- Constantly sharpen your skills, strive for precise use of tools and techniques
- Identify your skills and specialties, set yourself up to learn those you are interested in
- Create the opportunity to experiment and learn with side projects or open-source
- Bring others along with you, mentor, and be mentored. Be coachable and listen to others you respect.
Principal Engineer - American Express
By Benjamin Cane