An empirical exploration of code evolution