As part of my job at AND Digital I've been thinking long and hard on a number of topics surrounding the technical side of software engineering. I've been trying to work out what makes a good software engineer, especially a good software engineer in the consultancy business.
There are, for me, two types of principles that should guide a Software Engineer on their career: Behavioural and Technical. Technical ones are pretty easy to codify but behavioural ones are harder:
- Be curious - The technology you're working on today will not be the technology you're working on in 10 years time. Remember, the internet has been around less than 30 years, the Cloud less than 20. Look out for new stuff but never focus on just one thing/technology. "Front end" 20 years ago was desktop apps, now it's wildly different and diverse. Keeping up will be a wild ride!
- Be open - Be open to discussion. Be open to feedback. Be open to new ideas from others. Be open to thinking up new ideas!
- Be challenged (and challenging!) - Don't be afraid to defend your opinion! If you're wrong, then that's fine, but if you're right then you might just change the way something is done. Also remember that this is consultancy, we only get called in?if the job is hard.
- Be humble - You might be the smartest person in the room but lets be honest, you're probably not the best at everything a project needs. You can learn something from everyone so be humble, admit your deficits and learn something.
- Be respectful to others - Other people, especially those that are non-technical, will probably have the greatest influence on the projects you work on. They're your stakeholders. You work for them. Remember they don't have your technical ability but they have a wealth of other knowledge. Respect them by communicating in a way that is clear but understandable. They'll be doing the same to you.?
- Be honest - Honesty is a very powerful concept. Combined with tact, it builds trust within teams and with clients. No one will ever want to hear bad news, but the earlier they hear it the better.
- Be professional - We're in a service industry where our reputation counts for everything. Acting with professionalism is key. You'll earn respect, do a quality job and, ultimately, lead to more work for AND.
- Be better - Try and be better than you were yesterday. It's not always possible, but keep trying.
In terms of technical principles, they're easier, there are plenty of articles around that will tell you:
- Don't repeat yourself (or others) - Reduce code by re-using your solutions. Oh, and someone else has probably already solved elements of your problem. Don't waste time re-implementing something.
- You ain't gonna need it : Don't over-engineer - Just deliver what is necessary and sufficient. Anything more is a waste of your time and the client's money.
- Keep it simple - You are not Google/LinkedIn/Microsoft - Do you really need that big shiny enterprise technical solution, that Kafka instance? Are you really solving problems as big as those by Google or LinkedIn? No. Consider what's appropriate to the situation.
- Keep up to date - Your skills, your platform, components and tooling. You'll get the benefits of constant improvements, and for the tooling all the latest security patches (and new bugs, but better to patch the known knowns).
- Be quality driven: Test Driven Development, Behaviour Driven Development, whatever you do, ensure you're delivering quality, and you can prove that it's quality. Not necessarily perfect, but high quality.
- Automate everything.
- Own the process - Be able to do everything in out some of this stthe development and deployment process from BDD tests, feature development, infrastructure as code, through to delivery.
- Adhere to the SOLID principles.?
I think, all too often, we focus on the technical to the exclusion of all else. If I think back to 1997, when I started my first job in the industry (yes, I'm old) my interpersonal skills have improved exponentially but I'm still a huge work in progress. But the thing is, we all are. Trying to get all of the above right is tricky. Some things you'll improve today and it might feel that you've slipped back on something on a bad day/week/month/year, but over time, if you try and improve something every day or two then the improvement will be massive over time.
And yes, I still get nervous talking to groups of people, I did when talking about some of this stuff to my colleagues at AND. I probably always will. But I'll try and be bold, be honest, be open, and be the best version of me that I can be on that day.
That's, I guess, my 'worldview'. What about you? It's always worth taking a step back and think once in a while!
Technical Communications Consultant
3 年Really good article Tim! Makes me wish that I could still work with you ;-)
Good article Tim! The only thing I can add is an extra part of keeping it simple - keep it simple and maintainable. If the solution uses different technology or is written in a different programming language, then it's going to be harder and more expensive to maintain. Sometimes a more complex or expensive solution is better if it's more like the existing infrastructure or systems.
Senior Product Owner - Cloud; Lloyds Banking Group
3 年Great article Tim! I like that a lot of points apply to other roles, too. Great reminder of what we should be like ??
Principal Consultant AND Scrum Half at AND Digital ??Technology ?? Strategy ?? Leadership ??
3 年Very good Tim Allen ??
Co-founder @ The Define Group | Ethical recruiter and coach who cares about sustainability & people's wellness
3 年I absolutely LOVE this article Tim Allen. An easy digestible read that IMO is completely on point. Thanks!