I have an SO Clone IN ASP CORE. How do we feel about building on that?

Is there a demo instance running somewhere?

My understanding of @ArtOfCode’s proposal is that we have something nearly ready to go live with if we had to; it would be rewritten from scratch regardless, as opposed to built upon.

Nope, sorry, not even that. I just always run from visual studio. (and to be honest, it doesn’t LOOK amazing because I didn’t care about design yet).

Might put one up on azure later, but right now I’m still busy.

1 Like

Nice work! Thanks for bringing it up.

My thoughts on the other thread also apply here:

I agree . From a non-technical point of view, something that gets us up and running quicker is a major definitely short-term positive.

The biggest advantage of doing so short term is that it lets us discover pitfalls, drawbacks and mistakes as we go with little risk of them getting ‘baked in’ . This is a very useful thing. We can experiment, test and refine with real world data and make the final C# product better from that; while we can do this as we go with C#, there’s less of an expectation of that sort of radical change.

I can’t comment on the architecture/technical side of things of yours vs qpixel. Maybe you and Art can compare each other’s work?

If a community came to us tomorrow and said “we want an exodus, do you have somewhere we can go?”, it would be golden to be able to say “yes, there’s qpixel/answers; use that for now while we continue to refine and build”.

1 Like

Would it make sense to ask around or make a poll of tech stacks people are most familiar with so that we could choose a set of technologies which the most people can easily pick up and contribute?

1 Like

Would it make sense to ask around or make a poll of tech stacks people are most familiar with so that we could choose a set of technologies which the most people can easily pick up and contribute?

As far as I’m aware, that already happened. Only it happened in discord and isn’t really documented here. (I only gathered as much from a couple of comments.)

The only thing I know about is that the choice fell on ASP Core as framework (that’s why I thought my unfinished ASP project might be better suited than a finished Ruby on rails app) and PostGre as DB. But I also have no idea what the plan for the UI was.

2 Likes

First of all: Awesome. I’ll look at it tomorrow/on the weekend.

You wondered, why the other post was locked. The reason is that it attracted a lot of discussion that would (probably) not lead to any consensus. Per this post we closed the thread and started a vote. If you have a specific dev-related question, you can (and should) ask it here in the #development category.

This is definitely an important point. I think the whole decision kind of depends on this (Ruby for ever/now).

There are two major differences between these two clones:

  • qpixel is in a production-ready state. It’s not quite feature-complete with everything we’d want, but it’s not far off. Answers is not production-ready or feature-complete.
  • Answers is in ASP.NET Core, which is our chosen stack; qpixel is not.

Given the first point there, we’ll use the results of the current poll as follows:

  • If Yes, we use qpixel for now; polish and finish the final features, and deploy. We can then develop our own platform in ASP.NET Core, which could either be a build from scratch or a development of Answers; TBD.
  • If No, we use the latter half of that - we develop our own and deploy that whenever it’s ready; it could either be from scratch or developing on Answers.
1 Like

My concerns are that starting with an existing code base may result in more work to restructure the database to meet our ultimate goals. The catch is that, while I’ve already voted No anyway (I think I did), it is kind of hard to really judge objectively without a much more thorough examination of the code base than most of us are likely to do in the next day or two.

No easy answer as it really would be nice to be able to jumpstart the coding and production system by piggybacking on existing code. But unknown how good the code, the database structure and other key design issues were handled in someone else’s code.

4 Likes

@manassehkatz If you’d find it helpful, I can dump a complete SQL database schema and put it in a Gist for you to take a look at.

2 Likes

OK. That would help.

2 Likes

Well, this is a start.

But there are a lot of issues I see. Quite a bit would need to be added, better indexes, additional indexes, tags as another table instead of just text, comments should be text rather than varchar, some of the varchars should be shorter, a lot more history tables (and/or detail within existing history tables), site/community identification, etc.

So my hunch is that the amount of work needed to get “close to MVP” will be quite significant. And therefore may or may not be worth doing rather than starting fresh.

The good news is that the schema is on the right track, so I would reasonably expect that if we expanded it enough to get the basics working (but which would be more than trivial changes) that porting it all over to a from-scratch-new-system schema would be quite doable.

2 Likes

But there are a lot of issues I see.

Well I can tell you that Answers probably has even more issues. Honestly, the main advantage… or rather let’s say, the main work that we don’t have to do anymore would be to start from a working project structure. Like Joel on software says

Open Source software is often developed without anyone getting paid to develop it, which changes the dynamics a lot. […] It’s rare in the open source world to have a face to face conversation around a whiteboard drawing boxes and arrows, so the kind of design decisions which benefit from drawing boxes and arrows are usually decided poorly on such projects.

Now, I didn’t have face-to-face meetings with myself :smirk:, but I did spend a lot of time drawing boxes and arrows and setting up a structure. Way more than writing functionality. So if that structure is actually congruent with what we want, that’ll end up being the main question here.

Current plan

I’m afraid I won’t be able to spend sufficient time on this before the weekend. However, as has become clear now, the current yes/no poll is about if we go with an existing project, not about which project. That makes this thread here less time-critical.

So this weekend I will put it up on Azure and create some documentation explaining the codebase and model structure. Then we’ll see where it is on a scale from “not what we want at all” to “an ideal starting place to save us some work while not restricting the direction too much”.

A bit sidenote-ish, maybe the best solution ends up being a hybrid of the 2 options given now - use QPixel for now and build up Answers in the mean time.

3 Likes

With regards to starting from scratch, or using an existing code base, I’d like to share the following thoughts. (This isn’t a criticism of anyone’s code, project or approach, it’s just some observations about trying to start a project from an existing, unproven, start point. Please don’t take any offence from this post, I’m just trying to be constructive, in offering this opposing point of view.)

With any large scale project like this, its very important to consider the maintainability of the project from the start. You need to get all of the key decisions in place before you consider writing any code. First and foremost, you should establish coding standards for each technology that will be used within the project. You should also establish best practices that should be followed. This very important in a highly controlled business environment where everyone is in the same office, it’s even more vital for a decentralised team of volunteers.

I feel uneasy about using an existing codebase, because it’s effectively bypassing these initial steps, and forcing decisions upon us that weren’t necessarily in the best interests of this project. True, we’re talking about another Q&A clone, how different can it be from our Q&A clone? But how similar were the objectives of the clone, to the objectives of our product? Was it also intended to be a large scale replacement for Stack Overflow and other network sites? Was it just a proof of concept, or something that the developer could learn from? Was it designed in a way where the front end can be split off for an independent team to work from? These are just some of the questions that we not only need an answer to, but we need the correct answer to.

The compatibility of an existing codebase to our objectives, requirements, and yet to be agreed, coding standards and best practices, is unlikely. I understand the desire of people to “just get something out there”, but if we don’t get the organisational groundwork in place correctly, the project will likely encounter problems that it cannot overcome, and ultimately fail. I think it’s fair to say that we all want this to be a success.

3 Likes

No offence taken. On the contrary, I agree with you. A lot. I think going with any codebase (also one from scratch) without being clear about its architecture/structure would be a grave mistake.

However, in my experience it’s easier to “present a full plan” and then change the details to what you want. Even if we dislike 70% of a given solution, it’s can still be easier to throw those parts out and start at 30% instead of zero. (It could also not be, of course).

I rather fear the other end here - if we start with “tabs vs. spaces”, it’ll take weeks before we have the first screen online.

3 Likes

Would it be a good idea to create a list of polls with every basic core Q&A site functionality and basically ask for “yes/no” vote if people have no objections to each point, but if they have objections, to vote “no” and explain what they think needs to be changed?

I think this way we can at least agree on the majority of core features and that’s going to be our starting point. I like this more rather than figuring out what is good/bad about someone’s recreation of a basic SE alternative or reverse-engineering SE itself. Although I guess both are valuable discussions to have and I think we’d lose if we don’t have them both at some point. But for the sake of choosing the fastest route, I propose a poll/list of basic functionalities.

Hi and welcome, @raphaelschmitz! Thanks for sharing that idea.

I haven’t read the full thread carefully yet(!), just OP (and skimmed over replies), but already got at least a couple of questions that I’d like to make about some of the technical decisions.

I’d like to invite you to our Discord server, if you haven’t joined already.

As I got a very busy day ahead of me right now… please allow me to fire just one question to get things started: Why did you opt for NHibernate specifically?

And, if you wish to expand on that, what other options did you consider and how do they differ? For instance, how do you find EF or linq2db compared to NHibernate?

I hope to talk to you at greater depth very soon. :slightly_smiling_face:

This is a general comment on the existing systems, not about one of them in particular.

Instead of starting with an existing system (since it sounds like both of them would require substantial work to match up with where our MVP seems to be going), can’t we build a new system but take advantage of existing components when they exist and fit? It doesn’t have to be all-or-nothing. Maybe one of the existing systems has 90% of the database schema we want. Maybe one of them is 80% there on basic front-end mechanics. Maybe neither of them does login well but one of them has some bits that mean we don’t have to start from scratch. Etc.

We should design and architect what we need without being bound by other systems’ design debt, but we should not fall into the “not invented here” trap and insist on writing everything ourselves if there’s something we can more-easily adapt.

I don’t know how to translate this into a vote, so I haven’t voted.

4 Likes

Why did you opt for NHibernate specifically?

My grand reasoning for that is (drumroll…) “we use it at work”. NHibernate and Vue were 2 technologies I didn’t have exposure to yet. So I started a new hobby project, as one is wont to do. Making it a Q&A website was happenstance - it’s an easy to comprehend feature set, plus I didn’t want to think about layout etc so much. Why my company chose NHibernate, that decision was made roundabout a decade ago and the people that decided that are not here anymore.

That aside, let me still pass judgement from my time of using it:
It’s… solid. Simple to medium queries you pretty much just do in LINQ, but there’s also type-safe advanced stuff for projections etc. Another bonus is that it has a proven track record.

EF I used for the hobby project that I abandoned for this one :smiley: That was a shorter period though. From what I can tell so far, it also seemed pretty solid. In the short time working with it I did not find a good solution to mocking the DB… but then in Answers I ended up using an in-memory-DB for those tests, and that part is actually easier in EF (it’s provided out of the box; not a huge difference though).

linq2db, I don’t know it. They say on their own website that they’re just one step above Dapper (concerning complexity).

I heard good things about the combination “Dapper for reads, NHibernate for writes”. That way you can optimize your reads in almost bare-metal, but still injection safe SQL - while you can do the writes in a more high level language approach. Used like this, I don’t see a huge difference between NHibernate and EF. And possibly linq2db, but I’m assuming it’s worse than NH/EF at alsmot-forget-that-theres-a-DB-writing, and it’s very probably worse at high-peformance reading than Dapper.

I’ll check in with the discord on the weekend.

3 Likes