What it takes to be a Software Engineer
Warning: subjective opinion inside

I'm an "old-school" Software Engineer, mostly specializing in C# and .NET.
Currently in the process of discovering AI and Machine Learning.
Search for a command to run...
Warning: subjective opinion inside

I'm an "old-school" Software Engineer, mostly specializing in C# and .NET.
Currently in the process of discovering AI and Machine Learning.
Your article clears my doubt regarding difference in responsibilities between a Software Engineer vs. Software Developer. Very well explained👍👍
Since the inception of LINQ, methods suffixed with 'By' have played an important role in simplifying LINQ operations by introducing an additional 'selector' parameter. A typical example is the OrderBy method. Without the selector parameter, even a st...

One key reason I find myself drawn to social media is its power to inspire through the diverse perspectives of people. People tweeting or blogging about stuff they do or like, youtube videos and podcasts on different topics, all of these embed little...

Whether you're a seasoned Microsoft tech stack developer or just starting out, this tutorial is the ideal place to begin your Python journey. And, to sweeten things up a little bit, you're going to use ChatGPT to help you get started! Without further...

In line with the title of this blog, I'd like to start posting articles about languages, tools and technologies that I got a chance to use recently. One of the technologies that I was lucky to learn is PostgreSQL. I have always been an avid Microsoft...

Shakespeare will hopefully forgive me for abusing a line from his famous Hamlet. In my post, I won't be covering questions of life and death, but rather something much more prosaic - a lesser-known LINQ materialization method - ToLookup. We all know ...

People often wonder (and argue) what is the exact role of a Software Engineer and maybe even more what is the difference in responsibilities between a Software Engineer vs. Software Developer. This is a broadly discussed topic and people often have highly differing opinions.
With this post, I'm not making an attempt to compile a comprehensive list of all materials available on the topic. I'm merely giving my own, entirely subjective view, based on my past experiences.
OK, let's dive right into it...
The core quality of a Software Engineer is that he/she is capable of fulfilling other roles in the product development life cycle, other than just developing code.
Here is my compilation of the additional roles:
Participates in creating or refining requirements.
Meets with the Product Owner and helps him/her understand technical aspects of the developed solution.
Helps with creating both LOE and detailed estimates.
Creates models, diagrams and if necessary, defines APIs.
Has a good overview of available technologies and design principles, in order to be able to come up with technology proposals which are best suited for each part of the developed product.
Does research on various types and levels of tasks, starting with simple development impediments (solvable by a stack overflow search), ending with a thorough analysis of a technology, API or library to be used for a new product or feature.
A software engineer's knowledge is not limited by one application "tier" (client, server, database), programming language or technology stack. The grasp should be broad, giving him or her the ability to tackle or at least understand all the tasks and challenges which may arise during the application development lifecycle.
Understands how to use different debugging, profiling and troubleshooting tools and techniques.
Maintains development and testing environments (e.g. SQL Server instances).
Troubleshoots performance of queries and stored procedures.
Understands database schemas, knowing how to generate database change scripts and scripts for shuffling data around.
Sets up and manages builds and deployments.
Sets up and manages development, test and staging environments.
Recognizes the benefits of continuous delivery and knows how to implement it.
Helps QA with spotting and identifying bugs.
Writes bug descriptions, including sensible steps to reproduce.
Quickly creates sample and test projects to help others with troubleshooting.
Effectively communicates with the QA team (leaving unnecessary emotions aside).
Understands the importance of documentation, starting with code comments and ending with comprehensive user guides.
Has solid writing skills, able to express development-level knowledge of a certain topic in a user-friendly way.
Uses tools for auto-generating API documentation.
Helps other software developers with solving their issues.
Participates in onboarding newly hired colleagues.
Prepares technically oriented "lunch and learn" (or similar) sessions.
Carries out resume-based and phone screening of candidates.
Participates in the interview process, evaluating the candidate's attitude, aptitude and technical abilities.
Gives valuable feedback to the manager to help him/her decide on whether to hire or not.
Has solid communication skills to be able to effectively communicate with the tech support staff, or sometimes directly with the customer/end-user.
Reproduces and troubleshoots issues from (sometimes) partial or unclear descriptions.
Has a solid understanding of the hardware and software that he/she is using and can maintain and troubleshoot it (to a certain level).
Has enough knowledge about basic security principles and ways how to mitigate security risks and vulnerabilities.
Is able to effectively fix most hardware and software errors by "turning it off and on again". 😉

Again, the list above is highly subjective and by no means comprehensive. To me though, each of these skills represents something that requires a software engineer to go a step further from what is traditionally requested from the software developer role.
What is your experience? Would you add something? Please, comment!