Write a Python function to find the smallest missing number from a sorted list of natural numbers. The list is guaranteed to be sorted in ascending order, and it may contain duplicates. The function should efficiently determine the smallest missing number using a binary search approach.
#### Example Usage
```python [main.nopy]
find_smallest_missing([0, 1, 2, 3]) # Output: 4
find_smallest_missing([0, 1, 2, 6, 9]) # Output: 3
find_smallest_missing([2, 3, 5, 8, 9]) # Output: 0
```
#### Constraints
- The input list will only contain non-negative integers.
- The list will be sorted in ascending order.
- The function should aim for a time complexity of O(log n).