
I can't believe I've participated 7 times already, it feels like I just did my first one recently. With each attempt I can feel my progress as a game developer improve. Now each LD has different challenges, but there are a few common ones which I have learned to deal with. Some of these may seem obvious, but I want to stress how important they are.
The idea
Try to choose an idea as soon as possible and stick to it. Now you do want to make sure you put some proper thought into the idea as this is what your game is going to be, hell I generally I toss out my first few 'original' ideas as it usally turns out they aren't so original as I thought after I play some of the other submissions. But you also don't want to spend too much time trying to find the perfect idea, time is a precious commodity during LD. One thing I find I have to actively suppress is thoughts of "You know what would be cool..." while I still haven't gotten close to finishing the original idea. The games that tend to have the best score are the ones that focus around 1 simple idea, but are really well polished.
The tools
In my first LD I used libGDX and wrote almost everything from the ground up. It was satisfying to finish but the quality was nowhere near a lot of the other attempts. This was when I gave in and decided to try Unity, and I haven't gone back since. Unity handles a lot of the boilerplate stuff as well as provides the foundation for a lot of other functionality and let's you jump straight into the game making process. If writing from scratch or using minimal frameworks is your thing then go for it, Ludum Dare is supposed to be fun, but if you haven't tried an engine such as unity or unreal before I say give it a shot at least once. I can't stress how much it helps in a game jam.
The most important thing though, is tool familiarity. I did my second LD with Unity while I was still new to it, so I wasted a ton of time trying to figure out basic stuff which cut into the limited time we had. It helps a lot to practice your tools outside of LD so that when you participate you can focus more on the game jam less on the tools themselves.
Reuse you logic
This applies to all of programming in general, but you can take stuff you've made and change it a little to add more variety to your game. For example we have some fireflies in our game to gently lead you through the levels. The end screen felt like it lacked a little pizzazz so I repurposed the fireflies, I gave them a random color and applies some gravity and some random noise to make confetti. It took a few seconds yet I felt like it really helped with the end screen.
Don't try to optimize your game
This sounds kinda weird but hear me out. Unless your game actually has some performance issues don't worry about trying to write the perfect code. These games tend to me small, so don't worry about avoiding anti-patterns such as singletons, just make sure your game gets finished and works well enough. Yes this can introduce troublesome bugs that might be a chore to fix on time but because these games are small it's usually easy to fix or find some workaround but more importantly a buggy game is better then an unfinished game.
Hope this info is useful to some of you! Also if you haven't checked out our game yet... We're in the process of adding more levels and improving the overall feel of the game so we would love any feedback!
https://ldjam.com/events/ludum-dare/46/it-came-from-below