As a Mid-Level Engineer...

By this time, you would have no doubt been exposed to and have gained much experience in the fundamentals of software development.

You would have begun to start recognizing patterns on the right way to do things, and so called code-smells on anti-patterns that tend to lead to complication and problems.

At this level, you'll leverage your skills to focus on problems at the product or feature level. This is in contrast to your previous job level as a junior engineer, where the scope would have been limited to the implementation (to follow the spec) of a specific nature.

This could manifest into tasks like: – implementing a feature into your existing system – making improvements to your system – generating system and application metrics; monitoring and alarming on performance – regularly participate on an oncall rotation – contribute to hiring and talent management / growth

This doesn't mean that you will stop working on bite-sized code, nor does it mean a junior engineer won't immediately start contributing to a new system design. These are just the 'baseline expectations' of the role.

As an anecdote, three months into my stint as a junior developer at Amazon, I was tasked with designing, implementing, deploying and monitoring a custom file-distribution mechanism to populate our remote application's in-memory pre-computed cache. This is mid-level work.

Three months into my promotion towards a mid-level engineer, I was configuring data and job pipelines and helping out in implementing tasks for my teammates.

In general, as you go up the ladder in job seniority, the scope of work increases in complexity and ambiguity. Past experience and wisdom will be important towards informing your system and application design.