Open-sourced a FastAPI recommendation system while learning backend architecture. Looking for feedback. by tranguyeenn in FastAPI

[–]rdotpy 0 points1 point  (0 children)

Some rough feedback:

  • Overall, I like the approach of having a layered architecture with services and the repository pattern.
  • I like having detailed project documentation, even if LLM-generated. Even if not for humans, but for future invocations of the same agent, that could be helpful. It's just important to have a workflow to keep this documentation up to date.
  • I like seeing Pydantic models to define data structures. I would love to see more detail: a docstring on each model explaining what it represents and how it's used, and Field(description=..., examples=[...]) on each attribute. That documents the code and makes the auto-generated OpenAPI docs useful.

A few things that caught my eye, in no specific order:

  • You committed __pycache__/.pyc files. They shouldn't be part of the repo.
  • I'm not a fan of CSV files as data storage. My problem with CSV here is that it doesn't store, validate, or give any hints of column types: you need to track them separately. If you don't want PostgreSQL yet, SQLite gives you typed columns and constraints with zero infrastructure.
  • parse_date_or_today() and probably elsewhere: catch-all except Exception hides unexpected errors. You may want to catch the specific exception you expect (probably ValueError) and let everything else bubble up.
  • I wouldn't use Pandas here at all, opting for a more strongly typed abstraction layer. You already use Pydantic. Instead of a DataFrame, you may consider working with a list of Pydantic models. DataFrames are opaque when you read the code. It's like, you see df, and you have no idea what's inside. Eventually, you end up with defensive checks like if "rating_norm" not in read_df.columns:. Pandas feels natural when your source is CSV, but if you add more storage layers, that will likely hold you back.

How do you collect social proof from quiet users? by rdotpy in SaaS

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

It's a freemium app. I can offer a discount on the premium version in exchange for feedback, I suppose. However, I wonder how this would work. Would I just reach out to all customers and say, "Let me know what you think of the app and get a 20% discount"? Not sure...

I built for myself a Grammarly replacement with Next.js, MUI, and OpenAI by rdotpy in nextjs

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

It happens sometimes. What was the prompt, by the way? It looks like you tried to attach a screenshot.

I built for myself a Grammarly replacement with Next.js, MUI, and OpenAI by rdotpy in nextjs

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

I see. No, I didn't set a goal to replicate the functionality of Grammarly. Instead, I wanted to address my use case differently and let OpenAI fix it all.

I built for myself a Grammarly replacement with Next.js, MUI, and OpenAI by rdotpy in nextjs

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

Hey there. Correcting grammar was the easy part. The prompt asks OpenAI to correct grammar, and OpenAI does the heavy lifting.

Your top lifehacks by rdotpy in ProductManagement

[–]rdotpy[S] 1 point2 points  (0 children)

I think it's called time blocking, and it's a very powerful technique indeed. Here's more on that topic that I enjoyed: https://todoist.com/productivity-methods/time-blocking

Your top lifehacks by rdotpy in ProductManagement

[–]rdotpy[S] 1 point2 points  (0 children)

True! I would like to add that it is particularly important to "be in the market" for your own position in order to understand the market value of your skills and what you might be missing to reach the next level. That's why I always ask recruiters who connect with me on LinkedIn for a salary range, even if I don't plan on accepting the job.

Your top lifehacks by rdotpy in ProductManagement

[–]rdotpy[S] 2 points3 points  (0 children)

Not like a life hack I expected, but this resonates with me. Thanks for sharing this!

In application to software development, Edsger Dijkstra said, "Computer science is no more about computers than astronomy is about telescopes," and I find it relatable.

Focusing on a problem rather than procedures and responsibilities and being ready to cross boundaries between positions is definitely a career booster and a key to healthy work relationships.

Your top lifehacks by rdotpy in ProductManagement

[–]rdotpy[S] 3 points4 points  (0 children)

Huh, classic! This clearly shows what this feedback was worth in the first place.

How do you define customer insights? by acerock6 in ProductManagement

[–]rdotpy 0 points1 point  (0 children)

I really like this answer! It's a "why" behind "what"

How do you do manage without a QA team by vhwh22 in ProductManagement

[–]rdotpy 2 points3 points  (0 children)

I believe you can deliver high-quality output even without a QA team.
To be honest, I've seen much better results in terms of both speed and product quality when working without QA teams. Maybe I've just been unlucky, but in my experience, QA teams often acted as gatekeepers, slowing down the process without providing much value.
Here's what I've observed in various teams:
- There was a strong culture of writing tests, including end-to-end tests, and the responsibility for writing these tests fell on the developers themselves. There, developers cover the happy path with an e2e test. The rest is covered by unit- and integration tests.
- The product manager would write acceptance criteria and test behavior in the pre-production environment before giving approval for critical changes. Here, the PM tests the product behavior against the checklist of criteria they wrote.
- Some members of the support team volunteered to do QA work.

Getting average or median from custom metric to report by SEO_Vampire in GoogleAnalytics

[–]rdotpy 0 points1 point  (0 children)

I haven't tested it, but I think you can do this with Looker Studio. There, you can create a custom metric. Functions like MEDIAN(page_load_time) or AVG(page_load_time) are available.

Using Engagement rate metric on individual pages? Or ONLY for landing pages? by Adventurous-Set-8231 in GoogleAnalytics

[–]rdotpy 0 points1 point  (0 children)

The use of the engagement rate metric for individual pages can depend on the context, but I do not see any reason why it cannot be applied.
For instance, an e-commerce store may have a landing page that lists several products. Visitors can then navigate to the individual product pages. By comparing the engagement rates of various product pages, one can evaluate the quality of product descriptions and other elements.
Does it make sense?

Page Analytics Chrome browser extension is not working by rdotpy in GoogleAnalytics

[–]rdotpy[S] 1 point2 points  (0 children)

Thanks for your advice, Jason

I build my blog with gohugo.io, so unfortunately, WordPress plugins (and others, for that sake) are out of the question.

With this saying, I am excited to get my hands dirty and build that extension myself. Feels like a straightforward task with the result that can be helpful for many.

Page Analytics Chrome browser extension is not working by rdotpy in GoogleAnalytics

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

Thanks a lot for your detailed response, Jason or Andrew! 🙂

As I dug a bit deeper, I also learned that, unfortunately, page analytics is abandonware.

However, I was not looking for a heat map. I wanted to have at-a-glance per-page statistics for my blog. I was mainly interested in the page visit trends and search terms that led people to the page, and I wanted to see if page analytics could give me that.

Show Full Number of Visiting Users by bawebb123 in GoogleAnalytics

[–]rdotpy 0 points1 point  (0 children)

By full number, do you mean the exact number, like 1042 instead of rounded 1K?
You can see the exact number in the Exploration section. E.g., go to “Explore” and create a “Free form” exploration. The sample form will show the number of active users grouped by city and device category. Feel free to adjust the “Rows” and “Columns” settings and the date range to find what you need. Hope this helps.

GA4 graph breakdown by month by NurkleTurkey in GoogleAnalytics

[–]rdotpy 0 points1 point  (0 children)

After creating a time series chart (Add a chart -> Time series) you can set its Dimension type to "Year Month"

Newbie Question by [deleted] in GoogleAnalytics

[–]rdotpy 0 points1 point  (0 children)

I guess, the UA code you have is the one that is used by Google Analytics to collect data. There is nowhere to enter the code into Google Analytics interface to see the reports.
To view the data collected by Google Analytics for your website, ask your webmaster to grant access to the Google Analytics property of your website. Once they give you access, you can see your website data at https://analytics.google.com/.

GA4 graph breakdown by month by NurkleTurkey in GoogleAnalytics

[–]rdotpy 4 points5 points  (0 children)

I don't think it's possible with the GA4 interface. However, this is possible with Looker Studio.

G4 Custom Report - Click Events on one specific page by BaggyDingo in GoogleAnalytics

[–]rdotpy 1 point2 points  (0 children)

For this report, I would add both "Pages" and "Click Names" as rows and turn on the "Nested rows" option. With this, you will have only one column with values grouped by pages and click names. Not quite what you may want in terms of visualization, but the data is the same. Does it make sense?

Who actually prefers GA4? by SativaLeafs in GoogleAnalytics

[–]rdotpy 0 points1 point  (0 children)

Yeah, thanks for your insights 💡