What does it mean to be a Software Engineer today? What are the characteristics of a Software Artist? Recently I’ve been struggling to find my own answer to that; based on discussions I had with many talented and smart engineers. I was looking at challenges they face and the way they work within their teams and organizations. Those talks and my recent experience induced me to think about my subjective view of a true Engineer, the inherent qualities and the DNA of a true Software Artist. It led me to a list of key points, some of which I want to share with you here
Innovation time is integral aspect of your work and not something that companies give to you.
In my view companies introducing 20% or 10% time for innovation or sparks are trying to remind all of us that this should be natural part of our work. Developing ourselves improves the quality of software we provide and makes a priceless investment in company we work for and the future deliveries we are going to provide. So forget about doing it only when you are allowed – it’s is your moral obligation to include it in your daily work. You do not need special rule for it, just as you do not a need ridiculous rule allowing you to think for 50% of the time, discussions with the team for another 20% of the time and so forth. Creative work requires different stimuluses and innovation time is one of those,as important as brainstorming, discussions, team work or just plain thinking.
Understand the “big picture” and how your work is affecting the team, business and organization around you.
To give you an idea of what I mean here start by answering following questions: What is it that your application is trying to solve? How will your change influence the production environment? Are your changes designed with continuous deployment in mind? Do you understand what are the biggest wastes around your team’s delivery? Are you aware of the benefits of the data-driven decisions? Do you take into consideration the operational risk of your choices? How do you know how fast your team is delivering and if it’s improving? It’s all about understanding big picture – the business, organizational and process aspects of it. Understand the world around you and use it to drive your priorities – always have global picture in mind. It also means to be open and to listen to people with different mindsets such as operations, business or quality assurance experts.
Sometimes doing nothing is more productive than trying to deliver something
Challenge solutions that provide short term benefits but in long term will lead to disaster. Fight for the software that is going to be signed with your name in version control. Do not be afraid to say “no” whenever you feel you are being pushed to cut corners and sacrifice technical excellence. Don’t be fooled by declarations will be fixed tomorrow – tomorrow never comes in software. And of course – we are living in complex world and in some cases there is no other choice than to provide crappy solution but I bet it should happen less often than it actually does.
Pursuit best the technical solutions that you don’t know that you don’t know.
Whenever someone wants you to fix a difficult problem try to assume you’re at the 2nd order of Ignorance and the best possible answer is the one that you don’t know that you don’t know. This way you will be able to challenge yourself every day, you will be struggling to find out what you don’t know that you don’t know, you will be challenging the organization around you. It is something more than just thinking out of the technical box you are in, you have no idea how many other boxes there are and what you can found in them. Potentially shippable is simply not enough nowadays
Own your career
Find out what motivates you the most and make sure you know what you want to achieve. Find your purpose in the work you’re doing, make sure it gives you autonomy about how and when you are delivering. Continuously improve your software mastery and craftsmanship. Don’t be misled by judgements assuming that talent is the key factor to success – it’s not. Hard work can get you anywhere you want – choose the destination and every day make a step towards it. Not so long ago I hated the question “where you want to be in 3 years time?” – but knowing the answer to it is probably an unavoidable aspect of a well defined career path.
Last but not least – experience in different environments and organizations is an inherent aspect of mastery. Get to know the breadth and depth of technology that is used to build modern software. Gain thought patterns that are curved by your past and will help you to make better judgments now and in the future. Listen and read a lot more than you talk and write. It simply takes time to be proficient in providing simple and at the same time maintainable and extensible software solutions.
So there it is – my first public thoughts of 2016, stay tuned for more…