You can display contours and slope arrows on a surface style to identify the areas where the uphill locations are in relation to your roads. This can be cumbersome, however, particularly if you are dealing with a large surface where performance is affected by the need to regenerate all those slope arrows.
The uphill side of the road can be identified more efficiently by using a combination of a temporary corridor and a volume surface.
First create an assembly using the generic subassembly 'linkoffsetandslope', setting a slope of 0% and offset from baseline to say 20m (wide enough from baseline to give a good indication of the lie of existing ground).
The assembly layout appears as below:
Next create a corridor using this assembly, the access road alignment and vertical design for the access roads. Create a surface on this corridor using top links. Now create a volume surface (with 2D elevation banding style) using the existing ground as the base surface and the corridor surface as the comparison. In the surface properties on the analysis tab run an elevation analysis with one range and set the maximum elevation for this range to 0m.
In plan we can easily identify the uphill side of the road along our access roads.
In this case green areas identifying the sides of the alignment where we need ditches need to be applied. We can now split our design corridor at these locations and apply subassemblies with drainage on the correct side to each region.