Typically, I start with an LCD and an UNO or MEGA, add in a shield and start to experiment with it to get a sketch working. The goal being to learn how the shield itself works. The shields I order from any of the many online Arduino suppliers or from fleaBay. With fleaBay if things don't work, the seller is just that, a seller. Rarely do they have any clue as to what they are selling so don't expect any hand holding to get it working.
In many cases there's an Arduino library someplace that has examples for the standard shields so it's a simple matter of reading the code and figuring out how the shield works. Because there are so many different shields, there can be a number of communication protocols between the Arduino and the sheild.
After all the shields are working, I then start on the main sketch, adding in the shields as I write the sketch and finally, at some point, the whole thing works. Or in many cases doesn't...
Which is where debugging comes in. Because I started with each shield to see how it works, I have a better understanding for fixing issues. The ugly issues show up when you have multiple shields that don't work together because of their design.
If I'm going to make a number of the same circuits, depending on the complexity, I design a PCB to hold all the parts. I route and etch them myself. Rarely do I have them made for me. Actually the Parola boards were the first ones I'd had made in about 30 years. Where I'm doing one-ups, I generally just use a prototyping board and some Dupont connectors.
My background, apart from being a musician was an electronics technician in 1960's, short lived though since there was no money in that field at the time here. There were no personal computers when I went through school. I didn't start writing commercial software until 1978 and at that point it was Z80 assembler. The lowly Arduino UNO has twice as much memory as the computers I was programming at that time.
I never saw, let alone wrote, a line of C code until I got my first Arduino UNO two years ago. The language syntax was what almost did me in. I knew what I wanted to do, but the syntax was light years from anything I'd ever used so hugely frustrating. I still have to stop and think for a minute to wrap my head around Structs and Unions. On the other hand, handles and pointers are second nature because of my assembler background.
Point being that none of the hardware or software is what I'd call "easy" if you've never done it before or had limited exposure to it. Be patient and work through each part. When you get stuck, Google is a first stop, then it's forums or people you know who can help out. But don't expect them to do the lion's share of your work. They are a resource for help, not do.