Remix.run Logo
crystal_revenge 9 hours ago

My immediate reaction to this question is: "your team's". Nothing will teach you more about how to design software then really understanding why good and bad solutions were adapted to solve a certain real problem.

Software exists precisely because there is still a messy layer connecting user requirements to actions on a computer. If there was not messiness then we could just automate it all. Approaching software from some sort of Platonic ideal of what software should be will frequently lead to bad decisions on it's own.

When you start to see how certain pressures lead to certain paths you learn to recognize the wrong decisions that are often good at the time, and avoid them. At the same time, you need to learn to develop methods that work quickly and effectively. By far the biggest real challenge in real world software is time constraints. This is almost never discussed in theoretical views of software, but the truth is you're always going to be writing code under pressure to ship. You will come across situations where you do not have time to do what you want to do or think is best.

Good software is software that runs and solves the user need, but you will come to realize that there are design solutions that will make successfully running happen more often. The best way to find these is to study the real software you're writing.

teiferer 9 hours ago | parent | next [-]

What if the question is born out of the insight that his team's software is poorly designed, motivating the desire to get outside input?

What if the question is asked by a college student?

lukan 8 hours ago | parent | next [-]

Then it still matters a lot what kind of codebase he is working on. A web project is differently structured and done than the codebase for a embedded operating system. There are differend standards and practices in the industry.

I learned a lot by just stepping through the code with the debugger of libaries I used. That brought more practical insight while learning about design patterns etc. In the end, it is all about patterns. Finding the right pattern for a given problem.

pixelworm 8 hours ago | parent | prev | next [-]

I would be interested in recommendations for those who have a poor example or no examples

In my case, I'm a junior engineer that has recently been given more responsibility designing aspects of our product. I'm just trying to learn all I can so my designs will be good!

113 8 hours ago | parent | prev [-]

On forums like this people have a frustrating inability to answer the question asked.

pixelworm 9 hours ago | parent | prev [-]

I haven't considered time to implement as a metric for evaluating design, but it makes a lot of sense.

I definitely learn so much from my team's codebase. Most of what I learn is either from the good designs I see in there or from my googling trying to fix the not so good parts.