Some lessons in software engineering take a long, long time to sink in. (For me, at least):
- Don't generalize too early, which seems to address the original question pretty directly.
- Don't optimize too early.
- Maintainable > Correct > Fast. Maintainable = comprehensible. If it isn't maintainable, you won't know if it's correct. If it isn't correct, there's no point in making it fast.
- Minimize state. Deriving something from scratch every time it's needed leads to far fewer bugs, and the bugs there are probably far more obvious. Cache only when you need to for performance.
- Simplify as much as you can. This is the hardest one, because it can take a very long time to figure out all the ways in which a design that you thought was simple, turns out not to be.
- Simplify some more: The usual statement of the "simplify" rule is "as simple as possible, but no simpler". I don't think that's right. If you see a nice simplification at odds with requirements, push back on requirements.
I'm starting to see this more clearly as time passes. I've spent years developing the ability to "engineer" things and only now am I realizing that I've learned to "over-engineer" things. Writing software has taken on a life of its own that is actually counter to its purpose.
I don't think in terms of simplification though, I see it as "write what you need, when you need it." But I absolutely agree that you should avoid generalization aggressively and optimization should rarely be on the table. I also agree about minimizing state. Do it all "on the fly" unless there's known performance hit.
The moderation on programmers.stackexchange.com is completely overbearing. How can a question about analysis paralysis be closed for off-topic? If stackoverflow is for technical question/answer, what is the point the linked stackexchange if not for discussion of a common programmer problem like this? I see stuff like this closed all time time and it's really annoying.
This is a rambling discussion, which Stack Exchange is not really intended for. There are lots of good places to have rambling discussions. We focus on answerable questions with specific answers, not long-winded, open-ended conversation starters. There are plenty of other sites for long-winded, open-ended conversation starters, including Reddit and Hacker News.
After a decade or so of operating sites for programmers on the Internet, I've learned that, left by themselves, ALL programmer online sites will rapidly deteriorate into:
* I hate my job, woe is me ("I hate my job too!")
* I'm not productive any more, oh dear ("Oh my god you took the words right out of my mouth!")
* And some nonsense about H1B visas.
These kinds of conversations are endless because, I'm sad to say, they represent a common problem among programmers. Discussing it as a means of therapy is a wonderful thing, but DO IT SOMEWHERE ELSE, because Stack Exchange is 100% focused on questions with specific factual answers.
This hard and fast rule is actually WHY you love stack overflow so much. It's WHY the network works. It's WHY you click on the stackoverflow.com link in the Google results even if it's third. If we weren't strict about this stuff we wouldn't have such consistently high quality ANSWERS.
Just because "moderators" (actually, users) have deemed to close a question on Stack Exchange, doesn't mean it's a bad question, or that the person who asked it is bad. It just means that Stack Exchange is an edited, curated environment, not your livejournal. The very moderation that people complain about every time a popular question is closed is what has been making the site work so well.
Stack Exchange in general - yes, definitely, couldn't agree more, please keep it that way!
But Programmers? Programmers is and always was an exception. Seriously, almost none of the questions are answerable with specific answers. It is a pit of vague non-answerable questions that don't degrade into flamewars only because they are boring. What kind of fabric is best for covering programmers' chairs?
although programmers.SE was originally meant to be the "anything goes" dumping ground for subjective conversations to get them off of Stack Overflow, that is not its current mission. See the FAQ (http://programmers.stackexchange.com/faq)
This comment demonstrates the absolute worst thing about Stack Exchange: on sites with content policies that are not crystal clear, even if you submit content that passes the policy test and is accepted on the site, that content might be capriciously deleted a year later if the policy changes. Programmers had been around for a while and had a great community when the mission changed. Few experts would participate in a forum if they knew the content they contribute could vanish.
It's not quite as hostile an approach to community building as experts-exchange, but it's close.
Hm... The titles seem awful, but at least the "Is hiring a “chief intern” a good idea?" one has a very specific set of parameters. It can be answerable with specific answers, and sufficiently answered by a very small set of answers. That said, the answers so far are...
The "Is there a viable alternative to the agile philosophy?" one is from Nov 2010, a more relaxed era, when the site's scope wasn't as well defined as it is today. It was bumped on the front page by a minor edit (argh). I'm on the fence on this one, and I'd prefer it be closed by five regular users.
I can't tell if your claim is that a) You just don't want to run a site that has some good content that doesn't follow the rules, or b) you don't know how to run a site with some good content that doesn't follow the rules.
But you're definitely throwing out good content and driving away good contributors because of your inflexibility.
I agree with you as it pertains to stackoverflow. I vote to close non-technical stuff all the time there I appreciate that is kept technical q/a. I do not agree about programmers. This particular question was long-winded but it boils down to "What are effective strategies for countering analysis-paralysis"? If that is not a relevant question for programmers than I don't what is. I'd rather just ignore that particular stackexchange and stick to stackoverflow then.
I think the reason I find myself resisting this is that what you are saying is that you don't want us as whole people, you just want the specific parts of us that "make Stack Overflow great."
This desire is understandable. I sure would like to pick and choose the aspects of people's personalities that I had to deal with. But, in most cases, life doesn't work that way.
In some cases, asking us to leave behind parts of our personalities is a reasonable request. An obvious example is our employers. They want our coding ability, and would prefer we leave our sports fandom, musical choices, political opinions, relationship issues, etc. at the door before we come into the office. And since they're paying us, they get to make that request. If, say, a significant other told me to go be a sports fan somewhere else, I would probably take her up on that request, and also take along the aspects of my personality she does like.
But Stack Exchange is not paying us. Our rewards are the good feeling of helping someone out, and being part of something. Heck, you wanted to charge us money to leverage our SE work into employment opportunities.
That being the case, by locking us down like this, you are opening yourself up to competition from another site that welcomes us as whole people, not just the parts that help your site be awesome.
I want to be in places where I can be myself, which might include chuckling at the same old jokes or discussing how much my job sucks. The more SO/SE is a place where I cannot be myself, the less desirable a place it is for me to be.
One of the things SE/SO claims to be about is building a community. Well, guess what. Communities are groups of people not just their expertise in a given subject.
"I want to be in places where I can be myself, which might include chuckling at the same old jokes or discussing how much my job sucks. The more SO/SE is a place where I cannot be myself, the less desirable a place it is for me to be."
There's nothing stopping you from being your whole self on chat, but it's the relentless focus on signal that makes Stack Overflow what's wholly Stack Overflow.
You can't just build communities by randomly amassing people together. Communities need to have a common goal; in our case it's the building of the best goddamn Q&A sites we can possibly make out of the SE engine. That's what leads us to be "all business" on the site while wholly goofing off on chat :)
Well, that's your goal, for a very specific definition of "best". But as you can see from the feedback here, you're driving off otherwise qualified people who had different goals, or different notions of "best".
It's not like there's some limited quantity of votes or badges. Or that there's too much fun in the world. So the only reasonable complaint there is that the home page shouldn't have them. Gosh, could there be a technical solution for that?
Time however is a finite resource and it is effectively wasted on 'fun' questions. Every 'fun' question steals time off the actual Q&A content that is the whole point of SE.
Hiding stuff that doesn't below under the rug doesn't make the problem go away, fixing the problem does.
In a gamification environment moreover you need to make sure that the rewards are given for activities you want users to do more of. Participation in 'fun' questions is not one such thing. Since they get ALL the votes etc. they naturally attract more of the same 'fun' questions.
Time is variable with participation. By driving me off through closing and deleting things that don't fit your personal vision, you have reduced the amount of total work time available. Not just for the fun things, but for all things.
Gamification points are also not finite. But if you are really concerned with over-rewarding things that are too gosh-darned fun, just stop rewarding them. It's an easy fix. E.g., instead of marking a question closed, you mark it as just-for-fun; points stop accruing.
I guess what you could be saying is that time is finite for some particular group of people. In which case, you've introduced an us-vs-them dynamic, and are basically declaring that the system is about serving the desires of the in group, rather than all participants or all readers. In which case: have fun with your bat and ball.
I agree that you need to keep a direction for SE, but there is one type of open-ended conversation starters that often works really well there - the list. E.g "What feature would you like to see in C++15 (or whatever the next one will be called)?", "What is your favourite bit twiddling trick?", "What is your favourite language outside the TIOBE top-20 and why?", etc. With one list item per answer and the help of the voting structure, those tend to produce interesting reading.
I often see soft discussion on consumery sites like apple.SE and DIY.SE.
My instincts are to vote to close, but there are just too many. Kind of makes me sad when I go to their metas, and the mods there are most definitely StackOverflow users. It seems the same standards aren't applied across the SE board. Myabe this is not a bad thing because building community, etc.
If there's a meta.stackoverflow.com, have you considered some sort of socialization.stackoverflow.com? Then you can not only say "buzz off" but specifically give someone a place to buzz off to. It'd be one of those pragmatic concessions that keeps the idealism moving along and whatnot :)
I really like the "third place" idea, but I don't think the chat rooms have been successful in realizing it. Unfortunately, people just don't use them very much--even the StackOverflow rooms rarely have anybody to talk to.
I think the fundamental problem is that discussion in other parts of the site is asynchronous, like email, while the chat rooms aren't. The comments and posts stick around and allow people to talk about something across a longer period of time, which also allows more people to join the discussion. On the other hand, chat happens immediately--it only works for the people who are there at the moment and only works while everybody is on.
There is, of course, nothing wrong with chat in general. I just don't think it's the best match for the SE format.
Speaking for myself, clicking on a "chat" link crosses a threshold for me from "I'm taking a break and checking stuff out" to "I'm goofing off." Maybe I'm kidding myself that my checking out SE threads isn't goofing off, but once I enter something called "chat" there's no way I can suspend my disbelief, so I don't do it.
So, you're goofing off on chat, a discussion oriented medium, and not on Stack Exchange, a platform that's feverishly against discussions.
But on more than one occasion you've asked for Stack Exchange to change it's stance on discussion oriented questions and become more discussion friendly. Assuming that happens, how soon do you think it'll be before you dismiss Stack Exchange as goofing off?
>> It's not quite as hostile an approach to community building as experts-exchange, but it's close.
I understand there is a tradition of slamming EE when discussing SO/SE, but "hostile" seems a stretch, at least in my experience.
I've found few technical forums online or in "real-life" that were as welcoming and community focused as Experts-Exchange.
Beyond the obvious in-question discussions, EE members communicate directly through email, instant messaging, phone calls and face-to-face meetings. EE corporate sponsors periodic meetups between administrative staff and members.
I've participated fairly regularly over the past few years and people have contacted me directly, off-site for assistance with confidential issues that couldn't be easily posted in the form of a public question. I've been made job offers, did a little contract work and simply chatted about UFC, scuba diving, beer, kids, photography, work, movies, etc.
I've had the opportunity to meet a few of the members face-to-face and, while I don't know them all well, I can honestly say they've been consistently friendly and helpful online and in-person.
Also, beyond just the "warm-fuzzy" of good-people. EE is a commercial site. The only way it can pay for its servers, employees, bandwidth, storage, etc. is through its community of customers. Sure, some people have been unhappy and left but that will be true of any service. By and large though, people come to EE and stay. If EE was truly a hostile environment it's membership base would have shriveled up years ago and the company would be gone.
Going back to SE/SO or any other Q&A forum the fundamental design of all of them is ask about something fairly specific and get answers about your topic. Comments that don't address the topic itself, no matter how insightful, true and possibly helpful they are are, by definition, off-topic and don't belong in that thread.
If I ask how to change the belts on my car and you give me an awesome recipe for apple pie, it's just not helpful and your comment should be deleted, voted down, masked, moved to new thread or otherwise discouraged/eliminated (the specific action will depend on the forum.)
The forum, as a whole, may be open to any and all discussions, but within the context of any one thread there is either implicitly (by nature of the asker's intent) or explicitly (in member agreement for a particular forum) a rule established that comments stick to the topic of that thread.
Community can actually be self-destructive somewhat in this regard. As members become familiar with each other there is often less inhibition to interject side-comments for humor or nostalgia of past discussions. Strangers, without that sense of familiarity, may refrain from joining the peanut gallery and instead stay more formal.
All Q&A forums want to stay close to the top of the Google lists. Maintaining good signal-to-noise ratios is the only way to do that. If that means truncating a few tangents in order to keep threads in line, that's good for all. As others have mentioned, the members are at the site because they like it. If they can't police themselves in such a way that the site can prosper then others must do it for them. That's not just SE/SO or EE or similar sites. The same applies to all information providers.
Keep the content useful and on-point and it'll rise in popularity. Let it drift an so will the rankings.
I looked it up now and it seems that this kind of questions are supposed to be asked on programmers.etackexchange.com!
This is what FAQ says. 2nd, 4th, 7th and 8th are exactly what this question is about!
""" Programmers — Stack Exchange is a site for professional programmers who are interested in getting expert answers on conceptual questions about software development. If you have a question about... """
1 - algorithm and data structure concepts
2 - design patterns <------
3 - developer testing
4 - development methodologies <------
5 - freelancing and business concerns
6 - quality assurance
7 - software architecture <------
8 - software engineering <------
9 - software licensing
So, Jarrod Roberson, GrandmasterB, gnat, Walter and ChrisF♦, you are all bozos, you shouldn't have closed this question.
Don't take it so seriously; I said it half-jokingly (well, actually, completely jokingly!). I like how Steve Jobs called everyone he disagreed with a 'bozo', and I imitated him here :-)
BTW, as that discussion is closed now, we can't directly (and publicly) communicate with those mods there; so here is the only place we can rant (that is, unless there is a meta-programmers.stackexchange.com for meta discussions).
Also, four of the close voters are regular users, only ChrisF is a moderator (notice the ♦), but it doesn't really matter, as it takes 5 close votes to close a question and his otherwise supercharged close vote was a regular user vote here (being the fifth).
The sad part is it's predictable. Upon seeing the link on HN, my thought process went like this: "Ahh, an interesting and thought-provoking discussion on a StackExchange site? It will be closed."
So, a question to our StackExchange overlords: you clearly do not believe that the popular StackExchange sites are the appropriate place for this content. With that in mind, what alternative would you recommend?
While I agree that very often interesting topics get closed, they DO HAVE a good reason for doing so.
The intent of all the stack-exchange sites is to provide a high-quality resource of _answers_ for specific _questions_. If "the answer" to a question ends up being a divergent discussion, then not closing responses invites more of these types of questions. Over time that will subvert the intent of stack-exchange.
The POV of the stack-exchange folks is that there are plenty of forums for discussion, and that is NOT what they want to do. Hacker-news, however, is more free-form and definitely much better for "need advice" type questions with highly subjective answers.
That said, it is true that moderators sometimes get persnickety about what they close. I wish that at least they would be less smug and judgmental about how they do that. But oh well, it is still an awesome resource.
"Hacker-news, however, is more free-form and definitely much better for "need advice" type questions with highly subjective answers."
Assuming the question doesn't drop past the second page or so before someone who is interested in the question sees it. But yeah, is it is seen and kept alive for a few minutes, the discussion is potentially very useful.
Honestly, the original intent of a startup almost doesn't mater.
What a business does is always an intersection of what the producers and the consumers want. If users want something divergent but reasonable, the answer shouldn't be, "Well, fuck you then." The right response is, "Boy, that's a a great opportunity."
As proof, look at Friendster. They owned the social networking space before Facebook even existed. But it had started out as a dating site, and the founder stubbornly insisted that it stay a dating site no matter what the users wanted. At this point they're not even a punchline; MySpace has now taken over the spot of best-known failure.
I've stopped contributing to StackOverflow because I'm tired of them killing good discussions. Why take the risk that yet another good answer will get eaten?
Um, the MySpace reference seems to highlight Joel and others' point: practically limitless user choice on MySpace turned it into such a boundless cacophony of gangsta rapping cat gifs that it was noisy and unusable, and got devoured by Facebook's "express yourself within our clean, limited-styled approach". It's a bit like Apple's thinking: I know you want true multitasking and dancing wallpaper, but that tells me you'll use it if I give it to you, and I know you really don’t want battery life that is measuresd in standby minutes. Since most people aren't willing to have their phone die after 4 hours of use in exchange for more whimsical, athletic wallpaper, their aporoach was to limit you to what most people would really want if they weighed all the tradeoffs and consequences.
"Shhh, child. Mother knows best."
That's why a massvie amount of apple mobile devices jailbreak them, why their competitor has aimed enormous traction, right?
At least be honest about the it - it's your aesthetic taste that interests you, that'll be offended, not someone else's.
If your going to pull a Steve Jobs, just say so. It's a valid (and successful) point of view, but it's not a universal truth.
The original intent of a startup doesn't matter much if your real goal is just to get a lot of users and sell them to advertisers. Then, who cares what you build, as long as it attracts users? The original intent matters a lot more if your goal is to build something you want to see exist.
I, for one, am glad Stack Overflow is the site that it is today. There are plenty of other places on the Web for more open discussion… like here, for instance.
Original intent doesn't really matter if you intend to serve your users. What you want to do matters, and what they want to do matters. Startups are a learning process where you explore the intersection.
If you hold on too tightly to original intent, exploration is impossible. You either end up frustrated that the people won't do what you want, or you end up trying to force them to do what you want. Both suck.
Nothing will satisfy everyone. Stack Exchange is great at serving people who want to ask and answer well-formed questions with specific answers. It doesn't even pretend to be good at serving people who want to have long, open-ended discussions about fuzzier topics.
What's wrong with that? Judging by the activity on the sites, they're serving plenty of users pretty well.
What's wrong with Friendster? It has millions of users and makes money, after all.
Personally, I think Friendster could have been something more if they had been less arrogant, more willing to listen to their users. They only had to give up the belief that the users were Doing It Wrong.
The problem I have with what Stack Overflow is similar. By your very metrics, these questions get plenty of activity, and many users feel very well served by them. What's wrong with that?
It's really frustrating how they keep doing this. Their users are begging, literally fighting with the mods over this, and they still don't allow it. If they are opposed to diluting the technical questions there, why don't they just make an programmer opinion stack exchange site?
This reminds me of the founding of Adobe, when Steve Jobs told them what he wanted, as did two other companied, and the refused, saying "We have this business plan, we raised $2.5 million, and this is what we said we're going to do." Thankfully, a man named QT Wiles explained to them that "You guys are nuts. Throw out your business plan. Your customers-or potential customers-are telling you what your business should be. The business plan was only used to get you the money. Why don't you rewrite a business plan that is focused just on providing what your customers want?"
This is the same position. SE needs to focus on what the customers want.
I have never really used StackOverflow, so from just a casual observer's point of view: It seems that allowing discussions would deviate the site into another commodity forum (there are already hundreds on the topic of programming), at which point they've lost their marketplace edge. I suspect they are trying to protect against that.
Ditto for StackOverflow itself? I just can't understand why so often a really valuable topic that collects insightful answers gets closed up because of not fitting some template.
Also, I don't get the idea of "protected questions" - the ones marked by:
"This question is protected to prevent "thanks!", "me too!", or spam answers by new users. To answer it, you must have earned at least 10 reputation on this site."
What does this even mean? Is the assumption that a new user will always say "thanks!" / "me too", while older user won't, in any way correct? Do statistics suggest something like that? It always struck me as offensive to new users.
As a stack overflow old-timer, I can tell you that questions that get a lot of hits from outside, (e.g. popular searches, blog post links) tend to get more visitors that are not familiar with how the site works. Many of them assume it's like a discussion board and post "answers" thanking another poster or asking a different question. I've seen this many times. It's not really offensive to claim that people new to the site are likely to be less familiar with how its intended to work.
Most of the time protection kicks in _because_ the question has received many "thanks!", "me too!", or spam answers by new users. Indeed, the third deleted answer on any question automatically triggers protection.
I think they've already given over control to their volunteers. Yes they could wrest it back, but I think their profit depends on not too much paid involvement. So it is what the senior members want it to be.
It might be off-topic for StackOverflow,but how on earth is this off-topic on programmers.stackexchange?! If such discussions are off-topic, then why did they create programmers.stackexchange in the first place?
That's exactly my point. I understand why this is not right for stackoverflow; that is for technical question and answer. But isn't this kind of question exactly the point of programmers stackexchange? How to overcome analysis paralysis is not relevant to programmers? Insanity.
Hey frankc! You're right Analysis paralysis is on topic on Programmers, the question however is not constructive, in the Stack Exchange sense. The close reason was a bit misleading (now changed), but at the end of the day closed means closed.
As to why it is not constructive: We don't like discussions. Ok, that's a lie, we love discussions, especially heated flamewars, after all we are programmers. However we haven't yet found a good way of moderating and curating such questions on Stack Exchange, we have an array of excellent tools at our disposal, none of which was designed with free flowing open ended discussions in mind.
This is more of a "it's not you, it's us" problem and it's a discussion we seem to be having at least once a week but the bottom line is, open ended free flowing discussions don't work on the platform, and unfortunately we have to close them.
Feel free to bring up any issues you have with Programmers on Meta, especially when it's about closed questions. Sometimes all it takes is a small edit to make the question a bit more focused for it to be re-opened...
86 people upvoted the question and 5 votes is all it takes to close the question ? So 5 people hold the truth on the validity an pertinence of a question ? How many people does it take to undesrstand that this moderation system is broken ?
This is one of the most pernicious forms of procrastination, because it's hard for smart people to accept that perfectionism is a negative trait. The more self-worth you derive from your previous successful outcomes, the more susceptible your ego becomes to fear of future failures. Your amygdala is telling you that you are successful already, so don't shake the boat. Tread carefully and you'll always have an excuse for why things don't work out. You'll never have to admit you just couldn't do it.
The solution is to divorce your self-worth from outcomes. Instead, derive self-worth from the process. We can have complete control over our actions, but never complete control over our outcomes.
Arrogance is probably the trait that most limits our intelligence. I've seen many smart people do extremely stupid stuff just out of fear of admitting they are prone to mistakes and failure. Humbleness is hard to master, but it's very important for us to try and practice it as much as possible.
Potential of success = (Intelligence / arrogance) + luck
What you're saying really strikes true, though I feel arrogant people can also be extremely hard working which can put them in better stead compared to others. Also, humbleness with a tint of arrogance or self belief can be a good mix – as long as you get the mix right.
This is a real thing for sure. The first 80% of a project is the fun/creative part. The last 20% is painful and usually where you make a product out of a project. Experienced developers know that starting a project means that ultimately you will have to do that 20% and they question whether it's worth the investment (before starting the fun part). New developers are usually blissfully ignorant and simply enjoy the first 80%. Some of them will take it beyond that... most will leave it as nothing more than an unfinished project.
The fondness of directing others is really just the enjoyment of not dealing with the minutia of developing a robust solution.
Very sad that the moderators are closing such interesting questions, because they do not conform to their opinion of what should go on the site, even though the topic is obviously hugely popular and appealing to a lot of users.
It's particularly outrageous because the given reason is "off topic for software development". It's quite clear from that judgment that the moderators don't know much about the topic and therefore are not qualified to hold a position of moderator on a board devoted to software development topics.
I submitted it because it's exactly how I feel lately, and would like to know what others think about it. My current (personal/academic) project involves Node.js, (Iced)CoffeeScript, MongoDB (with Mangoose), PhantomJS, Mocha, Neo4j, Nutch, Solr, Hadoop and Mahout.
All of them are new technologies and are changing rapidly and daily, and I find new stuff every day that forces me to change my APIs and the way I do things, and it's getting frustrating... It's the price you pay by using cutting-edge technologies and I accept that, but I can't help thinking that maybe Java+MySQL was a better/easier choice!
A month ago I finished a project for university, involving Node.js - nothing more. At the beginning, I've started with Node.js, mongoDB, socket.io. express and connect. Half way through the project, I realized I would never be able to deliver in time. So I started to cut out technologies... first mongoDB, socket.io, express, and in the end, even connect. Even dealing with Node alone, I had a hard time finishing my project... but I did. I still got quite a good grade because in contrast to my fellow students, I was able to deliver.
My solution to this is a simple kanban board. Trello.com is a good on-line one, but when possible I'll make them out of index cards or post-it notes on the wall.
People think that a kanban board is a to-do list, but there's a subtle difference. The real heart of is limiting the number of work-in-progress items. That means that the backlog is less a to-do list and more a things-I-am-definitely-not-doing-now list.
For me, every time I have one of those "It would be nice" thoughts, I write it down on a card for the kanban, throw it in the backlog, and forget it until the next time I make a prioritization pass. Most of the cards end up in what I think of as "the pit of nice ideas", the bottom segment of the board that never moves up because more important things always come up.
For the curious, you can see a photo and a little more explanation here:
Good luck! Feel free to contact me with questions.
My big starter tip is to make the work-in-progress column physically small. My current one limits the "working" and "on hold" columns to 3 items each. Whenever they fill up that's a sign that there's a problem in my process.
A situation I have seen with well-educated novice developers, is that they think of "technical debt" as universally bad. That's not true. It's not even true for actual debt.
Debt is only bad if it's your own long-term debt. One can also use short-term debt as a powerful tool.
For example, it might be simpler for one to write an initial iteration of a program that's badly factored. Then, once you get the program running correctly, refactor it. It's much easier to know you're on the right path if your program runs correctly, and you have verification data-sets or unit tests.
Modestly off topic: Can I say how much I have grown to hate StackOverflow and its cousins? Just like this article, half of my favorite threads on there are closed or have been deleted due to violating some sort of rule that is not unreasonable in theory but leads to obvious idiocy in practice.
A great example of people losing track of the forest because of all the damned trees in the way.
this is easier said than done, but the key to avoiding analysis paralysis is to worry about building the right abstractions and only that. if the software is abstracted well -- ie it correctly represents the underlying problem at an adequate resolution -- then it becomes easy to say YAGNI in the short run with the confidence that refactoring or adding functionality will be straight forward later.
The ideal to strive for is what we call the "Goldielocks effect".
Not knowing too little. Not knowing too much. Knowing just enough to get the job done.
In computing there will always be multiple solutions, and tradeoffs. What you want to aim for is "The simplest solution possible."
In my experience, this is really hard for most developers.
Maybe the smart thing to do is find someone who makes it look easy and trust their judgment. Again, my experience is that most developers are reluctant to do this.
The question is not how much someone knows, it's whether they know "enough" to get the job done. Goldielocks.