It’s going to be fun, collaborative, educational and competitively friendly…
I’m inviting all Agile Hong Kong developers to enter in what is designed to be a friendly competition whose aim is to give people the chance to show off their Agile Software development and Extreme Programming skills. You’ll be given around a month to complete the sample programming exercise. At the end of the competition time, the winners will be announced and we’ll look at some of the solutions to see how the problem was solved.
So, what’s the problem?
Your client owns a wine bar and is looking to replace her existing cash register with a point of sales system. Her vision for the system is that it will keep track of inventory, money collected throughout trading hours and generate reports. Her motivation is driven by demand as she is about to expand her business. She is looking to prepare the business in time for its expansion.
Your client wants an initial software release in one months time, followed by a second release a month after that, to coincide with the expansion. At the end of the first release there will only be a single sales system. With the expansion, however the bar will have a total of three bar areas, each bar having two point of sales systems.
In scope for the first release will be the inventory tracking and order taking components of the system.
- Before the initial order is taken, the bar staff open an account for the customer, identified by table number.
- When entering a drinks order, the staff select the table, choose the drink and the quantity. The quantity of drinks for that item, within the system, is deducted accordingly.
- When a staff member orders a drink that will deplete stock, they will be informed, including the current level of stocks remaining.
- When a staff member places an order that will reduce stock levels below zero, the order is immediately rejected. The staff member is informed with a message saying how much stock is remaining.
- A customer may make as many orders as they wish.
- When the customer wants the bill, a staff member will enter the table number and print it out for them.
- When the customer pays, a staff member will enter the amount of money received and deduct that from the account. The account for that table will then be closed. The amount of change owed to the customer will be displayed. No receipt is issued.
- If the amount entered is insufficient, the staff member will be notified and the account will remain open.
- In order to make way for other functionality, your client is happy to initialise the system with current stock levels when it starts up. She is looking for guidance from the developers as to the best way of doing this but expects to be able to specify the name of a drink, the number of units in stock, and its price.
- When a staff member enters an order for a table that does not currently have an open account, the staff member should be notified with an error message telling them so.
What’s the prize?
- The competition opens…now…
- The final submission date will be Tuesday 9th of December 2008
- The prize night will be Thursday the 11th of December 2008
How to enter?
- Entry is open to all interested people, though I would prefer entries from those that can attend the competition prize night. If you can’t make it or are unsure if you can, please enter anyway, this is a friendly competition, you can still win.
- Register your interest to enter by emailing me directly at . This will give me the opportunity to get in touch with you to inform you of updates.
- If something is unclear please let me know so I can clarify for you.
- Make sure you submit your solution by the due date.
What should you submit?
I can’t tell you exactly what I’m after in the solution…I don’t want to hinder your creative thoughts, so the following list is to be considered as a set of hints and guidelines and is definitely incomplete:
- Neat, well factored code.
- Evidence of eXtreme Programming.
- Code and any supporting artifacts. I don’t need compiled binaries.
- An automated build will be desirable.
- Any stories you came up with.
- Anything that shows how you applied Agile techniques, e.g. Stories.
As much as I don’t like to impose them they are necessary. Sorry! I’ll keep them clean and clear.
- Have fun!
- I’ll be judging the submissions and won’t have time to argue about the solution once it’s submitted. If you think there is a flaw in the problem or something doesn’t make sense please contact me and I’ll distribute any updates to all entrants (so please be sure you email me to register your intent to compete).
- You may submit a solution to the problem in the language of your choice, just remember, though that different languages have different levels of support for Agile and XP. You may use any technologies you see appropriate to solve the problem. Sometimes though, less is more.
- You may work in pairs and collaborate with others, however, if you win you will still only receive a single prize for the submission.
- You may make multiple submissions but only stand to win once.
- Ideally you will attend the prize night (11th of December 2008) if you enter the competition. You can still win if you don’t attend, but I’d prefer it if you could be there so we can discuss your solution with you.
- The solution remains yours. I may however, ask for your permission to post your solution on the Agile Hong Kong website - but you’ll be under no obligation to do so.
- You must submit your solution by the due date.
- I want to encourage as many people as are interested in participating. Solutions that are publicly demonstrated will only be constructively critiqued.
- I don’t want to see copied or duplicated solutions. So please, don’t do this.
- The judge (that’s me) is not eligible to compete. However, I will solve the problem to offer my own insights into the solution.
Good luck and have fun!!!