Your question is Optimizing Code Performance. Take a moment with it on the right.
Talk me through your thinking if you like. When you're confident, submit your answer and I'll grade it like a real screen (7/10 or better passes).
Avalara calculates sales tax for every line item on an e-commerce order at checkout time. An engineer on your team wrote this method to build the tax breakdown for an order, and it works, but it is slow enough on large carts (200+ line items) that the checkout page is timing out for a few big B2B customers. As the engineering manager, you're asked to review it and explain, item by item, what you'd change and why.
public string BuildTaxReceipt(List<LineItem> items, List<TaxRate> taxRates)
{
string receipt = "";
var sortedRates = new List<TaxRate>();
foreach (var item in items)
{
TaxRate matchedRate = null;
foreach (var rate in taxRates)
{
if (rate.StateCode == item.StateCode && rate.ProductCategory == item.Category)
{
matchedRate = rate;
break;
}
}
sortedRates = taxRates.OrderByDescending(r => r.Percentage).ToList();
var skuPattern = new Regex(@"^[A-Z]{2}-\d{4,6}$");
bool validSku = skuPattern.IsMatch(item.Sku);
if (matchedRate != null && validSku)
{
decimal tax = item.Price * matchedRate.Percentage;
receipt = receipt + item.Sku + ": $" + tax.ToString("F2") + "
";
}
}
return receipt;
}
Explain how you would optimize this method for performance, referencing the specific lines that are causing the slowdown.