At the end of each day we each post a status update of what we did, what we got stuck on, what we where going to do next into a skype chat room so everyone else can see what is being done. Having to account daily for your actions is a great way to stay on track.
Daily (yes, daily) short (about 3-5min/member) huddles at all levels. Borrowed it from Scrum. As you go up the chain, from team to dept to management, the meetings get broader in scope obviously. Individuals may talk about specific tasks, while management may cover changes in metric trends.
In fact, scrum is a great general project management technique if you ignore the software development-specific bits.
Each huddle, you must "answer me these questions three":
When any team member continually over-promises and/or under-delivers, first we see if the root issues can be drawn out, we solve, and if there is no solution or continued problems, the individual gets "voted off the island".
ADDED: This will go contrary to command-and-control types, but I worry about point "B", not how my staff gets there. IOW, are there clear goals and metrics? Are they hitting them? If so, what does it matter if they blow steam playing Farmville for a bit?
Hire the right people and give them interesting work to do.
This is a big topic but I think this is the most crucial bit:
Ok, I have an answer which is totally logical but some people might not like. You need to monitor the exact hours worked by your staff, and monitor Internet use and computer use during those hours. It's important to not JUST monitor, but if you have no monitoring at all you will for sure be losing some productivity to "goofing off". Check out www.timedoctor.com (my software) or www.rescuetime.com to implement this type of monitoring.