I am an engineer at a small software/systems engineering firm in the midwest. In terms of competency, I've noticed 3 types of engineers:<p>1. Those who need direct guidance. They perform one task and stop. They don't follow through on their analysis of issues or dig deeper to find underlying cause of problems. There's no high level thought process or context; rather, high level analysis is limited as they don't have the domain knowledge to understand the full system they're working on (they don't care to find out or don't realize the value in understanding the entire system).<p>2. Engineers in between the above and below groups. Usually fairly technically savvy -- can handle typical engineering tasks with competency, but lack motivation or don't actively seek out how to grow as an engineer. They stagnate without a great manager/tech lead pushing them to the boundaries.<p>3. Engineers who are extremely proficient. Implementing features and finding the cause of problems is not an issue for them -- regardless of the feature, language, framework, whatever. These engineers go and figure out how to get it done. These engineers are only limited by their dependencies and business requirements. If you told them to implement a time machine in software, they would figure out the closest possible way to do it, and provide you with a full technical analysis of how it works -- and what the shortfalls are.<p>As a fellow engineer, how do I encourage my coworkers to move from groups 1-2 into group 3?<p>There is little in the way of technical training at the workplace; if there were, it wouldn't teach the core skill of just plain getting on with it -- dig as deep as you can, find core problems, understand your system, grow as an engineer. In general there is a sense of laziness among engineers and a "wait to be told what to do" mindset.<p>Any thoughts or advice?