It’s a wonderful time to be a software developer. The opportunities are abundant and the languages, frameworks, and tooling we use to do our jobs are amazing thanks in large part to our collaborative efforts in the open source world.

One negative aspect I see of this proliferation of excellent libraries and frameworks is the consumer mindset it can bring forth in developers. I think we all struggle with it, and my own struggles in this area are what inspired me to write this post.

The point of this post is not to divide all developers into either “engineer” or “user”. I believe everyone experiences moments on each side. The point is to recognize when we’re acting like users, and to change to the engineer mindset instead.

I also tried to keep the technology of this post as general as possible. I believe these characteristics apply to small things like languages, frameworks, and databases all the way up to larger concepts such as patterns and architectures.