Exam practice
Exam #1 2025 practical task
Exam practical part guidelines
Development Approach: MVP First
Read this section carefully. It may save your grade.
Eight hours is not enough time to build everything described below to perfection. That's intentional. We're testing your ability to prioritize and deliver working software under constraints—a core professional skill.
The Golden Rule
A working app with half the features beats a broken app with all the features.
At any point during the exam, you should be able to stop and submit something functional. If you spend 7 hours on a perfect domain model and run out of time before building any UI, you fail. If you build basic CRUD that works and runs out of time, you pass.
Priority Tiers
Structure your work in this order:
Tier 1 — Minimum Viable Product (Hours 1-3) Get these working first. No excuses.
- Database schema and migrations that run cleanly
- Basic CRUD
- Relationships working
- Simple list/detail views
- Application runs without errors
If you only complete Tier 1, you pass - grade 1.
Tier 2 — Core Features (Hours 3-5) The headline functionality.
- Simple search
- Basic business rules
- Form validation
Tier 1 + Tier 2 = solid grade 2-3 territory.
Tier 3 — Full Requirements (Hours 5-7) Complete the specification.
- Advanced filtering combinations
- Full-text search across all fields
- All business rules
- All validation rules
Tier 1 + Tier 2 + Tier 3 = grade 4-5 territory.
Tier 4 — Polish (Hour 7-8) Only if everything else works.
- Toast notifications
- Loading indicators
- Keyboard navigation
- Edge case handling refinements
- Code cleanup and documentation
Grade 5+ territory.
Development Rhythm
-
Commit working code frequently. Every 30-45 minutes, you should have something that compiles and runs.
-
Vertical slices over horizontal layers. Don't build all entities, then all repositories, then all services, then all pages. Build one complete feature end-to-end, then the next.
-
Stub what you skip. If you're not implementing a feature, leave a placeholder—an empty page that says "Not implemented" is better than a broken link or crash.
-
Test as you go. Five minutes of manual testing after each feature saves an hour of debugging at the end.
-
Don't gold-plate early features. Basic scaling that works is better than perfect scaling on an app that doesn't run. You can refine business logic after core CRUD exists.
What We Actually Evaluate
A submission with:
- Working CRUD
- Basic business rules
- Runs without exceptions
...scores higher than a submission with:
- Sophisticated domain model
- Elegant architecture
- Perfect validation rules
- But crashes on startup or has no working UI
Ship software. Not code.
Technical Requirements
- Clean separation between UI, business logic, and data access
- Async/await for all data operations
- Data Annotations for simple field validation
- FluentValidation (or equivalent) for complex business rules
- Proper database indexes for search performance
- Log all queries in development—verify no N+1 problems
- User-friendly error messages; log technical details server-side
UX Requirements
- Mobile-first responsive design
- Confirmation dialogs for destructive actions
- Toast notifications for feedback
- Inline form validation errors
- Loading indicators for async operations
- Full keyboard navigation support
- Accessible allergen indicators (not color-only)
- Dark/Light mode toggle
Evaluation Criteria
| Aspect | Weight |
|---|---|
| Functionality completeness | 30% |
| Code quality and architecture | 25% |
| Validation and error handling | 20% |
| UX and responsive design | 15% |
| Edge case handling | 10% |
Deliverables
- Git repository with complete source code
- Working migrations (must run on empty database)
- Seed data - enough for testing and filtering. Should hit pagination limits.
- README: setup instructions, assumptions made, known limitations, features you're proud of
Design the domain model yourself. Build incrementally. Ship something that works.
2024-12-05
Restaurant Booking System - Razor Pages Web App
Objective: Create a web application for managing restaurant bookings.
Several restaurants (capacity, location), tables (seat amount), clients (name, email, phone), bookings (number of guests)...
Requirements:
- Implement CRUD operations for restaurants and reservations.
- Allow customers to book a table for a specified date and time.
- Include logic to check the availability of tables based on capacity.
- Provide functionality for customers to view their bookings.
- Search functionality - name & availability & capacity
Generally speaking - these are only broad guidelines. Please write a solution that you would like to present to the world as your best effort in programming and app-designing (UX is the key).
Use nullable references, and turn all the warnings into errors!
2024-11-29
Recipes - Razor Pages Web App
Create a simple application for a recipe book. Recipes, ingredients, amounts of ingredients in recipe. Implement recalculation of amount for servings needed (ie if recipe is for 5 people - how much of everything you need for 2 people). Provide search functionality - recipe name, description, ingredients.
Generally speaking - these are only broad guidelines. Please write a solution that you would like to present to the world as your best effort in programming and app-designing (UX is the key).
Use nullable references, and turn all the warnings into errors!
Exam tasks so far
Fitness Class Booking System
"I run a small gym with 15 classes per week across three studios. Each class type has different capacity limits—yoga fits 12, spinning fits 20, HIIT fits 15. Members keep double-booking themselves or showing up to full classes expecting a spot. I need automatic waitlists that promote people when someone cancels, with instant notification.
I also want to track attendance streaks. Members who attend 10+ consecutive weeks get priority booking for popular classes—they can book 48 hours before regular members. But if someone no-shows twice without canceling, they lose priority for a month.
Different membership tiers complicate things. Basic members get 4 classes per month, Premium gets unlimited. Some specialty classes (boxing, aerial yoga) cost extra credits even for Premium. I need to see at a glance who's about to hit their limit and upsell them.
Instructors have availability preferences and maximum weekly hours. Some are certified for multiple class types, others specialize. When an instructor calls in sick, show me who else can cover that slot and that class type. Track instructor ratings from member feedback—below 3.5 stars triggers a review."
Pet Boarding Facility
"I board dogs and cats at my facility with 30 kennels of varying sizes—10 small, 15 medium, 5 large suites. Some animals don't mix well. Aggressive dogs need isolation kennels away from others. Cats absolutely cannot be near the dog section—I need physical zone separation enforced in the system.
Many pets need medication at specific times. Insulin shots at 8am and 6pm. Anxiety meds before thunderstorms. I need a daily medication schedule that staff check off, with alerts if something's missed. Pet owners are paranoid—they'll sue if we miss a dose.
Owners want daily photo updates sent to their email. Some premium customers want twice-daily updates plus a 'puppy cam' livestream link. Track feeding schedules and dietary restrictions—one dog is grain-free, another has chicken allergies.
I also need to prevent incompatible animals in adjacent kennels. The Johnsons' German Shepherd and the Smiths' Poodle had an incident—flag them as 'never adjacent.' Show me which kennels are free, occupied, or blocked for cleaning. Cleaning takes 2 hours between stays."
Community Tool Lending Library
"Our neighborhood runs a tool library with 400+ items—drills, circular saws, ladders, pressure washers, tile cutters. Some items need safety certification before borrowing. You can't take the chainsaw without completing our 2-hour training course and signing a waiver.
Tools break and need maintenance tracking. The pressure washer needs serviced every 50 hours of use. Drill bits get dull. I need to see total usage hours per item and flag when maintenance is due. Some tools are out of service awaiting parts—don't show them as available.
Members who return things late get warnings. Three late returns in a year means borrowing privileges suspended for 3 months. Damaged returns trigger a review—sometimes it's normal wear, sometimes negligence. Track the full history of each item: who borrowed it, when, what condition it came back in.
Show me who currently has what and flag anything overdue. Some items have shorter loan periods—nobody needs a pressure washer for 3 weeks. Popular items in summer (lawn aerator) need reservation queues. Members can request items we don't have—track demand for purchasing decisions."
Escape Room Business
"I run 4 themed escape rooms with different difficulties and player capacities. 'Prison Break' fits 2-6 players, 'Haunted Mansion' fits 4-10. Groups booking 'Mansion' with only 3 people should get a warning that it's designed for larger teams—they'll probably fail.
Corporate groups want consecutive slots for team building—do one room, debrief, do another. But I need 20 minutes between bookings for staff to reset puzzles and clean. The system can't let someone book the 2pm slot if the previous booking ends at 1:50pm.
Track team completion times and success rates for leaderboards. Players love seeing 'You escaped in 47:23—that's the 8th fastest this month!' We also track hint usage—completing with zero hints goes on the 'Pure Escape' board.
Corporate bookings need invoicing with proper tax details. Some companies want monthly invoices for all their team events. Gift vouchers complicate things—they have expiry dates and can't be combined with promotional discounts. Track voucher redemptions and remaining value."
Plant Nursery Inventory
"I sell plants with wildly varying care requirements. Some need full sun, others die in direct light. Some need daily watering, others thrive on neglect. Frost tolerance matters—customers buy in spring for outdoor use, then wonder why their tropical plant died in October.
Customers describe their situation: 'I have a north-facing balcony, forget to water for weeks, have a cat that chews everything.' I need to filter to non-toxic, low-light, drought-tolerant options. Show compatibility scores—this plant is 90% match for your conditions.
Track seasonal availability. Lavender arrives in March, poinsettias in November. Customers want notifications when their wishlist items are back in stock. Some plants are locally grown, others imported—track supplier lead times for reordering.
Alert when stock drops below reorder thresholds. But thresholds vary by season—I need 50 poinsettias in November, 5 in June. Bundle suggestions help upsells: 'Succulent Starter Kit' with 3 plants, soil, and decorative pot. Track which bundles sell well and which sit."
Tutoring Center Scheduling
"We have 20 tutors covering everything from elementary math to AP Physics and SAT prep. Each tutor has specific subjects, grade levels, and hourly availability. Some only work weekends. Some are grad students with erratic schedules that change semester to semester.
Students need skill-level matching. A calculus tutor shouldn't waste time on someone struggling with fractions—that's a different tutor with different patience and teaching style. Track student assessments and progress. If Johnny improved from C to B+ in algebra, that tutor pairing works.
Parents want monthly progress reports. Not just 'attended 4 sessions' but actual skill assessments, areas of improvement, and homework completion rates. Some parents want email updates after every session—flag those accounts.
Handle recurring weekly bookings with holiday exceptions. 'Every Tuesday at 4pm except school holidays' is a nightmare to implement. Students can reschedule with 24-hour notice, but last-minute cancellations count against them. Three no-shows and they prepay for future sessions."
Board Game Café
"We have 300+ games with different player counts, complexity ratings (1-5 scale), average play times, and genres. Customers walk in and say 'We're 4 people, have 90 minutes, want something medium complexity, preferably not too competitive.' Filter and recommend.
Track which games are currently checked out to tables. If someone wants Catan but it's in use, show estimated return time based on average play duration. Popular games like Wingspan need reservations on weekends—walk-ins get disappointed otherwise.
Games get damaged. Flag missing pieces—nobody wants to discover halfway through that 3 red meeples are gone. Track wear level: new, good, fair, poor. 'Poor' condition games get discounted table fees. When pieces go missing, track which customer had it last (not for blame, for investigation).
Some games need staff explanation. Flag 'staff intro recommended' for complex games. Track play counts for purchasing decisions—if Azul gets played 50 times a month and we only have 2 copies, buy more. Dead games that haven't been touched in 6 months go to the sale shelf."
Electronics Repair Shop
We fix phones, laptops, tablets, and game consoles. Each device type and model has standard repair times and required parts. iPhone 13 screen replacement: 45 minutes, 89 EUR part cost, 60 EUR labor. Track these benchmarks and flag repairs taking too long - either the tech is slow or something's wrong.
Customers want status updates without calling. 'Diagnostic complete - water damage found. Repair estimate: 180 EUR. Reply YES to proceed.' Track message history per ticket. Some repairs need customer decisions mid-process - we find additional damage and need approval before continuing.
Parts inventory is critical. We stock common screens and batteries, but some repairs need ordered parts. Track backorder status and expected arrival dates. When parts arrive, auto-notify the tech and customer. Priority queue for business customers who pay for same-day service.
Calculate repair profitability. Some repairs aren't worth it – 200 EUR in parts for a 5-year-old phone that costs 150 EUR used. Flag these and suggest alternatives. Track warranty repairs - if we fixed it last month and it broke again, it's free. 90-day warranty per repair type.
Rental Property Showing Scheduler
I manage 45 rental units across 8 buildings in different neighborhoods. Prospective tenants browse listings and book showing appointments online. But I'm one person driving between locations - I need minimum 30 minutes travel time between buildings, more during rush hour.
Track application status per unit. Someone tours, applies, gets approved, signs lease - or gets rejected, or ghosts us. Show me the funnel: 20 showings → 8 applications → 3 approvals → 1 signed lease. Which units are stuck? Why did the luxury unit get 15 showings but zero applications?
Some units have maintenance issues. Don't show the apartment with the broken dishwasher until it's fixed. Mark units as 'show-ready' or 'needs attention.' Track maintenance requests per unit - patterns matter. If unit 4B has had 3 plumbing calls this year, disclose that to applicants.
Lease expiration warnings drive renewal planning. 60 days before lease ends, start outreach. Track renewal rates by building, unit type, and price point. If all 1-bedrooms renew but studios churn, that's pricing feedback. Generate availability projections: 'In 90 days, we'll have 3 units available.
Recreational Sports League
I run a recreational soccer league with 12 teams playing September through November. Each team has home field preferences. Some fields have lights for evening games, others don't. Weekend morning slots are premium - everyone wants them, so distribute fairly.
Can't schedule a team to play back-to-back days. They're amateur athletes with day jobs - Saturday and Sunday games would destroy them. Also no team should have more than 2 away games in a row. Balance home and away across the season.
Track standings with wins, draws, losses, goals for, goals against, and goal difference. Also track fair play points - yellow and red cards reduce your score. At season end, teams with high fair play scores get priority registration next season.
Handle rescheduling requests without destroying balance. 'Team 4 can't play Oct 15 - half their players have a wedding.' Find an open slot, ensure opponent agrees, check referee availability. Track all reschedules for the inevitable disputes about who owes makeup games.
Music Practice Room Booking
Conservatory with 25 practice rooms of different configurations. 15 small rooms for solo practice, 6 medium for small ensembles, 4 large for full bands or recital prep. Some have grand pianos, some uprights, some are soundproofed for drums and brass.
Students have weekly hour quotas based on their program. Performance majors get 20 hours, education majors get 10, minors get 5. Track usage and block booking when quota is exhausted. Some students try gaming the system - booking then not showing. Track no-shows and penalize with reduced quota.
Equipment matters. A pianist needs a room with piano - obviously. But specifically a grand piano for recital prep, not an upright. A drum student needs soundproofing or the entire building hates them. Match room features to instrument requirements in the booking flow.
Block booking for recital prep in the final 2 weeks before juries. Students can reserve 3-hour blocks instead of the usual 2-hour maximum. But these blocks need approval from their instructor. Track practice hours toward graduation requirements - some programs mandate 200 logged hours.
Freelancer Project & Time Tracking
I juggle projects for 12 clients with different billing rates, budget caps, and payment terms. Some pay 75 EUR/hour, some 150 EUR /hour. Some have monthly retainers - 2,000 EUR /month for up to 20 hours, then 120 EUR /hour overage. Track it all.
Time tracking per project and per task. Client A hired me for 'website redesign' but that includes wireframes, mockups, development, and revisions. I need time breakdowns because revision phase is eating all profit. Show me time per phase and flag if revisions exceed 30% of project time.
Alert when approaching budget limits. If project budget is 5,000 EUR and I've logged 4,200 EUR worth of hours, warn me before I go over. Some clients need pre-approval before exceeding estimates - stop work and request approval, don't just keep billing.
Monthly invoicing with detailed breakdowns. Client B wants to see every time entry. Client C wants just totals per project. Generate both formats. Track payment status - some clients pay in 15 days, some take 60. Flag overdue payments and auto-generate reminder emails.
Art Supply Subscription Box
Customers subscribe for monthly art supply boxes at three tiers: Starter (25 EUR), Artist (45 EUR), and Professional (75 EUR). Each tier has different item counts and value. We also have themed months - watercolor in January, urban sketching in February, mixed media in March.
Track customer preferences from a detailed survey. Some want only alcohol markers, some hate pastels, some are interested in trying new things. Weight preferences when selecting items: strongly prefer, mildly prefer, neutral, avoid. Never send an 'avoid' item even if it fits the theme.
Critical: don't repeat items. If March 2024 box had Winsor Newton Cotman watercolors, don't send them again for at least 12 months. Track all items sent to each customer. But if they loved something and want more, they can request repeat - override the rule.
Some materials cause allergic reactions. Latex in erasers, certain pigments, turpentine sensitivity. Collect allergy information and flag items containing allergens. Handle subscription pauses - someone traveling for 2 months shouldn't get charged or shipped. Resume automatically unless they cancel.
Coworking Space Management
Members book three types of space: hot desks (any available desk), dedicated desks (same spot daily), and private offices. We also have 6 meeting rooms and 4 phone booths for calls. Everything needs booking except hot desks - those are first-come first-served but still tracked.
Membership tiers control access. Basic: 40 hours/month hot desk only. Professional: unlimited hot desk plus 8 meeting room hours. Enterprise: dedicated desk plus 20 meeting room hours plus guest passes. Track usage against tier limits. Overage billing at 15 EUR/hour for meeting rooms.
Track amenity usage for cost allocation. Printing costs money - 10 cents B&W, 50 cents color. Track per member. Coffee is unlimited but I want to know consumption patterns. If someone's printing 500 pages monthly, that's a conversation about their membership tier.
Generate utilization reports per zone. If the quiet zone is 90% full every day but the collaborative zone is 40% empty, that's a reconfiguration signal. Day pass management for non-members - they pay 35 EUR for access, tracked separately. Show me revenue from members vs day passes vs meeting room overage.
Car Detailing Service
We offer mobile and shop-based detailing for vehicles ranging from compact cars to large SUVs and trucks. Each vehicle size class has different service durations. Compact car wash: 45 minutes. Full-size truck interior detail: 3 hours. Price and schedule accordingly.
Service packages combine individual services with discounts. 'Executive Package' includes exterior wash, clay bar, wax, interior vacuum, leather conditioning, and glass cleaning - individually 180 EUR, package price 140 EUR. Track which packages sell and which individual add-ons customers request.
Inventory management per service. Each wax job uses approximately 50ml of product. Track product usage against services performed. When wax inventory drops below 2 liters, reorder. Different vehicle sizes use different amounts - truck uses 80ml, compact uses 40ml.
Mobile service adds route complexity. Three appointments: 9:00 downtown, 12:00 suburbs, 15:00 airport area. Calculate drive times and warn if schedule is unrealistic. Loyalty program tracks visits - every 5th basic wash is free. But loyalty only applies to the same vehicle; new car resets the counter.
Library Event Management
Our public library hosts 30+ events monthly: author readings, children's craft sessions, teen gaming nights, adult tech workshops, book clubs, and ESL conversation circles. Each event type has different requirements - kids events need parental consent forms, tech workshops need laptop availability.
Events have age restrictions and capacity limits. Teen gaming is 13-18 only - don't let adults register. Senior tech help is 55+. Story time for ages 3-6 maxes at 15 kids plus guardians. Enforce these at registration and track actual attendance versus registration for no-show patterns.
Some events have material costs. Kids craft sessions need supplies - budget 3 EUR per attendee. Tech workshops provide handouts - 0.50 EUR per person. Track costs for grant reporting. Our literacy grant requires we serve X number of adults monthly - show me if we're hitting targets.
Series events complicate registration. '4-Week Coding for Beginners' runs every Saturday in March. Attendees should register once for all four sessions. Track attendance per session - someone who misses 2 of 4 shouldn't get completion certificate. Waitlist with auto-notification when spots open.
Shared Commercial Kitchen Rental
Food entrepreneurs - caterers, bakers, meal preppers, food truck operators - rent time in our licensed commercial kitchen. We have 3 kitchen bays rentable in 4-hour blocks. Some bays have specialized equipment: Bay A has the walk-in freezer access, Bay B has the blast chiller and industrial mixer, Bay C has the largest oven capacity.
All renters must have current health department certification and liability insurance on file. Certifications expire - don't allow booking if their food handler's card lapsed. Track document expiration dates and send renewal reminders 30 days before. Block booking immediately when anything expires.
Cold storage is shared but segregated. Each renter gets assigned shelves in the walk-in. Track whose ingredients are stored where, with entry dates. Anything over 7 days without activity gets flagged - we're not a free warehouse. Some renters have allergen protocols - the gluten-free baker can't have her station next to the bread guy.
Deep cleaning is mandatory between certain users. The fish sauce meal prepper absolutely requires deep clean before the kosher caterer's slot. Track religious/allergen requirements and auto-insert cleaning blocks. Cleaning takes 2 hours and has its own cost - charged to the requiring party or split.
Bicycle Rental & Tour Company
I run a bicycle rental shop in a tourist city with 80 bikes of various types—20 city bikes, 25 electric bikes, 15 mountain bikes, 10 tandem bikes, and 10 children's bikes. Each bike type has different daily rental rates: city bikes at €12/day, electric at €28/day, mountain at €18/day, tandems at €22/day, and children's bikes at €8/day. Rental periods run in 4-hour blocks or full days (09:00-21:00).
We also offer guided tours at 10:00 and 15:00 daily. The city tour takes 3 hours and fits 12 participants, the coastal route takes 5 hours and fits 8 participants, and the challenging mountain trail takes 6 hours and fits 6 participants. Tours include bike rental, but customers can upgrade bike types for an additional fee—upgrading from included city bike to electric costs €10 for the tour duration.
Bikes need regular maintenance based on kilometers ridden. City bikes need servicing every 500km, electric bikes every 300km due to motor checks, mountain bikes every 400km. Track odometer readings at each return. When a bike approaches its service threshold, flag it and remove from available inventory until serviced. Track maintenance costs per bike to calculate true profitability.
Customers often want to extend rentals. Someone rents for 4 hours, then calls asking for 4 more. Check availability—if the bike was reserved by someone else starting in 2 hours, deny the extension. Damage deposits of €50 for regular bikes and €150 for electric bikes are held until return. Track damage history per bike and per customer—repeat offenders pay higher deposits.
Language School Administration
Our language school teaches 8 languages across 5 proficiency levels (A1, A2, B1, B2, C1 following CEFR standards). Each course runs 10 weeks with two 90-minute sessions per week. Morning courses run 09:00-10:30, afternoon courses 14:00-15:30, and evening courses 18:30-20:00. Maximum class size is 12 students to ensure speaking practice time.
Students take placement tests before enrollment. The test determines their starting level, but teachers can recommend level changes after the first two weeks if the placement was wrong. Track all level progressions—a student might start at A2 German, complete it, then enroll in B1. Their full learning journey should be visible.
Teachers have language certifications and availability constraints. Maria teaches Spanish and Italian but only mornings. Klaus teaches German all levels but refuses evening slots. Some teachers are native speakers (premium), others are certified non-native (standard). Native speaker classes cost €280 per course, standard classes cost €220.
Course materials are included in the price but tracked per student. Each level has a textbook (€25 cost to us) and workbook (€15 cost). If a student fails and repeats a level, they don't need new materials—flag this to avoid duplicate orders. Attendance below 70% disqualifies students from the completion certificate, which matters for visa purposes for international students.