Assignments for the GitHub Copilot hackathon
Choose one of the following options:
- Copilot Data Analysis Exercise
- Copilot Backend Exercise
- Copilot Fullstack Exercise
- DB Admins, test automation engineers, IaC engineers and other non-developers: come up with your own project idea. You can also use Copilot to ideate!
- The objective is to implement an application according to the requirements, using Copilot's many features
- Use the advanced Copilot features discussed earlier in the training as much as possible
- Divide the work between the members or use mob programming
- The results of each group are reviewed and discussed at the end of the hackathon. Make notes during the exercise about what worked well with Copilot, what didn't!
The main objective of the exercise is not to solve a programming problem, but to put Copilot features to the test. During the exercise, remember to utilize as much as possible the features discussed in Workshop 1:
- Chat participants, Slash commands
- Ask, Edits and Agent mode, depending on the situation
- Custom instructions (for inspiration: awesome-copilot)
- MCP servers (e.g. Playwright for browser testing, Context7 for up-to-date docs)
- Generate unit and/or browser tests for the application using Copilot
- Try out different models
- General purpose programming tasks: GPT-4.1
- Smple quick questions, fixes, code generations: o4-mini
- Deep reasoning and debugging: GPT-5 mini, GPT-5, o3
- Do NOT vibe code, e.g. try to implement the app solely by relying on Copilot!
- Key to using Copilot successfully is to retain the control and understand each line of code produced by the LLM
- Giving complete control to Copilot will result in losing touch with the codebase
- Do NOT feed the entire backlog file to Copilot and ask it to implement all the requirements
- Prompts with too wide a scope will often result in endless agentic iteration cycles that eventually result in an application that doesn't work
-
Begin by brainstorming with Copilot
- Use Copilot to better understand the exercise assignment and its requirements
- What should the architecture be like? What are the options?
- Which framework / tech stack could we use for this?
- Which unit testing framework could I use for the project?
-
Use a project-specific custom instructions file
.github/copilot-instructions.md- Create one before doing anything else
- Make a simple one initially, keep updating as your understanding of the project increases
- Add a very high-level project description, preferred tools and frameworks and most important coding conventions to the initial version
-
Let Copilot help you in initializing the project
- Ask Copilot wow to initialize the project using the framework of your choice. For consistent and standard results, it's better to use tools like create-react-app, Maven, etc. rather than let Copilot scaffold the project.
- Ask Copilot to create a stub unit test case and test that it's runnable
-
Progress iteratively
- Even when using the agent mode, progress in small steps
- Implement e.g. a REST API stub or an empty page first
- Add one REST API endpoint, UI component (e.g. a form) etc at a time
- Go through the changed lines and see that they make sense
- Ask Copilot to explain parts of the code that you don't understand
- If the implementation offered by Copilot isn't satisfactory, explain why and ask it to iterate on the solution
- Accept the solution when you're satisfied with it. Commit often.
- Generate and update unit tests after each change
-
Try Test Driven Development with Copilot Agent Mode
- If you're using VS Code, create a custom chat mode that
- Describe a change / feature to Copilot
- Ask it to implement unit tests only for the change
- Ask Copilot to implement just enough code to make all the tests pass using TDD approach
- Adjust your prompt if Copilot doesn't understand that it's supposed to run the tests automatically in order
-
Try using MCP servers
- E.g. Playwright MCP if you're doing web development
- PostgreSQL MCP if you have a local PostgreSQL database
- Context7 if working with a very recent version of a framework/tool