Here's my approach. Others may do it differently.
Another thing I notice is to test timing. Whenever you hit an opponent, there's a thing called Hit-stun. It's basically the time with which the opponent reels from an impact. You balance that with your current character's ability to do another move. If the time for you to whip out another attack is less than the time for the opponent to recover from the previous hit; you have another move in the combo. You simply experiment with that. You can start with the strongest follow-up move and work towards the weakest, or you can do it the other way around and feel for the strongest or best move you can continue the combo with.
One of the easy lists of combos I tend to do, outside of the typical weak hits lead to strong; is to test out how badly something hit stuns an opponent. Also, once you see something like that, test every special move and/or super that *might* cancel the previous move you hit stunned them with. Cancels are nice, because then you know there's a move you can pull off faster than the rest. You then test to see if you can land that cancelled move before the opponent comes out of hit stun. Some cancels allow you to continue the combo even if the previous move had a lower timed hit stun than some others, due to the speed of pulling off the followup-move.
Outside of combos, I tend to look for pressures. True pressures do anything to keep you at attack advantage. I use this for 2D and 3D games. Having good attack advantage is a state in which if you and the opponent attempt to attack *as soon as possible*; more of your moves would be able to come out and damage first before their's. That, at least, means; their weak attacks would come out too late for yours; their hard attacks come out too late for yours. You're moves are already hitboxed and doing damage before they can, and thus you have priority. This is where block stun comes into place. Block stun is measured by the time your opponent can do ANYTHING to come out of a block after blocking one of your moves. Various moves have larger block stun than others, and often the ones with the biggest hitstun *might* have the biggest blockstun. That, however, isn't always the case 100% (but pretty high); so experimenting is very useful.
Properly broken combos are a combination of the two practices. Broken does mean that the opponent has frames in which they can recover in a combo. However, if during those frames in which they can recover, they are put in disadvantage because of the rule above (your moves have a tendancy to land before theirs could), it's a decent broken combo. Attack advantage is 90% of winning fighting games, in general. The person who stays in that condition, the longest, generally wins, by default. So often enough, I tend to measure outcomes that way. Defensive play can win if your opponent can't properly press the attack...in which they never really gained attack advantage; they're just passively aggressive. Stuff like wins determined by well-placed anti-airs qualifies as such. Good defensive play generally finds whatever best moves to *get out* of the attack disadvantage, turns the tables for a bit, and forces the aggressor to step back and regroup. It's at that point the defensive player has the choice to turn offensive and attempt to stuff them.
Take note, the best defensive characters have utilitarian moves that can come out quick enough after block stun, in which it lowers the frame advantage of the attacker. Also, they may have good utilitarian moves that keep the opponent at distance, avoiding the attack advantage, in the first place.