3 ms·
I see the point here. No matter what it's called, you're talking about people that don't use best practices, for better or worse. Best practices will get you w
by x64_lol 10y ago
I see the point here.
No matter what it's called, you're talking about people that don't use best practices, for better or worse. Best practices will get you where you're going in a predictable way, but there is a ton of inefficiency, as they don't take your specific problem into account.
When I was new to moving away from best practices, I wrote a lot of difficult to understand code that was very performant. I spent my evenings reading documentation, reading the code of the people I admired (mostly decompiled framework code), and was very excited to put what I learned into practice and learn by experience. It made me proud to write code that out-performed my coworker's code by orders of magnitude. I worked for one of the top 100 most trafficked sites in the US, and on a platform that was not designed for that level of traffic (none are).
A month later, the lead architect and I had a discussion that did not go my way. I was asked to write a very public and humbling apology to the team, and that apology still exists hosted on the internal network at that company (in a place that is easy to find). I had a lot of talent, but not a lot of wisdom. From that day on, I was to work on the most difficult projects exclusively, and under direct supervision of that architect. We worked on maintaining the performance edge, but doing so in a way that is easy for other developers to understand and extend. He taught me to interface directly with the other departments and senior management to make changes to the development process before work got to development; to enable us to do our best. It was a difficult road, and I was yelled at a lot; but eventually the architect cleared me to work without supervision. What followed is the most productive two years the company I worked for had ever had. I was promoted multiple times, was awarded patents, and was able to do a lot of lasting good. I had a hand in every project, feature, and department. I designed and internally evangelized a few myself, and had become the go-to guy to get difficult things done. You know this company, if I told you their name you'd recognize them and their product immediately (you've likely used my work).
I left about 4 years ago to build my own company. I do consulting during the day, and take jobs that require a hero to survive (to stay sharp). Since I left, there have been no significant new features or achievements out of the company I left.
Moral of the story: If you're talented, your idea of a good night is reading documentation and decompiling/memorizing products you like, and want to be a 10x developer; get someone you admire to yell at you, rip your work apart every day, and tell you that you're garbage for a year. It will do you (and your company) a lot of good.
- tensor 10y agoThere must be more to this than you've said. Simply writing difficult to read code doesn't seem like a good reason to tell someone they are garbage and to publicly humiliate them by forcing them to give the team an apology. Usually simply bringing it up in a one on one should be enough, most people when pointed out that they should focus on documentation or readability by others will quickly and gladly take that advice without being yelled at.
- x64_lol 10y agoThere was more to it. I was not just writing pages, I was writing a micro-framework to support my pages. I was doing manual complex multi-threading, run-time code generation and compilation, custom memory caching, run-time server-side generation of graphics (before HTML5 canvas or solid SVG support) etc. Two days after my hire, I was assigned solo to a very difficult project and the product department recognized me as a way to get everything they wanted done without push-back (and without going through the normal chain of command). I never told them no, so they gave me everything someone else wouldn’t do (including projects that had been previously cancelled due to technical complexity concerns, breaking the design refinement process that is meant to take place). Since they kept giving me challenging projects, I took every project as a personal challenge, and I finished them in record time. The team was very busy, and there was very little time for code-review. My micro-framework went unnoticed for quite some time. My pages looked simple, as they were mainly just making calls to the micro-framework. I thought I found my place; I was getting individually requested by the product department for projects (which was unusual), and I was giving them everything they were asking for. I thought I was taking pressure off of the rest of the team. I thought I was being a hero. What I was actually doing was creating an area of the code-base that effectively a black hole for everyone else and giving the product department unrealistic expectations. There is a natural trade-off between performance optimization and readability; and I chose performance optimization every time. My inspiration (decompiled framework code) had no comments, so I had no comments. It was performance optimized, so my code was performance optimized. I wanted to be my heroes; and there were plenty of heroes to become. The maintenance developers did not share my enthusiasm for study, hard-core mathematics and lateral thinking. They referred to my work as “the space shuttle”; as in “I don’t want to touch that, I might break the space shuttle”. I was never literally told that I was garbage, but I was made to feel that way. It was necessary, I was getting mixed messages; some of the managers loved me, product loved me, the designers loved me, the other developers didn’t know what to think of my work. Technically everything was written concisely, extensible (by someone who understood it), performed very well, had few bugs (if any), and was pixel perfect when compared to the comps. I was giving people what they wanted, quickly and relatively bug free. I lacked discipline, and my architect was ex-military. He effectively stripped me of my ego, and I am very glad he did. I imagine the apology was a plan to make sure management and other developers didn’t encourage me (and it worked). The year of discipline was the best thing that could have happened to me. It completely changed the way I thought about software development. It wasn’t just me anymore, it was everyone. It made me a much more effective employee, and taught me to spread complexity out. I am still fast, the code is still performant, but I stopped building black holes and do more of my code and process optimization in architecture, design, and process and less in fringe techniques. I still use fringe techniques when there is no “normal” way to accomplish what needs doing (and we can’t change what needs doing), but they come with full explanations now, are built to be discoverable, and I spend significant time training a second person in how to do the same in case I am hit by a bus. Before, if management gave me the requirement that they should be able to flush a Doberman down the toilet, I would build them the world’s most powerful (and frightening) toilet. After, I knew to argue that we should be burying dead Dobermans outside, and I knew how to get management to agree. TLDR: I am considered a 10x developer by my co-workers, but early on I was one of the scary people this post is warning about.