There are many definitions of success when it comes to being a successful software engineer. To me being successful as a software engineer comes down to having a set of core values that you try to stick to when selecting the right job, contract, or fun project, and sticking to those core values that you set for yourself.
Core values are similar to goals, they are actionable and easy to follow, but unlike goals they are something you can and should do now, not sometime in the future. Every one will have a different set of core values. To be successful you have to come up with your own, but I will share my core values.
Honesty and Integrity
I will not lie to customers, I will not engage in deception. I will answer questions honestly when asked. If I can’t do something, or don’t know how to do something, I will tell you. I will spend the required time learning how to do something I don’t know how to do. I expect that those I work with to act the same.
Freedom from work
I want to pursue learning, side-projects, and family activities. I love software engineering, but I am unwilling to sacrifice those things I love for someone else’s vision or dream. I am here to help you succeed, not to kill myself to help you succeed.
Lifetime of learning
I want to learn new things, and I want the people I work with to want that as well. I want to attend conferences. I want to see the side projects my team members work on and I want to be part of a culture that encourages learning and growing.
Being rewarded
I will learn new things and I expect to be rewarded for continued improvement. I thrive on feedback. I will integrate what I learn to perform my job better. In return I expect this to be recognized through greater responsibilities and higher compensation.
Conclusion
Those are my core values. My core values might change over time, but they have not changed over the past ~7 years of my professional software engineering career.