Design interview questions can be pretty vague and answers often depends on interviewers requirement.

But there are some generic steps that you can follow:

Gather requirements
Think about best data structure that can be used
How important are Latency, Consistency and Availability for your system?
How is concurrency handled in your system?
How many classes will be there and what will be their methods
For example,

Some simple requirements for your question would be:

For users:

call an elevator by pressing buttons in lobby.
Choose a floor
For System:

get all available elevators
choose any available elevator and send it on the requested floor (this can be optimized)
get list of all floors where elevator is supposed to make a stop
Classes :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class ElevatorSystem {
Elevator[] elevators;
int totalFloors; // total floors in the building
Queue<Elevator> availableElevators; // Queue of all available floors
boolean[] requestedFloors; // all the floors from where an elevator was requested
public Elevator getNearestAvailableElevator(floorNumber);
public void callElevator(floorNumber, elevator);
};

class FloorLobby {
Button up;
Button down;
};

class Elevator {
int id;
int currentFloor;
boolean goUp; // is elevator suppose to go up
boolean goDown;
boolean[] isAStop; // flags all floors on which elevator is suppose to stop
Button[] buttons;
public void putAsAvailable(id);
public void gotoFloor(floor);
public void start();
public int currentFloor();
};

class Button {
int buttonId;
int floorNumber;
};

reference:
https://goo.gl/q1OYej