>That guy who decides to rewrite an entire system in his off-hours in a new language without telling anyone else?
I have worked with this person on more than one occasion and I would love to work with them again. Entire new products and verticals are often the result of such projects.
Companies have such a hard time dealing with risk. They think that the only appropriate thing is to always minimize risk. "Look, I have minimized risk at every opportunity. I am doing a great job!" That's not true all the time though. When exploring new business models or in some other situations high risk activity should be preferred.
As one of these problem people myself, it's helpful to know that this is considered bad behavior. I'm not sure it should be though...
The thought process is that many times the barrier to adopting a better technology is just the time investment. So if you're sick of working with a problematic system, but the team doesn't have the time to fix it, fixing it away from work might remove that pain point from your life. And since often these projects begin and even end as just an experiment, there's not much reason to tell the team until you have something.
It doesn't really seem to have much of a downside - assuming you're just presenting whatever you come up with to the team later as an option, and not going crazy and replacing production systems without asking.
It's okay to rewrite whatever you want in off hours.
Just deploying it without consulting with anyone in place of the original production system would be a poor quality behavior.
If you think you have something, make an isolated test deployment of it for internal evaluation, and so on. No matter how the existing system sucks, at least it has some mileage in deployment and has been through some QA.
The "without telling anyone else" part is potentially the problem.
Imagine you committed time and energy to build a decent system - not perfect, but most people are ok with. You feel a sense of ownership on this system. Then one day, a coworker of your tells your manager that he has built a new system in his off time. He also made a conscious decision not to discuss the effort with you. How would that make you feel?
Yeah. As I've gotten older I've cared less and less for "my code." If the new effort is demonstrably better than the existing system, then I'm happy. Who cares who wrote the old stuff, this is better.
The problem, of course, is that often the new system is not better, it's just newer. Sure, it may be simpler and easier to understand, but is that because it is an inherently better solution, or is that because it doesn't deal with all of the the real-world conditions that the productions system has grown to support over time?
Even then re-writing is often a good thing. You can re-approach the problem domain with all the insight you've gained building the old system.
Ideally there would be good enough tests of the old system that if the new system passes the same tests, then there's high confidence that it will perform correctly in production too. That way we get the benefit of being able to refactor or reimplement entire subsystems while still having almost the same assurance as the old system.
I would suspect that the new system doesn't handle the corner cases. Its easy to say "I can rewrite reddit in a couple weeks" but there are lots of details.
> I would want to know if the new system is going to make everyone's lives easier.
If it's a large system designed by a person on their own in a corner, without interaction, without feedback on features and usability? ... it's unlikely to and I would be rightly wary.
I have however seen existing systems that have pain points that everyone complains about but no-body has the time for fixing, until someone finally takes a few days out to experiment with something different, and sometimes the results are excellent. But IMHO that's not exactly a "rewrite".
It very much depends on who that person in the corner is. I've seen junior devs waste a lot of time doing this. However, I have seen one or two examples of a senior dev solving a real pain-point that wasn't getting fixed within the system, for one reason or another.
Right; for me the determining factors between the two cases are:
1) It is a known pain point, so the problem has been discussed. Probably a lot. The pain is the reason for the code, and if there's a new tool involved, that's additional not a main reason.
2) it's usually a technical task - for example something related to faster, more reliable deployments. This means that the requirements are already well-known by the engineer, and that it probably hasn't been addressed yet as it's hard to tie to a business benefit.
3) Experience of the engineer. Senior devs are more likely to chose a good target.
Yeah, I feel like going and redesigning parts of the system that are usually other peoples' area would result in some interpersonal problems at the least.
I'm sure the dev ops people will be happy I converted our automation from Chef to Puppet, you're welcome!
> I feel like going and redesigning parts of the system that are usually other peoples' area would result in some interpersonal problems
Assuming this is done during free time and you're presenting the solution in a respectful way, then that's their problem, not yours. If you perceive this is going to happen within your team then there is already something wrong. There isn't enough trust and cooperation in working towards a common goal. Every solution should be openly presentable and scrutinizable by every team member.
If you suggest an idea, completed or not, and someone is offended by that, it's not your fault. It is a consequence of your actions. And, I'd argue it's not your responsibility to care for others' feelings to such a degree.
Some people may disagree. I don't know how they can survive. They must feel they are constantly walking on eggshells, wondering how people will react to whatever they say.
Independent of social context, this type of act is generally viewed favorably. Machiavelli claims that "nothing makes a Prince so well thought of as to undertake great enterprises and give striking proofs of his capacity." [0]
How this would go down in your particular workplace all depends on the surrounding political and social context. It could either be interpreted as "Wow, that guy is such an amazing programmer that he was able to refactor our whole legacy system in his spare time! We should definitely keep him on board and learn from this kind of work, even if we can't do a full-scale replacement." or "Wow, that guy is so self-absorbed and unwilling to cooperate with his teammates that he went home in a fit of anger and thought he could replace 10 years of work in a few weekends! What an abrasive blowhard. Let's fire him next time he gives us an excuse."
The halo effect is going to be the primary determinant here. [1] If your colleagues and superiors are predisposed to interpret your actions favorably, they'll probably do so until you give them a reason not to, and vice-versa. It takes a lot of work to maintain a good halo, and it should be considered your primary job duty if you wish to have a fulfilling career as an employee.
Humans are social animals and will evaluate everything about you, including your technical competence, by the social signals you output. Successfully managing these can get complicated in the workplace due to the competing interests of the people you come into contact with during the course of your employment.
Don't take these articles too seriously. There are a lot of reasons people consider someone a troublemaker. It's more about your 1:1 connection to other people than what category of person you are.
Yeah, in general, it's good practice to not take any article on HN seriously. Assume that the article's author and every commenter may not be experts at the thing(s) they're claiming to be. Especially when there's social aspects involved.
What aren't you doing while you are going off and being a super hero?
Are you disobeying your manager's direction? (And thereby undercutting their creditability/authority - and how does that make the manager appear to their supers/peers?)
Why can't you go to your manager and ask for permission? If not, why not?
How would you feel if your "great" rewrite is rejected - because someone else was already doing the rewrite; or because the system is going to be redesign entirely? (For example, the code will be ported from .NET to Java - and all the .NET code will be discarded)
If you haven't yet, try being a manager for a while and then see if you still think that this sort of troublemaker.
> It doesn't really seem to have much of a downside - assuming you're just presenting whatever you come up with to the team later as an option, and not going crazy and replacing production systems without asking.
That's a big if. The fear is that such a person doesn't have the judgment to not be the type of person who goes into personal-overdrive into making unfeasible changes (or, worse, into bikeshedding). It doesn't mean that such a person is a horrible person, just that opening lines of communication should be a priority, rather than letting that person put themselves in a position of difficulty.
I often would suggest rewriting apps in a different language or platform.
Management had a problem with our ActiceX based web apps not working with Macs or OS/2 machines. I offered to rewrite them to use Java instead and I was told no because Java wasn't made by Microsoft and if I wrote anything in Java I'd be fired.
Another job I aaw that VB 6.0 and Windows 98 was too slow and I offered to rewrite the app in C ir C++ and use GNU/Linux to make it faster. Same problem not Microsoft so management didn't want me to rewrite it.
Replacing a home brew ORM in an application of any scale is a massive time and bug investment. It will be tied into every single aspect of everything, and even into the build and database deploy processes. It often has its own classes with their own internal behaviour which get passed around raw - so you can't just upgrade one price of code and test and move on, you'll have to rewrite the entire product at once.
Having seen it done I can understand very easily how someone could not just remove it.
I have no choice but to replace it as the databases it accesses are changing. But as you said, it is a massive sink of time to change a core part of your system that some many other parts depend on.
Sometimes that behavior arises because the person is bored, or they feel their skills aren't being utilized, or they feel like their concerns about an existing system are being minimized.
Yea, those people need to learn to work on their own stuff. I do so much of my own/oss work at work and am surprised at how everyone has always said I'm doing great and my stuff is always out faster and more tested than everyone else.
..expectations are low, and there's value in keeping it that way! :)
(all my favoruite stuff has been stuff I've worked on for myself, that doesn't earn any money. I find almost all of it more worthwhile than any of the technical entrenched garbage I've written in the corporate world for the past decade of my life)
...which can have wide-reaching implications if you release work product produced during work hours as OSS. While your company may seem like they don't care now, that can always change. Copyrights last a long time. Please don't risk the well-being of an open-source project by surreptitiously submitting code that your company owns.
> That guy who decides to rewrite an entire system in his off-hours in a new language without telling anyone else?
I had a boss who came back from vacation that was so threatened by the automated testing harness myself and another coworker created, that she rewrote the entire system herself.
I've seen this. Automated a bunch in well documented PowerShell modules which I trained staff on and was all taken out when I left.
Because the PM said, "If it can be in a script it should be in C#!"
Of course the C# programmers didn't like being taken off of productive work to build infrastructure tooling which was working perfectly well in PowerShell where it belonged. So they quit. So did the remaining DBA staff. All of them.
So the company told their customers this feature was broken and would not be updated in the foreseeable future. That was a year or two ago.
They could just run the script. But they refuse to on principle. So they suffer and the customers suffer. Companies are great!
She talks about risk/reward and acknowledging the benefit new tech can bring to an organization. Minimizing risk doesn't mean no risk. High risk regardless of reward should not be preferred; risk/reward discussions and reasonable decisions should be preferred.
>That guy who decides to rewrite an entire system in his off-hours in a new language without telling anyone else?
Damn! I was thinking about doing that right today for a subsystem we use at work... trying to gauge its performance in the new language and eventually "sell" it to replace the existing one...
Its been a bit over generalized -- sometimes its a nice surprise. If that subsystem at work is a source of constant pain and annoyance, it may be welcomed with open arms. I think the case she's intending to illustrate is something like someone going rogue and re-writing a working system. In another language. Maybe a language that nobody really wants to use. They could have at least discussed it with their colleagues. Two (mostly) different scenarios!
A couple of instances of this come to mind. One is Paul Graham's story of Trevor Blackwell rewriting the viaweb code in Smalltalk. Paul said No. Reddit was written originally in Lisp, but they rewrote it in Python. That stuck.
I think that attributing resistance to the off-hours rewrite just because of minimizing risk is oversimplifying the issue.
I think you're misinterpreting it. She's saying a person who rewrites (implied: and implements) a core process without informing other developers or product teams.
I have worked with this person on more than one occasion and I would love to work with them again. Entire new products and verticals are often the result of such projects.
Companies have such a hard time dealing with risk. They think that the only appropriate thing is to always minimize risk. "Look, I have minimized risk at every opportunity. I am doing a great job!" That's not true all the time though. When exploring new business models or in some other situations high risk activity should be preferred.