Complex and complicated systems are fundamentally different.
A complicated system involves many moving parts, but they interact from one to the next in a linear and predictable way.
A complex system also involves many moving parts, but they interact among each other in random and unpredictable ways.
Software projects of any useful size involve many moving parts. As developers, we should strive to build applications that are merely complicated rather than complex.