Describe the day in the life of a software engineer.
#Softwareengineer #WomeninSTEM
5 answers
Lane’s Answer
Hi Jessica!
Great question! I'm relatively new to the software engineering world, so I know best what it's like to just be starting out. Hope my experience is helpful :)
The first thing I'd say is that my job is really project-focused. I tend to be working on one "feature" at a time, and I'll take that feature all the way from being an abstract idea to it actually being out in the real world before starting on my next project. On average, I probably spend about 85% of my time working on things directly related to my feature and the other 15% on things related to helping other people with their projects.
When I am working on my feature, I am usually doing one of three things.
First, I might be thinking about what my feature is supposed to do and/or what it is supposed to look like. Normally, these kinds of decisions are made mostly by other people -- like product managers or designers -- but I get to give input, too. This kind of work can involve sketching out little diagrams on paper or on a whiteboard.
Second, I might be thinking about how I want to best structure my code to achieve those functionality and design goals. There are often many ways to do the same thing when you are coding, and so I spend a lot of time at this step trying to figure out which way makes the most sense. This kind of work can involve looking through our codebase to see how people have done it in the past or asking people who are experts in certain particular areas.
Lastly, I might be actually writing and debugging the code that I thought out in the previous step. This step is often the most time consuming and it's what I spent most of my day doing. This kind of work can involve writing code, running it in our development environment (a place we can test code without affecting the real website), and then trying to see where things went wrong. As I've grown in my career, I've been able to make this step take less time by spending more time on the previous steps -- I've spent a lot of time re-writing code because we changed the functionality or design after I started coding.
When I am *not* working on my feature, I am usually helping other people via our code review process.
In order to be able to "push" a new feature to the real website, you get must sign-off from other engineers that your code does what you say it does, meets certain style guidelines, and -- most importantly -- will not break anything. You get this approval by asking other engineers to do a "code review" of your code. In this process, they look through the changes you made and can leave comments or suggestions. Once they are satisfied -- often after a few rounds of back and forth -- they will approve your changes and you can release them out in the world.
To summarize, I spend most of my day working on the design or coding of my own project, but I also devote a fair amount of time helping other people with their projects. Being earlier in my career, I spend more time coding than more experienced people, who spend more of their time thinking about how things should be.
Hope that helps!
Daniel’s Answer
This answer will vary wildly based on the industry, company, specific team, type of software being developed, age of the project (new projects are very different from maintaining older software), how tenured you are (newer software engineers have different job duties than more experienced software engineers a lot of times), etc.
But the general job duties:
- Figuring out what code to write (getting requirements, understanding the problem space, maybe actually talking to customers, though you might have someone who does that for you if it's a big enough company, etc)
- Actually writing code (programming)
- Testing code, building test harnesses, etc (less common now, but sometimes testing is a separate job role)
- Deploying code into production (or maybe there's other people who do this for you)
- Fixing bugs
- Dealing with other production issues (things break which aren't necessarily code bugs, but still need manual attention to fix)
- Dealing with non-production issues that still cost you overhead. This might be explaining to other software engineers at your own company how to use stuff you built, or any other large number of ancillary problems/duties that come up.
Note that "figuring out what code to write" starts out as a smaller part of your job, but eventually balloons to take more of your time. It also may include a lot of writing documents, meetings to convince other people what needs to get done and how to do it, etc.
Lavanya’s Answer
Software Engineering is an array of multiple dimensions where each person has a different role to play in the process of the Product Development based on the requirement and their experience, ranging from them being the Subject Matter expert on the job or the developer of the task. I will try and encapsulate the tasks to make it more generic and suitable for most of the people.
Mostly, the day starts with checking the emails, messages on common channels, to stay up-to-date with what is going on. If something major needs attention, you need to restructure your day accordingly.
Next, Plan the day with the task you would be working on, schedule meetings , manage sync and async hours for the day and update your calendar and the team accordingly.
Now, this is where the actual work starts, where one would dive into the development process ( Be it dev, testing, devOps ) - catering to the role they play. I believe one of the most important traits of a Software Engineer is to be collaborative, and hence, there will be a lot of context switching in the day, answering any questions, seeking help from others etc.
This prolongs till the End Of the Day and then, most of the software Engineers I know work on either a personal project ( to improve their personal skills - something of their choice or technical skills )
Ashis’s Answer
Hello there!
Software engineer plays different roles based on the industry as well as experience. And work type varies depending on the which part of software development life cycle you are in. You can be a designer, developer, tester, deployment manager or maintainer.. or a combination of those. Many company encourages to have a combined end to end role under the "DevOps" culture.
When you are starting your career, in most cases some one will assign very specific task - to develop code that will take a set of input and produce a set of output. You may also get task to fix some code that may not be working as expected.
A basic task list for a developer will be 1. "check out code from repository", 2. "Modify or create new function", 3. "Compile/build your code", 4. "deploy in your sandbox/test environment", 5. "do basic testing (called unit testing)", 6."Push your code for fully integrated build along with all other components of the product", 7. "Let integration test (manual or automatic) verify over all functionality of product", 8. "Fix any issue came from step 7 by repeating 1-6"
If you are in quality assurance, you may test code written by another developer using different tools.. Many QA engineers also spend time automating testing so that quality check can happen automatically.
In most software engineering jobs, internet is your friend.. you get to research, test different solutions, learn new software. Many problems are already solved to some extent by some other person and that'll give a good starting point for you. The most important thing is to understand what key words you have to search for to get the solution you are looking for.
Amanda’s Answer
This is a fantastic question!
Like many have said, it depends on if you're new to to development or not and on your exact role. So, I'll just tell you about my experience! (I am a UI Engineer with mid to advanced skill set.) Here is what my day is like...
1) Check emails, clean them out. I like to get administrative work done at the start of the day. Then, I ignore my email for the rest of the day.
2) Check instant messaging tool (usually Slack). Most communication occurs here (not over email). I will be checking this all day, but I like to answer all major questions at the start of the day. And THEN I have warned everyone: I will not be regularly checking my instant messaging tool and I have turned off all notifications. Why? Complex/focused work can not be done at the highest quality if it is frequently interrupted. So, when I really want to (or need a break!), I check my instant messaging tool. Otherwise, I ignore it so I can get work done!
3) Ok, the actual work. It's still morning time at this point. Most Software Devs work on a large number of small projects, and only one at a time. So usually, I would pick up today where I left off yesterday. I am careful to leave myself detailed commit messages in Git and I also take detailed notes in our project management tool (often JIRA or Trello) or in my own personal note taking tool which now has hundreds of notes (Quiver). Today, however, I am in the middle of transitioning with my team to a new part of our system. Guess what that means? Tons of learning! I have spent the last three days reading documentation and reading/doing tutorials. I have learned so much! (This can make you tired.) So, because I actually finished reading all relevant docs yesterday, today I was able to start asking more questions about the project! At the start of a project, there are usually many questions you have to answer. You can't work on what you don't understand! So, I contacted about four different people and found out what those teams are doing in relation to my team's project (so we don't step on each other's toes). This is very important! Lots of coordination between teams. I have written down what I learned in our project management tool so this learning is not lost and we (my team) knows what to focus on next.
So that's what today looks like! Today happens not to be a normal day... Other things I will do include
- writing code
- talking with someone else about the best way to solve the problem I'm trying to solve (I am probably showing them my code at this moment)
- reviewing someone else's code (this is very important! we all check each other's code before it gets merged)
- talking with Product people to find out what we are about to build, asking lots of questions, clarifying things
- taking screen shots (and drawing arrows on them) of problems on our web site
- chatting with my team every day (we meet for 15 minutes or less to share our daily status)
- talking with my manager - he helps me vent my problems, understand social dynamics/politics/etc, and progress my career
- talking with other devs like me to learn what's going on in the industry or to talk about fun projects to possibly tackle together
- writing tests or updating documentation - very very important!
- sometimes I write articles or prepare classes/presentations - teaching what you know is the best way to learn it far better
- take breaks - breaks are important - have fun!
I really hope this helps! Best of luck to you in your career Jessica!