I feel super unproductive at work. Looking back at my career I've hit peak productivity when I could manage a codebase, the culture around the codebase, and external visibility. But the culture of my current group is: heroic hacking. Other team members seem able to work in this environment but I feel paralyzed in this atmosphere of slapdash jupyter notebooks, untested undocumented sprawling ML models, and not an interface in sight. When I suggest we find consensus on an architecture or coding practices or even commit conventions, I get blank faces that seem to ask "what are you talking about". I feel gaslighted about tech debt.
One view is: this is just n00b startup engineering.
Another view: maybe my old engineering practices are a crutch? Have I relied on thoughtful design, thorough tests, version control policies, documentation, static analysis... because I have untreated ADHD or sth and can only focus on one modular chunk of code at a time? Is adderall eating engineering practices? How do these other engineers get anything done?
Do I need pills or a new position?
* Wizards need to prepare their spells before they can be cast. They want upfront planning and design. They rely on rules and systematization. They prefer top-down design, breaking a large problem into smaller and simpler ones.
* Sorcerers cast spells at will. They're more volatile, but their flexibility is greater. They prefer to inundate themselves in the problem and experiment their way forward and to sort of mold the code like clay until it does what it should. They prefer bottom-up design, starting by constructing small pieces and moving on to growing a large solution organically.
Wizard programmers will think sorcerers are sloppy, undisciplined and out of control.
Sorcerer programmers will think wizards are overbearing bureaucrats stifling progress with unnecessary rules and plans.
I don't think there's a clear cut best approach here. I've known developers who were extremely productive in the long term with both approaches. It is probably fairly domain dependent. Wizardry is significantly more reliable when the domain is well understood, sorcery has a definite upper hand in a poorly understood domain.
I think the strongest programmer is capable of both styles. They're very different disciplines though, so this is hard. Wizardry requires capacity for patience and discipline, while sorcery requires a strong intuition for design and faith that the design will come together despite not knowing how in the moment.