It can be reasoned by two meanings: place or time. 

Examples for "place":

- *anbauen*: you put something __there__ (either to grow sth. (put the seed/plants in the ground) or to mount (add another piece), German: etwas da her**an** bauen.

Examples for "time":

- *ausbauen*: you __continue__ to build, means __out__ out of a certain time **until the end**
- *anbraten*: you __start__ to roast (the beginning, German: **An**fang)
- *ausbraten*: you __continue__ to roast, means __out__ out of a certain time **until the end**

You see there is not logical rule which one is used, it has developed historically, you just have to learn the vocabulary. This answer just gives you a certain background for the reasons.