Skip to main content

Software Engineer

Recently my company expanded the Software Engineer positions in my team. This leads me to thinking about the skills which are necessary for these positions. So I prepared a list of qualities which I think are important for a good Software Engineer.

Abstract concept modelling
This is essential and there is no room for discussion on this because this is what we do.

Love to code
It does not matter if you are 15 or 50 or if you write code 10% or 90% of your time, code writing is crucial.

Team player
The surgeon style teams (one genius with helpers) are obsolete, I prefer real team players who are able to work towards a common goal and share responsibilities.

Communicative
Silent geeks siting in the corner with a notebook on their knees are not cool any more, we need to talk to each other, we need to be able explain technical stuff to non technical managers, we need to be able to choose the right phrase at the right time.

Take responsibility
There is no quality without responsibility, orphaned code is a ticking bomb. 

Passion for problem solving
Every day we face a lot of technical problems, so solving these problems must be pleasurable, otherwise it is just pure misery.

Getting things done
Not every one is able to finish what they start, I appreciate fighters, quitters are not welcome. 

Craftsman
When you are doing something for the first time it takes a lot of time and effort and the result is not satisfactory, it is important to learn from your mistakes  so when you do it again you do it better, you learn on the way.

Do re-factoring
This should be obvious.

Use best practices/patterns
We do not have a time to re-invent the wheel every time, if there is a known way already - just use it.

Write tests
Testing is sometimes considered annoying and not so cool, but without good testing we cannot be confident that the system is correct.

Leverage the existing code
Not all legacy code is pure evil, if you do not understand it - just try it, maybe it needs just a small re-factor.

Focus on end user usability 
Yes, we doing it for the end user, do not forget that.

Understand principles
Not only brand new features of framework are good to know, but also basic principles (maybe 20 year old) are also necessary to know.

Document wisely
At any level of programming: architecture, design, decision reasons, API - It is always wise to keep blue-prints for future reference.

Comments

Popular posts from this blog

Senior or Junior

Usually companies call young employees Juniors and more experienced Seniors. Sometimes you need to just sit and wait and it will come. Sooner or later. From my point of view it is not enough. I met a lot of old employees they call themselves Seniors but they behave like Juniors. So I defined my point of view on Seniority: professional simple understand what I am doing and understand reason why I am doing it can coach others this is very basic; who can coach others is just fine but who can coach others to became a new coaches is super not genius but have deep knowledge on some specialized parts geniality is overestimated, we do not need "magical guru", to be expert is good enough; if you are "one to go" when there is problem, it is OK big picture overview it is not probably possible to understand a whole system in details but it is necessary to have at least overview know what I know and know what I do not know to see myself in correct light is very

Anti-Lean Quotes

Set of quotes which usually highlights Anti-Lean behavior Create waste instead of Eliminate waste ' Developer who is not working at least on 4 projects is not properly utilized ' - less is definitely more and only done-done work counts by end of the day, limited work in progress is helping to focus on right priorities ' In case of any network issues please create a ticket on the help desk system at our partner's web-page' - creating catch 22 situations by design is craziness, such a process does not make any sense 'Yes, this is what our customers really need but could we add also this small feature, just in the case?' - extra feature creates an extra complexity, it is better to stay focused on real value and make it great for the users ' I know that you are working on the top priority but I am sure that you can do also this small task till noon' - probably there will be nothing really done by noon, task switching is more expensiv

Scrum rollout

Would you like to start with Scrum in your team? These are few hints from my experience how to make this process smooth, iterative & incremental: get commitment from the management & team define reason: why would you like to do Scrum? what problems it should solve for you? start with simple Kanban in one team: it is easier, you just need to manage 3 lists: backlog (todo), work in progress and done  focus on right priorities of backlog - person who defines the priorities will be 'product owner' setup quick way how to track work in progress and indicate 'impediments' -> daily stand-up; max 15 minutes meeting every day - moderator of the meeting will be 'scrum master', he will be also responsible for solving the 'impediments' focus on dependencies between the tasks to avoid 'impediments' start to put 'discoveries' into the backlog to pre-analyze tasks; discoveries should be done by architect or analyst what is the busi

Agile is not a religion

It is quite annoying to me when argument during discussion is like this:  it must be XY because the book says it. It is kind of: Bible is saying XY so we have to follow = end of discussion.  I am not very happy in such a case because we probably do not understand principles and just trying to blindly imitate something without deep knowledge of the matter. I prefer to admit it or show personal standpoint.