Our company is in the process of introducing elements from Scrum in our working process. As we have flexible work time (not completely sure how to say it in English. People can come to work when they want, in some limits, as long as they make their work hours), it's not easy to let the daily Scrum happen really early, as the method recommend it. My first idea would be to define a limit hour to let the Daily Scrum begins, even if everybody is not here, but to begin before this hour if everybody is here. How do you manage it?
Consider the limits that are imposed on people's work hours. Most companies typically maintain "core hours" when all employees are expected to be present (barring exceptional circumstances). It would be a good idea to schedule scrum during those hours. I would suggest keeping it at the same time, even if everybody is present earlier, because doing so would establish a habit.
There will still be days when someone's away due to vacation or an emergency, but that's okay. In a previous job, if someone was away for a day or working from home, they'd typically send out an email to the team with a brief update on the status of their work.
I think even an afternoon scrum could be beneficial with some adjustment from "here's what I did yesterday and will do today" to "here's what I did today and plan to do tomorrow".
I've run into this before, and seen it handled almost exactly how you describe. We pick a time, usually around 10AM when most people will be at work and we do the Scrum meeting then. If someone isn't there, we just go without them.
As long as you pick a time that corresponds well with the "core hours" of most of your team, you should be pretty safe.
It's critical that all developers are present for the SCRUM meeting and that absences are the exception rather than the rule. Agile/SCRUM allows you to adapt to changes quickly and you can't do that if everyone is not participating. That being said, you also need the discipline to start on time as to not waste anyone's time. It may take a while, but teams usually get used to the SCRUM starting time as it becomes part of the culture.
This is a dicipline thing - you need your scrum developers to have some sort of discipline. They are being paid to code after all. The scrum is a core part of the methodology and a part of how the PM keeps track of what is going on.
Firstly, before changing anything or getting heavy handed, check with HR (or the contracts directly) there will almost always be a clause about hours in the office. Use this as your starting point.
10am is not unrealistic as a scrum time; however, it does tend to interrupt the flow for people who get there early, so try for earlier if you can.
The key thing is that all developers should be there. If you have one dev who starts late and thus is never at the scrum, he or she will always be behind. He/she won't get the benefit of the shared learning and will never really get Scrum as a whole.
Martin Fowler answers these questions (and more!) about stand-ups beautifully in the following article - it's the best one I've found about the topic. In it, he says
With flexible work hours, not every team member will arrive at work at the same time. A common practice with “flex-time” is to use a set of core working hours. The start time should be at the start of these core working hours. Similarly, if team members need to arrive later for personal reasons (e.g., need to drop off kids at school), the start time should be set at a time so that everyone can attend.
He also talks about the importance of holding the ceremony at the same time (in the same place) each day. I wouldn't recommend you change the time even if everyone is in the office early.
We want the team to have a sense of ownership of the stand-up. We also want interested parties to be able to drop by to observe a stand-up to avoid having to schedule yet another status meeting. This is difficult if any particular team member is allowed to force a delay or change of location of the stand-up.
Take a read here for other recommended stand-up practices: http://martinfowler.com/articles/itsNotJustStandingUp.html
If everyone respects the core hours, then I recommend holding the stand up no later than 30 minutes after core hours start. This gives people a chance to get in, get settled, pour coffee, review what they achieved the day before, then join the stand up.
In general, I prefer having the meeting earlier in the day in order to provide the most time to handle obstacles, but, as always, let the team decide.