One of the main reasons all of development isn't outsourced is that it's hard to replace an in-house developer's personal investment in the business, cultural understanding, and market understanding. Additionally, communication is typically orders of magnitude more efficient.

As an in-house developer, you have a clear responsibility to give technical feedback on product designs, but your responsibility doesn't stop there. You are the last line of defense for your company's product or service. If a bad feature makes it past you, it gets released. If you're implementing a feature that makes no sense for your target market, or is spammy, or rubs you the wrong way, it is your obligation to speak up.

There is a natural set of responsibilities and checks for a product company. The management team sets the product vision. The product team specifies the product vision. The development implements the product specification.

There are two ideal outcomes from you defending your product:

You convince the product team or your manager that there's a problem. Your product team or manager convinces you that the specified solution applies well for your market, use case, or company culture.

Neither situation is bad. In #1, you make them think more about the problem and potentially reach a better solution. In #2, you learn more about your product and market allowing you to better defend your product in the future from poor designs.

Alternatively, you could learn that your company doesn't accept feedback like this. If that is the case, you are likely undervalued, and your company should probably be outsourcing the work (and likely will in the future). You should start considering other employment options.

Remember, if you release a bad product or feature, it is your fault. "I just built what was specified," is not an excuse for full-time, in-house developers. You build the product, you understand its details, and you release it to customers. It's your duty to defend it.

Self promotion