I would like if challenges were a community learning experience and not a competition. Everyone should share their findings, ideas, and solutions to problems during the challenge so everyone can learn from it and become better game developers. Providing relevant learning resources at the start of a challenge would also let people get started quicker. We should also aim for having participants being able to complete their project so they can add it to their portfolio as well.
There should also always be a way for non-programmers to participate, and I'd do that by letting people work in groups. If it's not a competition then that shouldn't matter. Participation from these members should be encouraged, perhaps by ranking submissions on all of mechanics, design, sound, levels, overall, and so on. This also encourages members to do their best in any case, and even to branch out and develop secondary skills.
I'd only have one challenge at a time to reduce various problems including unbalanced participation, less learning, feeling the need to do both, and so on. However every challenge should offer new and multiple skills to learn. For example, a racing game could potentially teach vehicle physics, collisions, splines, tracking positions, etc. Then the next week could be some text adventure which teaches a whole new set of skills. It's good if skills can be revisited occasionally.
I'm not sure about requiring source code submissions as some may want to further develop and sell their creations, or not have it on their public repositories.
I would avoid challenges that are...
-
Too broad - Without a focus, there's less to be learned. It means there's no central discussion points, and people may not push themselves to learn new skills. Projects may also spend too much time on trivial stuff and we'll see less interesting content.
-
Tool constrained - We should be making games, it doesn't matter what tool is used. It will also waste time that could otherwise be used for creating interesting content for the challenge. The skills learned will apply to all tools anyway.
-
Technical - Limits on memory, performance, etc, encourage less interesting content and the learning of more useful skills. It also rules out many tools and platforms.
Some example challenges I'd consider to be good are... (shortened here to save space, can be made more specific or simpler)
-
"Create a 2D platform game where there are walking and flying enemies. Attacking or jumping on an enemy will kill them. However, platforms will be varied in shape and orientation, and players can walk around these with a local gravity. Change platforms by double jumping. - 2 weeks".
-
"Create a 2D game where you control two separated characters, both responding to the same input at the same time. You must use this to solve the puzzle of the level and bring the two characters together. - 2 weeks"
-
"Create a game of pong where the ball can be spun by hitting it with a moving paddle and this affects the way the ball travels. - 1 week"