The idea is that any piece of software goes through the following 5 stages in strict order:
- 0 - zero - there's no software, there's just a programmer thinking hard about it but never getting anywhere.
- S for 'sucky'. The software is embarrassingly bad but it does something.
- A for 'adequate. The software is still fairly bad but now it's stood up to enough beating to be able go into bars without hiding in the restroom.
- G for 'good'. The software has started to look a little like the thing it was meant to be. That probably doesn't have much relationship to the thing the programmer was thinking when when they were thinking hard about it at stage 0.
- A for 'awesome'. I personally can't say much about this stage but I believe that it exists because I've used some awesome software.