6 Months Of Full-Time Software Engineering

February 9, 2025 (10mo ago)

9 min read

I have been coding since high school. Started with robotics then switched to Web development and Infrastructure and now to Machine Learning. I did freelancing, a part-time job, and my own apps. However, working as a full-time software engineer helped me to realize a few things. In this blog post I'll explain these:

cover

1. Abstraction and Data Modeling

Before starting any project you should spend a remarkable amount of time for system design, data modeling and abstractions (e.g. interfaces, classes etc.).

At first, this might seem like a waste of time from the coder's view, but in the long-term project building timeline, this step will save more time than you could imagine.

Understand your project or business domain deeply, write it down if it is necessary, and think about the processes of your business logic. What can go wrong? And what can you improve?

Remember: coding is the easiest part of building a software product.

2. Design Patterns

This step is crucial while writing code. Full knowledge of design patterns will make your coding process as smooth as you've planned.

This kind of design pattern is also useful for peer coding. If your codebase has more than one developer, this pattern provides you with some kind of common language and makes your code easy to understand for other developers.

3. Picking Up The Right Tech Stack

Every tech team has their own tech stack. If you are not working on a startup, it's most likely you are using some conventional tech stack like .NET or Java. New generation software developers are tempted to use cutting-edge tech stacks when compared to conventional ones, like NextJS, Golang, or maybe Rust. But tech stack compatibility is important if you are working within a team.

4. Ask Questions

This one is the simplest yet the most important thing. Ask questions. I mean any kind of question. It might sound silly or simple to you but ask it. You'll save more time and maybe you'll learn something valuable from the answer you receive. But knowing how to ask questions is also important.

Learn more about asking questions

5. Use AI But Not The Wrong Way

I have been thinking about that for months since working as a full-time software engineer. Should I use AI for my projects or not? I have tried each way and I think it is more important to know how to use AI for your projects. If you are using AI for just giving code and copy-paste the output, it is most likely you'll learn nothing.

Every product is a solution to a problem. So by building a product, you are solving a problem. And if you are avoiding solving these problems, how are you going to learn anything valuable from that problem? How are you going to act when you face these problems again?

LLMs are good at explaining hard topics in easy ways. You can learn complex technical subjects by talking with them or you can ask for code for your project, but instead of just copy-paste, at least write the code yourself and understand what has changed. The task might seem simple or your lead wants you to hurry up, but try to learn something.

For example, when you want to display an array on your monitoring page, you might need to use some kind of sorting algorithm. For holding data on states in React, you might need to use some Data Structures. If you let the AI do all of these on your behalf, you cannot learn anything as a software engineer.

6. Error Handling

I have been coding for 6 years now. Each project I have worked on was a small application. Either they were school projects or side projects that have never been published. As developers, we are likely to think in an always positive way. We don't like to think about bad scenarios. But for production, you must always consider what might go wrong. This could be API calls, storage issues, sorting algorithms, timing problems, etc.

Always cover yourself. Do not forget to use Try-Catch or use middlewares if you can.

7. Performance

As Engineers, our goal is to solve problems in the cheapest and fastest way. In order to achieve this, you have to understand how these systems work. How does system storage work? How does parallelism work? What are the system architecture designs for your business domain? How can you make it faster or smaller?

You can build anything. You can do it always faster, cheaper, and smaller. You can do it better. Instead of focusing on a new programming language, focus on these topics and be a better engineer. Do not be just a developer, be a software engineer.