Launch HN: Hello (YC S22) – A search engine for developers

273 points by wayy ↗ HN
Hi HN, we’re Michael and Justin from Hello Cognition (https://beta.sayhello.so). We're building a better search engine for software developers. Hello saves you time by synthesizing clear explanations to technical questions along with code snippets from the web, showing them right on the search page.

We’ve found that most technical searches fall into a few categories: ad-hoc how-tos, understanding an API, recalling forgotten details, research, or troubleshooting. Google is too broad and shallow of a search tool to be good at this. Even after sifting through the deluge of spammy, irrelevant sites pumped full of SEO, you still have to manually find your answer through discussion boards or documentation. Their “featured snippet” approach works for simple factoid queries but quickly falls apart if a question requires reasoning about information across multiple webpages.

Our approach is narrow and deep — to retrieve detailed information for topics relevant to developers. When you submit a query, we pull raw site data from Bing, rerank them, and extract understanding and code snippets with our proprietary large language models. We use seq-to-seq transformer models to generate a final explanation from all of this input.

For our honors theses at UT Austin, we researched prototypes of large generative language models that can answer complex questions by combining information from multiple sources. We found that GPT-3, GPT-Neo/J/X, and similar autoregressive language models that predict text from left to right are prone to “hallucinating” and generating text inconsistent with the “ground truth” document. Training a sequence-to-sequence language model (T5 derivative) on our custom dataset designed for factual generation yielded much better results with less hallucination.

After creating this prototype, we started actively developing Hello with the idea that searching should be just like talking to a smart friend. We want to build an engine that explains complex topics clearly and concisely, and lets users ask follow-up questions using the context of their previous searches.

For example, when asked “what type of semaphore can function as a mutex?”, Hello pulls in the raw text from all five search results linked on the search page to generate: “A binary semaphore can be used as a mutex. Mutexes and semaphores are two different types of synchronization mechanisms. A mutex is a lock that prevents two threads from accessing the same resource at the same time. A semaphore is used to signal that a resource has become available.” We're biased, of course, but we think that the ability to reason abstractly about information from multiple web pages is a cool thing in a search engine!

We use BERT-based models to extract and rank code snippets if relevant to the query. Our search engine currently does well at answering applicable how-to questions such as “Sort a list of tuples by the second element”, “Set a response cookie in FastAPI”, “Get value of input in React”, “How to implement Dijkstra's algorithm.” Exclusively using our own models has also freed us from dependence on OpenAI.

Hello is and will always be free for individual devs. We haven’t rolled out any paid plans yet, but we’re planning to charge teams per user/month to use on internal data scattered around in wikis, documentation, slack, and emails.

We started Hello Cognition to scratch our own itch, but now we hope to improve the state of information retrieval for the greater developer community. If you'd like to be part of our product feedback and iteration process, we'd love to have you—please contact us at founders@sayhello.so.

We're looking forward to hearing your ideas, feedback, comments, and what would be helpful for you when navigating technical problems!

207 comments

[ 0.35 ms ] story [ 194 ms ] thread
Using latest Chrome gives "Uncaught (in promise) TypeError: Failed to fetch" console error.

The same is with any input, even with predefined ones; the progress bar gets to the end (slowly) and nothing happens.

Firefox works.

Thanks for letting us know. We're under load too so I'm not surprised there are some hiccups. I just tested with Chrome Version 103.0.5060.66 and the fetch works - will have to investigate the latest Chrome version later.
I see whole solutions copied from other websites displayed on your site.

Is that legal?

Isn't there copyright on those?

I would hope it's not legal.

> Hello pulls in the raw text from all five search results linked on the search page to generate...

Not to be negative but I think I'll stick to the sites and people that made the results and not a middleman that intends to charge for other people's work.

I think that framing is missing some nuance. Seems more like they would be charging for the process that goes into sifting through those results and pulling out other people's work on the user's behalf.
Yeah, I can see there's a lot of work going into the process but it's still using other people's efforts without permission or compensation.
> using other people's efforts without permission or compensation

Like every web search done on Google? That said, I think attribution links should be displayed, license too if available. Copilot should be doing the same to defuse this discussion.

Yes. Google is doing wrong as well although I think at least some of the enriched links are set up by the web owners (although I could be wrong)
Ding ding ding. This is the exact issue that a vocal minority are whingeing over github copilot for. It's automatically pasting results from websites without embedding the necessary attribution - so if you copy entire functions from this search engine (which may be coming from stack overflow for which attribution is required), then you're guilty of the same thing.

So I only see one of two outcomes:

1. Courts rule copilot is fair use in which case your search engine becomes largely superfluous

2. Courts rule copilot is infringement in which case all of these types of applications cannot be used commercially

There are two separate issues:

1. Copilot itself infringing licenses (MS copying and sharing copyrighted code)

2. Developer infringing licenses (Allowing code from MS into own codebase).

Case 2 is avoided by Hello, because it provides a link to the original, allowing the developer to find and respect the license. Therefore Hello is net superior (with respect to people using the service at least).

Maybe I'm misunderstanding the intended scope of this engine, or I just ran into a bad result page, but:

https://beta.sayhello.so/search?q=Java+aot+compile

Does not seem to mention graal anywhere. (It's just a random test query that popped into my mind)

Asking a full question for a code snippet seems to work: https://beta.sayhello.so/search?q=How+do+I+sort+a+map+in+Jav...

How do you deal with licensing for these snippets though. Is that up to the user to verify?

Because we're currently built on top of Bing's index, we're somewhat dependent on the raw pages they provide. If those pages don't mention graal, neither will our AI. Building out our own index is something we're working on.

It is currently up to the user to verify licensing for the snippets, but we try to make it easy (using the See Reference button) to go to the original source.

Thank you! The "See Reference" makes it much easier to comply with licenses, than GitHub Copilot.
FYI: I clicked on get lucky, and went here: https://beta.sayhello.so/search?q=Check+if+string+is+a+palin... which for me in Safari is just an empty white page.
Do you have Javascript enabled?
Yes
We've tested it on the latest version of Safari. Maybe try on an updated browser?
It's totally up to date. From the console:

"TypeError: N.at is not a function. (In 'N.at(-1)', 'N.at' is undefined)"

I get the same error in latest Safari.
While I'm not directly affected by this, a blank white page is always a symptom of careless error handling, even in the case where the user has JS turned off. The <noscript> tag exists expressly to present information about your site's need to have JS enabled
Really curious how this worked, the query 'FHIR appointment spec' produces the following. It actually did get the right result as the first result.

"fhir appointment spec

I'm not sure what you're asking about, but I'll try to answer it as best I can. __ Appointment is a FHIR data type. It's a way to describe a time slot for a patient to be seen by a healthcare provider. Appointments can be booked, cancelled, rescheduled, or canceled and rebooked. It can also be used to describe the location of the appointment. "

Pretty impressive summary given that it doesn't exist in any one specific page.

Thanks :) We've gone all-in on using our AI to answer questions based on information from multiple sources.
How do you think your product will fare in the wake of the backlash and legal saber rattling against GitHub Copilot?
It says start typing to search. So i started typing and it didn't search. I really expected it to be some sort of typeahead search without requiring focus on the the search field :)
(comment deleted)
Query autocomplete is on the roadmap :)
The odd thing to me was not missing autocomplete, it was that it says "start typing to search", but when you type, nothing happens. This is of course because the search field is not focused when you load the page, until you click it. It should maybe be "type here to search".
Ah, I see what you mean. We'll look into focusing the search field or changing the text to be less ambiguous.
That shit drives me absolutely crazy when the one thing a user wants to do is interact with a search field, but the page doesn't choose to put focus on the input
Interesting--seems you have to retrain your "google-fu"

"meta programming python" does not give as good results as

https://beta.sayhello.so/search?q=meta+programming+python

"how to implement a meta class in python"

https://beta.sayhello.so/search?q=how+to+implement+a+meta+cl...

Yep, the AI definitely prefers fully formed sentences as it is right now. We know it's important not to force users to change how they word their queries, so making it less sensitive for phrasing is a priority for us.
Searching "meta class python" gives better results, which seems reasonable to me.
Can you give an example of using the context of a previous query?

I applaud you for trying to make a new search engine - it's not something sane people would try to do because of a certain behemoth eating everyone's lunch. It's going to take extraordinary insight and out of the box thinking to get something really good.

Our initial prototype focused on conversational search, with the ability to ask follow-up questions.

Here's a rather trivial example: Q: "Who founded Y Combinator?" A: "Paul Graham founded Y Combinator with Jessica Livingston and Trevor Blackwell."

If you scroll to the bottom of the answer page to ask a follow-up question: Q: "How old is he?" A: "Paul Graham is 57 years old. He founded Y Combinator in 2005."

I love the idea <3

It may be a weird suggestion, but if the query to general topics returns something like this https://unzip.dev/archive (check how compact it is and delivers almost all you need to know about the subject to get you going), it would be perfect.

And what about books, just links to the most important books on the subject, without getting too philosophical about how to determine the most important ones.
Thanks for the feedback - I agree that explanations aren't the most appropriate for every kind of search. We're definitely considering different forms of search inputs and outputs (text, code, lists, etc.)
We'd love to talk to you some more and get your feedback. Our email is founders@sayhello.so :)
> center a div

#myDiv{ margin:0px auto; }

still not as good as stackoverflow
We’re still very early - of course it can't be as good. Could you tell me what you were trying to do and how it didn't work for you?
Not sure what the original commenter was looking for but I can give my thoughts:

- stackoverflow's UI actually serves well to provide a sort of "ambient" information that rapidly indicates not just the best answers, but the best most-recent answers. Oftentimes, and especially in rapidly-evolving dev languages/frameworks, what was the best answer a few months ago may no longer be the best answer and the ability to rapidly scan the comments that would indicate this is valuable. - in addition those stackoverflow comments and links within them can point to additional info that can save the dev time (potentially pointing to the dev misidentifying the problem: "don't do this, this is the real issue <link>).

I think with the traditional google->stackoverflow or google->[some documentation site, forum, etc] user flow you actually get layers of ambient cues as to relevance, recency and quality that we've grown accustom to. Even if your product ultimately serves better answers I'd worry that lacking these cues would make a user like me feel as though I'm blindly trusting an answer that seems to have come from the ether (sort of like github copilot).

As low-hanging fruit maybe adding level-meters beside each result that indicates these dimensions could help (like npmjs.com does with npm pkg results in their ui).

I love the product idea and it looks like a strong start! Good luck!

I agree that software documentation is constantly changing and a mechanism for evaluating the "freshness" of an answer could be very useful. Right now we provide an easy way to find the source of a code snippet but source attribution/evaluation is something we're actively looking into, especially for the natural language answer. A quantitative score could be interesting too. Thanks for the feedback!
it just won't be as good as the refinement in searches i can do with appending stackoverflow at the end of a google query and github copilot already does what you are trying to do
cool! some of the code samples shown aren't always the most relevant, but looks promising.
Glad to see better search tooling for programmers since it's an essential task we do every day. How do you compare yourself to you.com's specialized search engine for developers? https://you.com/code
You.com is too similar to Google imo; we go significantly further than they do in terms of synthesizing explanations. Same goes for snippets; on You.com, you usually need to click on a button (.e.g "Open Side Panel") to get a code snippet which adds friction. Furthermore, they seem to be simply showing the full Stack Overflow page; our approach is to find and rank the most relevant code snippet while offering a "See Reference" button to make it easy to go to the original page.
you.com is a lot more informationally dense, feels quicker to find the right answer, and I rarely have to open a new tab because of the (open side panel) button. Beyond programming, it doesn't seem like I can use hello.so on a regular basis for normal searches compared to Google and you.com.
Good idea. Although it seems it's language querying is pretty poor.

If I specifically list Python/Javascript the first couple results are not even in that language, 3rd/4th are. And you have to click link/see reference to even see the language

You would think if your language is included in the query it should be heavily prioritised

Thanks for the feedback. Could you post what queries you tried?
Would this be useful as a vscode plugin perhaps? I would much rather search this on an IDE imo but I am just one random dude.
We've actually had a bit of feedback related to IDE integration. We're focusing on developing the search technology itself right now but vscode plugin could be interesting to look at in the future.
Not to be too critical but the results I got so far have been subpar. Seeing a lot of hyperbole/clickbait articles.

Let's say I'm searching for front-end frameworks. Each article has the word "best" in the title, yet doesn't link to resources like State of JS, Stack Overflow Survey or other similar sites. So, in this context "best" is subjective. I can't be bothered with subjective results when I'm trying to find out what is actually considered "best" or in this case popular.

Those articles are coming from Bing as of right now. Our offering is based on analyzing those articles and summarizing them/picking out the most relevant parts. We definitely plan to augment (and eventually replace Bing) with our own index.
https://beta.sayhello.so/search?q=how+to+base64+encode+a+str...

Query: how to base64 encode a string in ruby

Response: I'm not sure what you mean by "base64 encode a string in ruby" - that's a bit of a misnomer. Base64 encoding is a way of storing data in a form that can be decoded by a human. It's not a secure way to store data, but it's useful if you want to send a message to someone who doesn't understand the language you're using.

The right answer is in the third link provided but it's not exactly correct.

Google gives back the Ruby Module Base64 docs as the first hit.

Our index is based on Bing as of right now -- if they give us low-quality results, our generated answers will be low quality as well. We're definitely aware of this and are working on developing our own index to augment Bing's in cases like this.
while i assume there are good business reasons you're basing your stuff on Bing, it's notable that as a general rule developers don't use bing. In my experience the google results are radically better.
> while i assume there are good business reasons you're basing your stuff on Bing

I'd strongly suspect it's the same reason DDG does so: Bing offers a search API, and Google has no incentive to offer access to its index and results

There are plenty of companies that make a living scraping results out of Google, so I don't mean to say it's impossible, it's just a monster amount of energy playing cat and mouse with what is effectively an unlimited budget to stop one from accomplishing that goal

Congrats on the launch! Looks promising, so I'll try it out for a couple of days.

One feature request at first glance: please default to the system font stack for code snippets. I see you're currently using Consolas, a Microsoft typeface, which is not pleasant to see as a mac user.

You can use this to default to the system font on every platform:

    font-family: "SF Mono", "Monaco", "Inconsolata", "Fira Mono", "Droid Sans Mono", "Source Code Pro", monospace;
Thanks for the feedback, we'll take a look at that :)
Why do you consider it unpleasant? I’m a mac user and I really like Consolas. I like to use it in VSCode or when building websites that display code blocks.
Thought I'd try this on a problem I've been researching today (which I resolved) where my service worker for offline PWA usage was working for everything except audio files.

I searched the following in say hello.so.

"Service worker fails on request for audio file"

I got back a couple of results related to general service worker use but none that get close to discussing the core problem that lead to the solution.

The same query in Google returns several results that together pointed me to the solution (it was around range headers in requests for media data types).

This is just one example though. I think the problem you are trying to fix is worth the effort. I just wonder if this is where humans are still stronger than computers - gathering unstructured data to use in problem solving.

The description of the steps you took is super helpful feedback - thanks! Hello performs best on "how-to" questions at the moment. We're still working to improve troubleshooting type queries.
No problem. Good luck with the project.
That'll be a difficult adaptation for potential users to make. I think most of us have been conditioned to phrase our queries a certain way to achieve the best results from Google.

Then again maybe that's just me.

You're right in that moving away from Google is a huge behavioral change. While our model does prefer natural language queries, what I was really referring to are the different categories of developer searches. Ad-hoc how-tos are a type of search where the developer knows what to do but not exactly how e.g "how to set a cookie in fastapi." Troubleshooting searches are things like copy-pasting a compile error, or "why is X behavior not working."
I may not be representative, but the vast majority of my Google searches are troubleshooting.

If I need to know how an API works, I go straight to the docs.

Put another way, troubleshooting is a several times per week task for me, and doing something net new is a once a month task which may not result in a search query.

You’re going to have a hard time staying on my radar focusing on the less frequent case.

Possibly the traffic patterns are different for more junior devs, but my hazy recollection of my early career is spending most of my time troubleshooting.

Thanks for the perspective - we're working on improving our functionality for troubleshooting.
Is the assumption you are making that most developers would go to search first? rather than when they hit a blocker or error?
We will support troubleshooting type searches in the future. It's just not available right now.
Pretty decent overall. Though some code that comes back is a little dense and hard to read. This appears to be caused by how the scraper/parser handles whitespace. For example, the query "make a curl request in php" returns an example from the comments section in the PHP docs where the entirety of the comment has been returned as code, but the <br> tags have not been converted to newlines.

It would be a good idea to preserve whitespace, or arguably better, integrate optional syntax formatting

Overall, this search engine looks promising

Thanks :) we'll take a look at better syntax formatting for the code snippets
(comment deleted)
The answer never loads if using Brave with Shields up, even after allowing JS.
Just installed Brave and it seems to work even with Shields up. The site is under load so maybe try again. Are any of the other things (answer/explanation, code snippet, links) loading for you?
Congrats on the launch! I love this idea. I've thought for a long time that something like it should exist. Google results are often lacking in this realm.

I've played around just a bit and clicked some of the preset examples and like what I'm seeing so far. I bookmarked it and will try it out more as I code over the next few days.

Main initial feedback: I'd really like to see version/last-updated-at info accompanying all results. One of the biggest problems with Google for code stuff is finding outdated examples and docs. Even better would be a dropdown that lets me see results depending on the version of the language/framework/tools I'm using.

Thanks for trying it out and good point - we'll look into adding version info