A great post went around last week that I think everyone should read. There are a couple of great quotes that really capture the attributes that I think make great engineers great.
Understand, at least on some level, the things that you depend on. Own everything. Similarly, if you built it and it’s running in production, it’s on you to support it. Throwing code over the wall is no longer acceptable. When there’s a problem with something you depend on, don’t just throw up your hands and say “not my problem.” Investigate it. If you’re certain it’s a problem in someone else’s system, bring it to them and help root cause it. Provide context. When did it start happening? What were the related events? What were the effects? Don’t just send an error message from the logs.
Owning everything, or controlling your own destiny is so important. We've all worked with folks who try to own nothing and push work to other teams/individuals, and when things go wrong, they are the ones passing the blame as well. To no surprise, no one wants to work with them more than once.
Bugs will only get worked out if the code actually gets used. You cannot wait until something is perfect before adopting it. You will wait forever. Remember that Agile is micro failure on a macro level. Adopt quickly, deploy quickly, fail quickly, adjust quickly.
There are always opinions on how to ship a product, but I love building the simplest form of the product and deploying it and then iterating on it quickly. Projects that are developed for months and then leave deployment until the end as an afterthought usually run into a wide array of integration issues. At that point, that is unplanned work with no clear estimate of how long it will take to fix.