When the application team is using posytgres directly for 17.9 version, they get necessary TPS.
When they use pgbouncer, they get 50% reduction in TPS.
What are general advices?
What is the transaction being used? If it is something very simple, like pgbench's built-in -S, then I think this is expected. Injecting pgbouncer doubles the amount of network/IPC thrashing needed. If you have a meaty transaction, this might not matter but on a very light transaction you might be doubling something which is already counting for 90% of the time.