Guide To Efficient Software Engineering
March 20, 2024
Aakash Dave
Imagine this - you're a college student exploring internships and preparing for the workforce. You discover that software engineering is more than coding; it's about engineering solutions. As a novice, you might be eager to try different technologies and methodologies. That's great, but remember, your primary role is to solve problems efficiently. As an experienced engineer, I'll share insights to shape your approach to software engineering.
Let's dive into some actionable points.
✅ Right stack over the latest stack
Don't go for the latest tool to build your software; instead, use the right ones that best suit your use case. When you work with experienced engineers (not just coders, engineers), a single important piece of advice you'll get is to pick the right tools that solve the problem statement, that can quickly stand up a scalable system and move the wheel forward.
🧑💻 Keep things in-house
As you progress with your programming endeavors, you'll realize that you want to control the process as much as possible. And by the process, I mean the tools and the flow of the data. This could only be achieved if you are building more pressing tools in-house. This is not always the right solution and in fact, there is no one-size-fits-all, but it gives you a wider technical scope to play around with. Take this as an example, you want to build a social network, where the data types could be variable, then you are left with 2 options.
a. Choosing a BaaS, like Firebase, Vercel, etc., which limits your control on the stack could potentially create roadblocks in the beginning. You also have to adhere to their policies and dependencies.
b. Building an in-house backend. This might take a little more time, but will give you maximum opportunities to mold your process the way you want. No relying on packages, dependencies, or deprecated issues. Just straightforward work.
💪 A Robust Yet Flexible System Design
Since we mentioned in-house development, here's another thing - the system design! Building software is not just a bunch of code or services put together. It's a harmonious sync between the movement of data within each pipeline (client or server). Your prime goal should be making a flexible, yet a robust system that can handle a decent scale (since you are starting out. As you advance, you'll gain experience on how to build large scale items.) Your systems should be prepared for various surges or traffic and you should have answers to optimizing or building on top of the current architecture.
😎 Be a Google pro!
Working on complex problem sets brings challenges in your development process. It is crucial to have the right approach to finding solutions, i.e., Googling, developer communities (like StackOverflow), or just going through documentation. This is a gradual process, but it's immensely beneficial to start now. It, in fact, even comes down to how you input a query in Google. Let's say, you want to find a way to determine if a block is in the center of the screen, most people would start with the following option:
a. Google "how to know if the div is in the center”
b. Instead, this query would fetch you leaner results "StackOverflow js determine if div is in center"
🤝 Communication is the key!
Be a good communicator, your life will become much easier. The better you can deliver your ideas, the more successful you will be at engineering great products. Communicate, ask, or just discuss, a lot of software engineering is about collaborations.
🚀 Prepare well, execute better!
Fred Brooks once said, "What one programmer can do in one month, two programmers can do in two months". Keep in mind, wasting too much time after just conversations or ideations is just not efficient. Take up tasks, split the workload, and set serious deadlines, that's how you'll progress with your development. There is no such thing as a perfect system, so don't waste time doing that. Things will get better as the system continues to be used by the users and you'll keep on optimizing it.
Overall, Software engineering is a skill that develops over time with experience, not something that could be just taught in labs or with books.
Tell us what do you think about this, or share it with the ones that may find this helpful.
⚡️ That's the ethos for Colab!
Train to be directed to pursue these goals, work with experts on serious pipelines of development in a collaborative setting that gives you an exact look into how the real world works.
Catchup sessions announcing soon.
Cheers!
Made with 💜 in San Fransisco 2024