So I'm still rather new at Set (Very new in fact), but I'm sufficiently annoyed at not already being good at it that I've been doing my best to figure out how to play well.
My observation is that advanced set players seem to find it very hard to get into the mindset of beginning set players because they've acquired so much intuition about the game that they don't adopt a conscious strategy. This is where advice like "You just need to learn to see the patterns" comes from. It's almost certainly the right way to play, but it's not very useful advice when you're trying to get to grips with it and want an explicit strategy to learn from!
So, speaking as someone who is not yet at that stage, here is roughly the strategy I seem to be adopting. It's definitely far from optimal, and it's more of a crutch to get me into pure pattern matching mode, but it works tolerably well:
Observation: Given any two Set cards there is exactly one other card with which they form a set.
Proof: Look at each of the characteristics. If they're the same, then the third card has that same characteristic too. If they're different then the third card has the single instance of that characteristic they don't have (e.g. if they're green and purple then it must be red).
Being able to work out this third card quickly (and there's no simple way to do that other than practice) seems to be very useful. Part of why it's useful is that when new cards are laid down if you can quickly work out what cards they would form sets with (there will be six such cards for every set of 3 laid down) you can go "Oh! That's already on the board. Set!" immediately (it's useful to have a good memory of what's already on the board)
Call the approach "Pick two cards, see if their third is on the board" pair matching.
Now, using that as the only part of your strategy would be pretty slow. Even that's not useless though. If you find yourself stuck it's not completely crazy to just start picking pairs of cards at random, and do pair matching to them. It's a good way to spot hard to notice sets, but it's definitely not the most efficient strategy writ large. Call this strategy A.
Here is roughly what I do:
Step 1: Identify some classes of Set that are impossible. I find a good starting point here is to look within numbers: Is it possible that there is a set with only 3, is there a set with only 2, is there a set with only 1? There's no reason you have to start with numbers - all the characteristics are logically interchangeable - I just find this one easier to do visually.
Step 2: If you've found a characteristic which you can keep constant (like number) and it looks like there might be a set in there, adopt strategy A on it for a bit and see if you find anything. If you find something the board has changed, go back to Step 1. If not, go through to step 3 - either giving up and looking at the whole board again or focusing it on this specific set of cards.
Step 3: If you haven't found any sets so far, you can probably now identify some "Key cards". For example if you've determined that all of a characteristic has to be different, you can pick the value which appears least often. So if you're looking for sets where the quantity is different for each and there's only a single 1 card on the board you know that this card has to appear in all the sets you're looking for. Similarly if there are only two one of these cards has to be in each set. Pick a key card, ideally based on most likely to appear, but at random is fine too.
Step 4: You now have your key card. Start looking for cards to pair with this and pair match on them. Initially your search will be random but you're very likely to start ruling out classes of things. Like "This obviously can't be paired with anything filled because it's empty and there are no hashes on the board". Use that to direct your search.
Step 5: If you're still stuck, try and go back an identify another characteristic you could use. e.g. see if you might be able to find one where the characteristic is the same where you were looking for it different, or swap to another value of it. Repeat from step 2.
I think that's about it. Sorry, I feel like this was a very opaque description of what I do, but hopefully some of it was useful. Feel free to ask any questions and I'll try to clarify.