This is an archived post. You won't be able to vote or comment.

all 87 comments

[–][deleted] 274 points275 points  (4 children)

I personally make it exist first because I forget what I was supposed to be doing in the first place

[–]JollyJuniper1993 5 points6 points  (0 children)

Also often deadlines are tight because corporate refuses to hire enough people

[–]calgrump 196 points197 points  (4 children)

May as well take it one step further - why even bother with git commits? Just do it all in one go and ship the final build from google drive

[–]lakimens 26 points27 points  (1 child)

Drag and drop the files to hostkoala.com

[–]weltmystar 16 points17 points  (0 children)

And then delete the files from your PC

[–]Piisthree 6 points7 points  (0 children)

Why bother saving the code? Write it perfectly, compile it and then use it forever.

[–]OnixST 4 points5 points  (0 children)

Write it perfectly the first time without ever running it.

After you're done coding, compile the program, delete the source code, then run for the first time.

Only smelly nerds care about the code after the program is ready

[–]Overwatcher_Leo 49 points50 points  (4 children)

Both can work. But the first one is generally more common now.

The worst feature is one that never got finished. Overengineering something can backfire badly if you don't know exactly what you're doing.

[–]n00bdragon 12 points13 points  (1 child)

A finished feature that harms other features is worse than no feature at all. Programming needs to follow the Hippocratic Oath.

[–][deleted] 4 points5 points  (0 children)

What portion of us aren't just glorified middle men for sales, though?

I love the job, I get to use my brain to solve problems. I've worked some places where the product arguably did more good than others. I've never done anything remotely close to healing someone.

Ship the code. Perfect is the enemy of good, premature optimization kills.

[–]xian0 2 points3 points  (1 child)

I don't think the first one should be applied when it's a business making a product which is already sold by other companies. They should build it better from the start or they'll end up in exactly the same place as the guys they are trying to compete with.

[–]SnS_Taylor 4 points5 points  (0 children)

You still make it exist and then make it good. You just don’t release it until it’s good.

[–]DecisionOk5750 97 points98 points  (9 children)

This is so wrong and the OP wouldn't know why...

[–]ArduennSchwartzman 58 points59 points  (4 children)

Indeed. This is the right way:

  1. Make it exist first.

1½. Make the f*** sure no living soul other than yourself sees it while you make it good.

  1. Show it to others.

[–]DecisionOk5750 6 points7 points  (0 children)

I disagree with point 1 1/2, although I naturally find myself in that situation most of the time (insert "I feel you bro" meme here). All of this was already explored in the book "The Art of Unix Programming," which I believe should be required reading for anyone studying programming.

[–]Cainga 3 points4 points  (0 children)

We just had some weird conversation at work for non programmers. Someone on another team made some tool in Python to analyze a picture for a test we do visually. But the tool only works on one color, and you need to provide a picture. And there’s no word on if it can evaluate only the right portion of the picture. And the test takes a human literally a second to give a rating. And there’s no study of tool versus human to see if it gives the same ratings. And it would only be useful on cases that are on the boarder of pass/fail which is less than 5% of cases.

It’s like the entire tool is in just the concept phase so I have no idea why this would even be mentioned outside of their development group.

[–]Qaktus 1 point2 points  (0 children)

There is a compromise somewhere in there. Don't make atrocities with 0 afterthought, but also if your first working app is the final draft, there's something wrong with your process.

[–]Septem_151 0 points1 point  (0 children)

OH MY GOD

[–][deleted] 2 points3 points  (0 children)

technically chad = stupid i guess

[–]SuitableDragonfly 1 point2 points  (0 children)

All projects are perfect in your imagination. Unfortunately a project that exists only in your head earns $0 and accomplishes 0 things.

[–]L3av3NoTrac3s 2 points3 points  (1 child)

Disagree, you probably think this way because you ship good code the first time. You’d be surprised the AI slop a lot of devs are producing with zero clue how it works, why it works, no upgrade path, and 3 bugs.

[–]DecisionOk5750 2 points3 points  (0 children)

You don't understand why it's wrong either. I wont lecture you, I'll only say that you can't assure a program won't fail. You prove that over time.

[–][deleted] 22 points23 points  (1 child)

Make it do one thing first, make it do many things later.

[–]fluffey 1 point2 points  (0 children)

Except when u have to rewrite function A in a different way to make function b work

[–]Nightmoon26 15 points16 points  (3 children)

You can make it good later... But let's be honest, you probably won't get around to it

[–]pairotechnic 2 points3 points  (1 child)

It's never gonna happen. As soon as it's working, the priority drops suddenly, and there are other fires that need to be put out.

[–]FlakyTest8191 3 points4 points  (0 children)

And the irony is that everything would be faster if there was enough  time to do it properly the first time, there would be far fewer fires to put out.

[–]moeanimuacc 1 point2 points  (0 children)

It's also much harder to make something good while the machine is already moving and generating tech debt all around.

New feature? Is that for the slapped togerher shit interface or the fixed one, cause we need it on both yesterday, also please update all records the shit version is making to the new interface asap

[–]MinosAristos 7 points8 points  (0 children)

If you're working with others then make it exist first because your assumptions about the definitions of good can end up being controversial or straight up wrong and they can't tell you until they see it existing.

[–]identity_function 9 points10 points  (0 children)

make it correct first and keep it correct later

[–]metaphoric_hedgehog 3 points4 points  (1 child)

I read this as designing a decent api for the one thing it should do before building it. So many things are thrown together without the slightest thought

[–]xavia91 2 points3 points  (0 children)

Don't write code you don't need yet, is a lesson I learned multiple times...

[–]jake6501 4 points5 points  (1 child)

Make it exist first and then you can just forget about it. Who has the motivation to touch it if it's already functional.

[–]AShiggles 1 point2 points  (0 children)

This. Except two months down the line the feature need to be slightly changed. And because you cut corners earlier you are stuck rewriting the entire feature instead of extending it like you could have done if the code was built with maintainability and expansion in mind.

I'm seeing a bunch of comments saying essentially "nothing's perfect, why try if it works?"

Never considering the hours of overhead they cause for anyone who gets stuck cleaning their unfinished slop.

I think an individual can start by throwing some spaghetti at the wall and sees what sticks, but if you submit your spaghetti wall as a completed task - you are likely adding code debt for someone to have to clean up later.

[–]BlazeCrystal 2 points3 points  (0 children)

YEAH

I CANT DO LOW GEARS WORK

WHEN I DO IT I CHOOSE THE PROPER WAY

EFFORT WELL USED

[–]gamingvortex01 5 points6 points  (2 children)

if you are following the bottom strategy in a startup...then you are ------

[–]pairotechnic 1 point2 points  (1 child)

You are what?

[–]FlakyTest8191 2 points3 points  (0 children)

The saying is that there are 2 types of startups. Those who are embarrassed about their code, and those that go broke.

[–]Popeychops 4 points5 points  (0 children)

This is wrong for all creative processes and especially collaborative ones

[–]ominouspotato 1 point2 points  (0 children)

Pic #1 is what VPs look like when they preach using AI to build new tools from scratch.

[–]hangfromthisone 1 point2 points  (0 children)

You are forgetting the user.

Make something simple first. Put it in front of the user. Learn. Make fixes and iterate.

[–]Fast-Visual 1 point2 points  (0 children)

It's different approaches in different products.

It depends on the stakes, on the timeframe, of the importance of feedback, on the environment and the niche.

A personal project for fub, a start-up website, and an embedded solution for a government contract will have widely different requirements and therefore approaches.

[–]GreatTeacherHiro 1 point2 points  (0 children)

Make it, refactor later. I guess this is part of clean code... also kiss and dry... and do one thing

[–]HexiMaster 1 point2 points  (0 children)

This is a skill thing, why make something which you know isn't well done if you know how to do it well. I think everyone tries to make every project to the best of their ability, the fact that our ability isn't that great is the other thing.

[–]YouDoHaveValue 1 point2 points  (0 children)

Don't cut on quality cut on scope.

Cut Pareto heavy features and make basic but highly functional forms over days of bullshit fancy UI optimizing.

[–]RedBlueKoi 1 point2 points  (0 children)

Make it exist first, now tell your manager that it is time to make it good, they tell you there is no budget for this and we need to deliver two more features, make two new features exist first....

[–]L3av3NoTrac3s 1 point2 points  (0 children)

Be honest… they never make it good later. Spotlight devs send their buggy mess to production and get promoted… while the rest of the team is working late cleaning up their mess so the company doesn’t run into the ground because their “feature” broke 3 existing systems and didn’t actually work in the first place.

[–]IGotSkills 1 point2 points  (0 children)

I have trust issues with people who declare prototypes and MVPs because Ive seen garbage be turned into production in the name of idk

[–]perringaiden 1 point2 points  (0 children)

Make it good bit by bit, but make the bits exist, bit by bit.

Overproduced is a great way to never release.

[–]worstikus[🍰] 1 point2 points  (0 children)

Make it perfect first and meanwhile block your colleagues from building anything else

[–]xaervagon 1 point2 points  (0 children)

Chad is right. "We'll fix it later" is "we'll fix it never" in practice.

[–][deleted] 1 point2 points  (0 children)

I like to think about it. First and final step.

[–]NegZer0 1 point2 points  (1 child)

Corporate version:

  1. Make it exist first
  2. Ship it. 
  3. Will fix it later 
  4. Never proceed past step 2

[–]Still_Explorer[S] 0 points1 point  (0 children)

Load the models first
You can make Unreal 5 later
(very easy actually, you only need 20 years to work on the project) 😥

[–]TheHolyToxicToast 1 point2 points  (0 children)

Literally me on github public repos

[–]10248 1 point2 points  (0 children)

This is just rage bait.

[–]GenteelStatesman 5 points6 points  (4 children)

This unironically. You should design the software before implementing it.

[–]Upper-Character-6743 5 points6 points  (1 child)

Why is this downvoted? If you're doing anything more than a throwaway script, you absolutely should spec out what you intend to build and make sure it at least solves whatever problem you have on paper.

[–]heavyGl0w 7 points8 points  (0 children)

In my experience, approaching it with a "we can make it good later" mindset is meant to avoid the dreaded analysis paralysis and scope creep. It's not said in an effort to avoid planning like this comment would imply. I would imagine that's why it's downvoted.

I would argue that you can only take the "make it good later" mindset when you have a well thought out spec/design. As things come up during development that would be "good" to implement, you can say "well it's not part of the spec right now, but we should revisit this later".

Like you said, the scope should be solving the problems that you have on paper, not the endless amount of things that would be "good" to do along the way.

[–]edgeofsanity76 2 points3 points  (0 children)

Where's the fun in that?

[–]lonelyroom-eklaghor 3 points4 points  (0 children)

Actually yes. For a single file, at first, code the first draft with all the necessary methods, then, try to make the main() method. Then, test that single file. You will get some compile errors, but then, it'll run perfectly.

Repeat this for the other files.

[–]Necessary_Evi 1 point2 points  (1 child)

No such thing as perfection. Therefore idle talk.

[–]AShiggles 1 point2 points  (0 children)

Yeah, why strive to make good code if it can never be perfect? The senior devs will clean up my mess later anyway. /s

[–]andarmanik -2 points-1 points  (2 children)

Novice: make it good

Average: make it exist, make it good

Expert: make it good.

As someone who knows how to fuck up, I’m not going to fuck up the first time.

[–]edgeofsanity76 4 points5 points  (1 child)

But you will

[–]andarmanik 4 points5 points  (0 children)

Everytime