Jackie Chan's Best Advice
weedonandscott.com
weedonandscott.com
The advice is not about perfection, but challenge YOURSELF to do the best you within the constraints such as budget, deadlines, available resources, etc.
There are plenty of projects they're working on that could be better if they could spend another week or two working on it. But is it sufficient to actually justify that time vs working on other projects? Can we quantify how much difference that extra polish will make several months down the line?
I find it hard to fight myself, because no small part of me sees my work in the same way Durnik does:
> "Always do the very best job you can," he said on another occasion as he put a last few finishing touches with a file on the metal parts of a wagon tongue he was repairing.
> "But that piece goes underneath," Garion said. "No-one will ever see it."
> "But I know it's there," Durnik said, still smoothing the metal. "If it isn't done as well as I can do it, I'll be ashamed every time I see this wagon go by - and I'll see the wagon every day!"
I landed a huge improvement on a product at work about 9 months ago, after months of work on it. Cut execution times down by a huge amount and made the customer experience more consistent. Managers look at it and see what I achieved. I look at it and see all the things I don't like about it, all the ugly hacks and things that make it work.
The alternative is programming as a hobby rather than a profession. But I would need to find a comparably well paying and stimulating profession first.
> I don't believe any company will give me a chance to write good, polished software.
I do not believe it either, especially due to my experiences. I do not work in IT for a reason.
This is basically a red flag for mismanagement. Even startups can't work this way. You either need to hire engineers who have enough experience to make the right trade-offs under high pressure, or you will likely not survive the long race after initial MVP and funding. However, a lot of startups are not funded for the long run either, but rather to quickly make money for founders and potentially be bought by some large fish, who stamps out competition and replaces the product anyway. So there is that.
You would be doing valuable service to the community by naming a few names
I have a list of at least 6 large corporations who do just that. When I worked at Polaris, they re-developed all of their sites on a six month rotating basis so if some new fangled tech came up, it was easy to take advantage of it. They were one of the first companies I knew who were running full-stack JS apps in prod before most people were even considering it.
Even where I work now, its all about speed to market. Get it working, release it, and then all the execs and upper management types pat themselves on the back about how awesome they are because they got a janky ReactJs app for users to use in less than 6 months. Several months later of fixing all the problems, they start talking about just scrapping the whole thing and starting over.
Its maddening to think these people believe what they are doing is somehow groundbreaking in software development. When in reality, they're just releasing a really poor version of their software, spending more months fixing it than the time it took to get it released and then killing it or transitioning to some new shiny framework they want to use instead.
OP was spot on in what my experience has been the last 10 years of my working in large corporations and small agencies.
There are some cure-almost-alls. Most are fashion. Sadly it's how it is in software and it doesn't seem like it's ever going to change.
I wish this was true, but in my experience it's not. The company I currently work for has an old crufty codebase, large areas of which are not understood by anyone but the few remaining early hires. This codebase is going on 20 years old and is getting more complex with every release. And yet our revenue grows year after year because our competitors are far, far worse.
Another company I worked for years ago has by far the worst code and development practices I've ever seen. I'm talking about having the actual Visual Studio solution running live on the production server, and development was done by opening it in Visual Studio and hacking on it while it was running. I have never seen such towering incompetence before or since. I left partly because I was convinced the company would implode within a couple of years due to a developer accidentally nuking the production database or because the cost of developing new features would exceed any new revenue they could possibly bring in. Five years later, somehow they're still going strong.
Most large companies in the world (e.g. banks) have appaling code and coding standards. As far as I know, none of them has yet gone bankrupt because of bad code.
I think we probably overestimate how important code is. The business world, esp. large companies, is very far from perfect (more of a big fat mess that somehow still works and produces money without its products killing people etc.) and it doesn't need perfect code, the same way it doesn t need perfect accounting or perfect product design. In most cases, mediocrity will do, because the competition is just as mediocre.
If you want perfect (or even very good), become a hobbyist instead.
Or maybe the cost of swamp code is distributed over many people and non-programmers have difficulty understanding how much it slows down programmers. Programming is hard enough as it is because we need to translate human to very abstract, and work with very abstract on a daily basis. I think it's borderline genius to be able to do the translation both ways. That is, to make non-techies really understand the cost of messy code.
https://drek4537l1klr.cloudfront.net/geewax2/v-10/Figures/ch...
Does refactoring provide a business advantage or just a pathway to attempting code perfection?
If you are in it for the art, then you need to find that shop that is in it for the art. Many aren't. I'm sure some are.
If you are in it for providing outstanding code because it provides personal satisfaction or meets your world view, then great. It sounds like you need to find a way to provide what you want to provide in a timeframe that is almost as quick as the alternative.
If you want to achieve personnel perfection and can't find a way to be almost quick at delivering a viable product as the alternative, then either you change, accept it, or move on.
You sound like you are competent and have a world view. I would figure out ways to speed up your output (through templates or language choices that match who you are). If your code is great and you develop it fast, the people who are rushing you won't have a leg to stand on.
If you are good, you can have it all.
Stark contrast to things like Elixir where there's a labor-of-love aspect to it.
Obviously "minimum" differs from situation to situation. Just enough effort, but not more than needed, but not too little either.
I finally realized that there's usually not a "perfect" engineering solution, and you can spend weeks or months going back and forth on a plan. So the people that just plow ahead --even if not great-- wind up delivering "something", which is better than nothing. And put another way, they land 2 failures and one moderate success in the same amount of time the rest of us are busy landing our one single success... which also winds up being only a moderate success at best because writing good software systems is hard!
Sub optimal can move the needle and that's what a lot of people are looking for.
You see this in open source projects too where code gets forked and then it becomes difficult to adopt features from mainline or the other forks etc...
The highest value code I ever wrote was probably a 50-100 line script that collected some data requested for due diligence and which eventually clinched a >200 million USD investment round for the company. That script was never used again after that.
Since then I changed my LinkedIn headline to: "Solving problems with technology".
That's what people care about. Not which language we use.
Add competition to the mix and "good enough" might put you in the ground.
Interactions are more than just about the software. It what separates Disney parks from Six Flags.
I've been very inspired by Mandelbrot's life, lately. Reading "The fractalist", his memoir, it's possible to realize two things: 1) how incredibly resilient he and his family were; 2) how he worked from his own definition of success: the fact that he ended up achieving what most people define as undisputed success was almost incidental. He was, to use Joseph Campbell's words, following his bliss.
Mandelbrot was born in 1924. The Mandelbrot set was discovered in 1980. Of course he worked on important things before that, but having his major discovery in the mid 50s puts things in perspective.
I think Jackie's perspective makes a lot of sense as a creative artist though. The extra effort has a tangible reward and is appreciated by those around him.
I find that I'm most creative when I'm constrained. And these types of mindset hacks allow me to enjoy whatever I work on.
Systems and low-level software such as compilers, operating systems, platform software. A bug in the kernel affects billions of devices, a bug in AWS/Azure/GCP affects millions of VMs.
In any business the bottom line is king and time and resources are limited (in fact that's the way it is for about everything in life). You can still do your best while delivering a "workable solution". In fact being the best at delivering workable solutions is a very good and fulfilling aim. You can strive for quality with sensible design, least number of defects, etc. while delivering on time and within budget.
I mildly disagree (commenting mostly on the article, less on JC). I certainly don't treat every aspect of my life "the best I can", but rather my time is precious and I try to be smart about my time. Where is it best allocated? Folding laundry to my best ability? I could certainly research it and become an expert, but is this good use of my time? Is this how I want to be known as? Is this this how I want to define myself?
Time is precious. Know where to spend it.
In your case, one of these goals seems to be making efficient use of your time. So, the article would advise you do the best you can at that.
I think of it from the same perspective of business. Instead of doing OK support do your BEST support. If you are struggling, then choose to do no support - if your customers leave because support is critical, then guess what, you will probably get more benefit from doing your best.
So I think that advice works well as a way to really minimize your engagements, and figure out which ones are essential, by not just doing them just cause, by trying to cancel them entirely otherwise.
No. I disagree.
The world finally started noticing that mental health actually exists and it deteriorates when you are being treated as an assembly line robot that can barely (if ever) stop.
We don't exist only to keep trying harder until our bodies cannot take it anymore. There has to exist a better way to be productive, useful, fulfilled and successful. But almost nobody is looking for that another way.
In terms of current modern economics and ways of treating workers, we are in a local maxima and seldom anyone cares looking around for a taller hill.
(Let alone "best" is not clearly defined but I take it as quality/performance/output - frequently materialized in money or professional advancement).
That's not motivational, that's being threatened with a big stick for a huge chunk of your adult life.
Jackie Chan's advice definitely applies to his work -- movies and stunts. I can see how his words are true in that area. What many successful people keep missing however, is that their advice is very far from universally applicable.
This advice can absolutely be applied to making a movie, writing a book, painting a picture, etc, but not to software.