Is optaplanner is better solution for resource allocation use case? - optaplanner

I am face a problem in real time and want to use optaplanner but new to this technology.
I am working on a project which mostly do the resource allocation to the passengers.
Here is my Use case.
Suppose In side airport lounge lots of passenger are there and they want to use shower,nap room,bar and restaurant.
Passenger can request for any of these services using kiosk or mobile.
Customer has there constrains like priority passenger , they need to depart for flight etc..
All services also some constrains like closing time, cleaning time, not in service etc.
My UC is to assign all services efficiently to customer.
Is it good use case to use optaplanner.
Thanks in advance.

Related

php loan application design help needed

I find one of my weaknesses to be applying the theory I know in actual projects. One such theory is application design. I have never formally designed an application before beggining to code. I am developing a simple microfinance loan application for a client and I for once want to do things properly. Hence I am trying to design the system before coding. One of the many sites I am learing from suggest that one askes the following 3 questions and work from there;
What are the Input(s) of the system?
What are the Processes of the system?
What are the Output(s) of the system?
The 1st and 3rd questions are fairly easy to answer for me. The issue is the 2nd question. Not that I don't know what the system is to do but I think I am not stating them well enough as it should be. The following are my processes as I stated them, have a look if its okay,.
Register Groups and Individuals
Allocate loans to Groups with individuals or Individuals Only
Create loan repayment schedule
Calculate daily repayment at the point of loan allocation
keep track of daily collections by loan officers
provide loan disbursement projection on a weekly basis based on groups who have completed payments and new groups
Will you use wording like that when stating the high level processes for a system? I know I will have to make several passes to break the individual process down.
Be very wary of doing something just because it's "good practice" if you don't know why (and personally I often need to "do" something (and fail) before I really grok something).
What are the Processes of the system?
Why should we ask this? What this is trying to do is to start to identify roles and responsibilities in your system - this is the first high-level pass in beginning an Object Orientated Design.
What you're doing is looking for:
- Possible (high-level) packages
- Possible classes within those packages
Try mapping it out using pseudo code on a white-board. For example - registering users is clearly going to be in a separate package from projecting loan dispersements.
The idea is that when a new requirement comes along (say the business need to add a new set of rules somewhere) it should be fairly clear where this responsibility lies and therefore where to put it, hat impact it'll have on your system, etc.
The other part to this, which goes hand-in-hand with processes is data and structure. Map out a Domain Model of the business domain - this is basically what you'll be implementing in you Business Logic.
Domain Modeling:
http://en.wikipedia.org/wiki/Domain_model
http://www.c2.com/cgi/wiki?DomainModel
Looks like you are off to a good start. You want to make a list of everything that your app needs to do. Then you may want to rank those from must-haves to nice-to-have, that way as the deadline comes closer you can drop features that aren't worth doing.
If you are not particularly restricted to an Object Oriented design approach, then I suggest you look into Data Flow Diagrams.
Firstly, you could replace heavy wording by verbose diagrammatic representation. Secondly, there are just a few symbols to learn. Thirdly, the scheme allows you to "zone into" the details to provide detailed design of that process. Fourthly, the diagrams were designed so that (almost) anyone on the origination can understand their representation (up to level 2 at least).
Here are some starting points for you.
http://en.wikipedia.org/wiki/Data_flow_diagram
http://www.smartdraw.com/resources/tutorials/data-flow-diagrams/
http://www.getahead-direct.com/gwbadfd.htm

Writing user stories for internal technical tasks [closed]

I am attempting to manage my projects a little better so I am looking at attempting to apply some of (eventually all) the features of scrum.
Looking at user stories specifically the high level format seems to be:
As a User I can Feature Description
or
Artifact is Doing Something
How would I write "Upgrade the Database"?
Is it simply Upgrade the Database?
I think I am being thrown off as there is no specific actor/customer and that the customer is the IT department.
AS A [person/role]
I NEED TO [do something]
SO THAT [provides business value].
For your example a user story might look like this:
AS A user of the XYZ application
I NEED TO get reports of ABC faster
SO THAT we can increase our conversion rates.
ACCEPTANCE CRITERIA - The database reliably completes transactions on average in 2 seconds.
I've added an acceptance criteria because without this you will never know when the job is done. Now at this point, you have a business case for upgrading the database. This story would be decomposed into a story where the role is the IT department or DBA, like so:
AS AN administrator for the database server
I NEED TO upgrade to the latest version of FancyDB 11.7
SO THAT we can improve the average transaction time for XYZ users to 2 seconds.
ACCEPTANCE CRITERIA - the new version starts successfully, the XYZ developers sign off on the test installation of 11.7, data migration is successful, we have cut over to the new db
When story decomposition is added to your box of tools, the story must start from where the user is a real part of the business, and the "so that" leads to a real business value. Then decompose the story into one or more stories in which internal users do things "so that" real users get the benefits in need.
Here are a couple of articles that talk about Story Decomposition:
http://jpattonassociates.com/the_shrinking_story/
http://old.cognitive-edge.com/wp-content/uploads/1999/11/56-1999-11-Paradox-of-Story.pdf
Scrum is not very prescriptive and there is nothing in Scrum that forces you to use User Stories for your Product Backlog Items (PBIs). You can definitely do Scrum without capturing requirements/features as user stories, user stories are just one way to do it. Actually, stories do work for many teams, especially web development teams, but this doesn't mean that they work in all cases and on every project (many projects are web development but not all, like in your case). There is no consensus about using stories.
That said, the recommended template for User Stories is actually As a <role>, I want to <action> so that <benefits>. I don't mean to be picky but, if you choose to use stories, I'd warmly suggest to use it as is, without removing any part. First, using a role do help (a same user/person can have several roles) to discover stories. Then specifying the benefits is really important to expose the business value of a story in order to prioritize them well. Regarding the value, you should think of it as end-user/customer ("put on customer glasses" --Mary Poppendieck). It is really not always that easy to express the benefits, but some tools might help and my preferred one is the 5 whys (which is used for root cause analysis).
In your case, this could lead to something like: As the IT department, I want the database to be upgraded so that users can benefits from the latest features of the application and [do a better job|have a better user experience] (not very satisfying though, use the 5 whys).
But personally I don't find that user stories are the best medium for technical tasks even if it is clearly possible to use them and if they have their strengths. Theoretically, stories capture the essence, not the details and should be a support for the discussion. I may be wrong but I don't find that technical tasks offer much room for discussion and creativity. So, depending on who will read them, what the should convey, I might use them or not. Another option could be to mix stories with another formalism for your PBIs. As I said, the point is not to use stories, the point is to have a list of prioritized and estimated items.
Upgrade the database may be one of the tasks involved in implementing another story that brings direct value to the user, for example I as a user can add a new foo to my bar.
If adding a foo to a bar requires a database upgrade behind the scenes, then you would include that work in implementing that user story.
User stories are worded this way to help ensure that any work directly benefits the end user in some way.
This gets to the forefront of why user stories are so great.
What benefit does upgrading your database give to the end user? None? Then don't spend the time and money doing it. Spend that time and money providing something that will give value to your end user.
If it does? Then think about it the other way. Maybe you can only implement a new feature when you have version x of your database software? In the dependency of the story, you could mention that database upgrade required to provide this feature.
tl;dr Don't just upgrade for the sake of it. Make sure upgrading adds tangible value to your customers.
Generally, technical tasks in the PB are frowned upon because they very rarely directly deliver business value to the customer. That's why User Stories are popular, because they force you to think about the business value of the story, and who it's being delivered to.
So, why are you upgrading the database? Can you identify business value in upgrading it, and why should the Product Owner agree to let you upgrade the database instead of building new features?
Is it because of a new feature that will make it possible or make it easier to do something in your application? In that case, that something should be the PB item, and the database upgrade should be a task within that story. If you already have stories on the PB that would benefit from the upgrade, then you should increase the estimates for one or more of those stories, and add the upgrade as a technical task to the story.
Is it because the vendor of the database is cutting off an old version from support? In that case you could have the upgrade as the story; something like, "As the department manager, I want to be sure that we have support for all of the software so that the continuity of the business isn't at risk if something goes wrong". Even that's pushing it, though. Generally, this kind of reason isn't really part of a project, unless the project has been going on so long the system software goes off support.
Is it for performance? Then the story should be about some aspect of the performance of the application that needs to be improved to deliver business value. Something like, "As a CSR I need to be able to retrieve customer information in a reasonable time so that customers on the phone are satisfied with our service". Then the upgrade becomes a task under that story.
Is it for some totally technical reason? If you can't identify how the upgrade is going to deliver business value, then why would you do it? Why would the Product Owner select it for a Sprint?
It's simply "Upgrade the Database" or maybe "When the new version is installed, there must be a way to migrate the existing database". If you already know more details about this step, then include them. But the story mostly exists to make sure something isn't forgotten; it's not to be detailed.
Later, when you get to implement this story, you can flesh it out (which tables, do we need one or more backups, is there a fall back scenario, etc).
OTOH, if the project is more complex, this can become a "tag", like a post-it notice which must be attached to many stories. That means you must include this as a "sub story" to all stories which change the database. As you can see, these "project-spanning stories" are a bit hard to track with agile methods.
Infrastructure stories do not need to follow the prescribed story template. Just write down what needs to be done and estimate accordingly
How about:
As the application support person I want to be on the latest version of database because it is more reliable / more secure / whatever.
You could even phrase refactoring like that:
As the application developer I want all the data classes in one module so that I can add new fields to the app very quickly.
Who benefits
What you want to do
What the benefit is
Ideally you don't want all the stories to have 1 be developers, but a few make sense (sharpening your ax instead of cutting down trees and all that).

Restaurant back-end systems and .Net

How would I programmatically connect to an existing back-end system of a restaurant using say Micros POS, with a web app built with .Net and C#. Thanks.
Update: Sorry for the ambiguity but I'd like to set up an online ordering system that takes users' orders and forward to a restaurant's back-end system to be processed and printed in the kitchen for cooks to see.
There is no particular reason for choosing .Net other than the fact I'm most familiar with it. I'm open to other options.
In general I'm looking for information regarding the feasibility of this and how to go about it programmatically. How would my app send orders to the kitchen's printers? Do restaurant back-end systems allow for a .Net (or any other) app communicate with it? Do they provide an API?
I currently work at an ISV that does basically this with another one of the big 3 point of sale systems.
First and foremost, get the Micros environment up in a VM.
Next, most of these back office systems are running either Windows 2000 or Windows XP (depending on the age of the system), so be really careful about the version of .Net you choose.
Now, as far as architecture goes, run a service on the back office that communicates regularly with a centralized web service (the website that customers order on), once an order is made available, from there you can then insert it into <insert pos type here>.
You will also find in most instances, especially with Micros being the largest Point of Sale on the market for restaurants, they will not be very helpful with documentation and helping you out with integrating into their software.
Also, I think that My Micros (their enterprise application) already supports this type of functionality.
Another opinion, get into FSTech this year and browse all the competition, there are tons for online ordering just so you can get familiar with the competitions feature sets.
What you need to know is define what you want to do with the POS before a choice of technology, if all you want to do is show some data/reports from the POS system's work, you would need to connect to whatever back-end database the POS devices feed into.
If you need to do something else, you need to look for whatever relevant documentation.
It would help you more to ask a more specific question.
I would probably start by determining if Micros POS has an API. If they do, are the systems at individual restaurants even connected to the net? Try chatting up the manager at a place that uses one of these systems, or just check the documentation on their website.

Project Server Sharing resources across departments

Microsoft Project Server 2013, I am newbie , I had a system under MSProfessional to see capacity when I had just parts of people
We have a number of staff that work % of time in multiple departments, is there a way of seeing the total capacity of a department e.g. Software Department when we have staff say 50% on SW and 50% on help desk
Also this applies to role so we expect staff to have multiple roles so when working on Help desk they have a different role to Developer.
In Microsoft Project there are many different ways to accomplish this. I know, this is a "programming" site and I have used it for query help in the past but what you are asking for is built into Project already without having to go into development mode. One way you can do this is with one or two custom fields. Or, you could use the RBS and the units on each Resource. I know that the goal is to answer the question but this is one of those questions that is pretty wide open because there are two or three good solutions but each are based on a different business scenario. So, in the spirit of giving a path to do this I would suggest that you add a custom field for each resource with the department classification and then also put in the Resource's capacity and then you can run as many slices of this data as you want from the Resource Center. That will show you availability versus capacity and workload. You also mention roles, you may use a skill set field for that and use that as another method of slicing this data. Again, many choices to get that data directly from the system....
In the end I was able to perform this with custom fields on the resources, able to work with % split roles the amount of capacity by role +ve and negative to give full capacity planning. Managers able to see forecast resource capacity and down to an individual see how they were being utilised.
This was not real time, but an over night process that collated the data into set of Excel pivots to give graphs on trend etc..
Worked a treat as it was even able to model based on historic for different types and classes of projects . Basically gave a detailed portfolio management facility, so even worked when projects had no detailed plans. This was based on either forecast and actual. Also showed issues with the profile of projects e.g. optimistic testing profile, showed resource bottle knecks and where high valued staff doing low valued tasks. Even identifying quality issues where high % of rework on user stories (no unit tests normally ) .

Is Firebase an all-purpose database?

I've been reading about Firebase and playing with it for a short while. The idea (BAAS) and implementation are impressive, and having programmed with Javascript it seems a viable choice. Not having to deal with scaling and other server side concerns makes it even more attractive.
My question is: generally speaking, is Firebase a first class back-end candidate for any average data-based application? e.g. billing, CRM, e-commerce, social, location based, etc. I do not include super light or heavy extremes such as a basic chat, or a nuclear plant monitor...
The answer may not be a clear yes/no, but was it built to support the general application space, or just stand out as a real-time read/write data service?
Would appreciate answers based on experience and existing production applications.
Thanks
Yes, Firebase is intended to be a first class back-end for any data based Web, iOS or Android application. The service offers real-time data reads and writes, but also comes with a powerful and flexible security system that allows you to write secure client-only apps, without needing any server code to enforce data boundaries.
There are several apps in production listed on the front page as customer and on the app showcase page on https://firebase.google.com/customers/
Firebase may not have support for transaction spanning multiple business objects.
e.g. When a sales order is booked then it needs to update inventory for multiple items, update billing in receivables , give sales credit to multiple sales persons etc.
Firebase team is supposed to come up with a data base trigger option which will make all these happen.
Firebase is now more capable and is considered as a full stand-alone back-end, especially after the introduction of cloud function. https://firebase.google.com/docs/functions/

Resources