rewrite — programming a software again