Thoughts on software development, from the trenches