Most will imagine things software engineers do as likely sitting in front of a computer typing code all day. While coding is certainly one activity carried out by programmers, it’s not quite an accurate description of what it takes to produce functional software.
The art of creating software is a lot more than just writing code. Let’s look at some stats to back this statement up.
A developer survey performed by ActiveState with 1,250 responses showed that 61.52% of developers spend 4 hours or less programming on a typical day. And only 10.56% spend 8 hours or more programming on a typical day.
Another developer survey performed by Tidelift with 295 responses shows developers only spend 32% of their time writing or improving code. The remaining 68% of their time is spent on other duties such as testing, maintenance and admin tasks.
What activities apart from coding are arguably as critical in the process of developing software? Let’s look into 10 of these other essential things software engineers do on a regular basis.
1. Researching and planning
The initial stages when commencing new development projects will likely involve research on the suitable technologies, toolkits, libraries, development environments, programming languages and any other necessary tools.
Depending on the scale of a project, engineering teams may plan to dedicate efforts in performing research to confirm validity of the projects concept.
The efforts placed in a validating phase is usually referred to as a Proof Of Concept (PoC). This is when intentional efforts are placed to prove the core concept of a project can be successfully delivered. This will occur before officially launching execution of the project and before significant time and resources are allocated.
Proper research of the tools and technologies required and placing effort in planning the projects execution is worth the investment and will ultimately save time in the long run.
Documentation is useful for exchanging and handing over knowledge and therefore writing documents is a large part of the things software engineers do. Documents also provides a formal method of communication amongst all parties involved in a project such as development teams, stakeholders and end users.
Developers experience a 55% increase in productivity with good documentation – GitHub 2021 developer survey
Functional specifications, architecture design, flow diagrams, READMEs, bug fix reports, testing reports, release notes, user guides… These are some of the common forms of documentation and records generated by software development teams.
3. Gathering Requirements
Whether writing up requirements or interpreting them, requirements are the base-line of what is ultimately translated into a working solution.
Software engineers are fundamentally problem solvers and therefore, understanding the needs of customers is essential to the success of a project. In an ideal scenario requirements inform what customers are looking for which is then made into reality through engineering efforts.
However, the work involved in properly capturing requirements can be underestimated. Requirements can change over time, be misunderstood or communicated poorly. This is why placing sufficient efforts in capturing and executing requirements is one of the essential things software engineers do.
4. Maintenance Activities
Code needs regular care and the process of writing code will always involve follow up maintenance work.
Refactoring, tidying up, releasing bug fixes or paying back Technical Debt are some forms of maintenance work carried out by developers.
Developers spend 35% of their time on maintenance activities – thenewstack analysis of the Tidelift developer survey
Open source projects typically have a dedicated person or team that oversees the repository who are called open source maintainers. Open source maintainers perform many duties often not related to writing code such as code reviews, updating documentation or merging pull requests.
The upkeep and support of the components that make up a software project is certainly an important part of the things software engineers do.
Analytical and problem solving are key skills required of software engineers and this especially comes into play when debugging issues. Debugging usually accounts for a large chunk of the efforts involved in the process of developing software.
“If debugging is the process of removing bugs. Then programming must be the process of putting them in” – Edsger Dijkstra
Unless you write perfect software, there’s no way out of having to debug at some point in every project. Debugging activities can involve taking part in a root cause analysis, studying API reference manuals, using IDE debug tools or googling for an answer to your programming problems.
Coding is an art and so is debugging. Learning to debug problems in a systematic way and resolving them is a key part of the things software engineers do.
6. Reading Code
Reading, studying, analysing, interpreting code also comes part of the package in the role of programmers.
The ability to read and understand other people’s code is arguably as important as being able to write it especially when working in teams.
Reading code written by others often requires patience, after all, you’re attempting to understand the thought process of how someone else or a group of people formulated a solution to a particular problem (or attempted to!).
So while programmers write code, we also certainly spend lots of time staring at it, perhaps a bit too long at times…
Proper planning and execution of tests are critical in increasing confidence in the solutions robustness, reliability, security and overall functionality.
Testing activities performed by programmers can involve: drawing up test cases, smoke tests, unit tests, integration tests and end-to-end tests.
The concept of Test Driven Development (TDD) is becoming increasingly common where test planning and creation are prioritised and implemented early in the development stages.
Part of the things software engineers do apart from coding should be testing, and doing lots of it.
8. Attending Meetings
Sprint planning, daily stand-ups, brainstorming sessions, feature discussions, resource allocation. These are just a handful of the many different types of meetings developers may attend.
It’s all about communication and meetings can be impactful in improving collaboration.
Software developers/engineers spend 14% of their time in meetings.
Software development/engineering managers spend 30% of their time in meetings. – thenewstack analysis of the Tidelift developer survey
Although too many meetings can be detrimental to productivity, if done right it presents opportunities to collaborate with engineering teams and stakeholders and is therefore an essential part of the things software engineers do apart from coding.
9. Mentoring Others
Mentoring each other is vital in passing knowledge to the future generation of developers. Within teams, senior engineers are often expected to act as a mentor to those in junior positions.
Mentoring can involve but is not limited to: passing on learnings from your personal experiences, providing training, peer programming or providing coaching and career advice.
A willingness to teach and patience is a requirement for people who want to be a mentor to others.
Read more about tips on providing encouragement and support to junior software engineers.
“Never discourage anyone…who continually makes progress, no matter how slow.” – Plato
10. Upskilling and Learning
Investing in your knowledge is critical due to the rapid changing nature of the software industry. A technology that may be popular today may not be quite so popular a few years later.
Being intentional about diversifying your abilities will increase your flexibility in taken on different roles and will in turn make you more employable.
Building up knowledge will also improve your confidence as you’ll feel more prepared to adapt to new roles and industries if you ever need to (or are forced to) take a shift in career direction.
Consider picking up a new programming language if you feel yourself becoming stale or bored of using the same language for every project. If switching to a new language is not practical for the type of work you do, consider picking up a side project or get involved in open source projects using different languages and tools to what you’re used to.
Other ways to expand your knowledge portfolio and interests are through books, training courses, bootcamps, webinars, conferences or just google!
We explored 10 essential things software engineers do apart from coding that highlight the diverse nature of the role. While writing code is one side, there are other activities you must also be prepared to perform to become a well-rounded software engineer.
It’s also important to note the time spent on non-coding activities will also depend on specific roles the individual plays in the software project. For example, someone with the title of an engineering manager is likely not spending as much time coding as a full-stack developer.
Do any of these non-coding activities surprise you? If you work as a developer, what activities apart from coding do you spend most of your time on?