Postmortem: Unholy Holes

Play the game here: https://ldjam.com/events/ludum-dare/41/unholy-holes
The rating period ends in 3 days, so I figured now would be as good of a time as any to write a postmortem.
Getting Started
When the theme was announced, we got together with some friends on Discord to brainstorm ideas. At some point the idea of "golf + tower defense" came up. It was the least-hated idea, and since we were running out of time to decide on something better, we went with it.
Day 1
The majority of the first day was spent getting my teammates accustomed to the engine. Before this, they had very little experience with C++ or Lua, and had never worked in a data-oriented engine before. The learning process went a lot faster than I planned for, and we had a very ugly but functional protoype on Saturday.

There is a tower and some bullets and enemies in this screenshot, but at this point we were using a single sprite for everything.
Day 2
Sunday went even better. We all knew how to use the engine at this point, and we cranked right through to the finished game with few issues. We only had one level, and no audio or polish at this point, but most of the mechanical stuff was done.

This is when we encountered our first major bug. At low framerates, the ball would overshoot its target, and keep going forever, preventing the player from placing any more towers. It was a bit of a mystery at first, but it ended up being a simple fix.
Halfway through the day, a teammate had his laptop's charging cable get fried, so he had to switch to a spare laptop we had laying around. This laptop wasn't as powerful as his other one, so his build times took a lot longer.
Final Day
We all had work on Monday, so we only had a few hours before submission to polish the game.
Somehow, we managed to get a few more levels made, plus music and sound effects, and proper menus. All of this was committed right at the deadline, and we spent a few more minutes packaging and uploading the final build.
However, this is also when we discovered our second major bug. Sometimes, the game would crash. Hard. Usually it would bring down the whole browser tab, and sometimes the entire browser.
At this point, we didn't have the native build working, so debugging this issue was hopeless.
After going through all our code line-by-line, the issue was finally found and resolved. It was a simple case of trying to remove an item from a list that did not contain the item. The crashes were so severe because this bug was affecting the C++ runtime, and optimizations must always be enabled for the web build.
What Went Right
- The Lua scripting layer worked very well, and we were able to write most of the game logic without touching the C++ side.
- The data-oriented design allowed us to make rapid changes to the game logic with confidence, and we rarely had any major bugs.
- Pyxel is a fantastic tool. We were able to use it both for animations and tilemap editing.
- My teammates were able to learn new languages and a foreign paradigm in a single day, completely shattering my apparently low expectations.
- Meeting in person helped a lot with the learning process, and we were able to resolve bugs very quickly.
What Went Wrong
- The navigation paths for each level had to be written by hand. It would have been much better to have a tool to do this instead, but we didn't have time to find/make one.
- We weren't able to give the enemies types different logic, so they all act the same despite having different sprites.
- We didn't have the native build working during the jam, so we weren't able to use a debugger. The native build would also have given us faster build times.
Conclusion
Overall, things went extremely well. We weren't able to get all of the planned features in, so we're working on a small expansion with some additional polish and fixes. Please look forward to it!