How to get better working on complex projects? Likewise, how do I get better at understanding software design tradeoffs in complex projects?
Problem
I'm on a team at one of the Big 4 and one of the things that I didn't get much experience with at college was dealing with "project complexity".
College projects would just come and go. The projects were small and only lasted a few months. The level of complexity is just tiny compared to now. Anything that I worked on outside of school (I did lots of side projects) were always smaller as well and it was always easy to understand and grok it all.
Now that I'm in the industry I've found that isn't so much the same. The project I'm working on can be a bit nebulous at times and we often have to integrate with other team's frameworks and services.
I've never had to deal with this before.
Questions
The questions I have deal first with understanding this and then implementing what I've learned. Here are on my questions:
-
How have other similar engineers dealt with this? What resources helped? What did you do to get better? I feel that the other new people on my team have a easier time picking up these ideas. They don't take as long to learn a framework and can "hold" all the complexity in their heads better than I can.
-
This is nearly an extension of the previous question. After having understood the complex frameworks/services, you then have to write the code that uses them. I will go to implement something, spend hours on it, then find out that the way I implemented it was short sighted and have to redo it. Some of the aforementioned people on my team don't have this issue. They can come up with complex and robust solutions that are more extensible. Why is this? How do I do this?
Example
One of my team members has written this complex set of Java classes that relies on interfaces, default interface methods, generics magic (like <S extends Class & ThisOtherClass....>), multiple inheritance, and it works. The solution is easy to use.
I still don't even understand all of it but I can use it and from everything he says, it sounds "okay". Of the parts I do understand, I would never have written it that way. I can't even evaluate the drawbacks of the design and make suggestions or criticisms.
Postscript
I know a lot of the answers are going to be "experience" and I realize that. However, it seems to me that the difference between the "great" engineers and the mediocre ones is the rate at which one learns this. I realize I'll get better at this overtime, but how do I start that process and increase the rate of learning?
Posted Feb 25, 2016, 1:37 AM UTC