To solve this linear programming optimization problem, we first need to define the decision variables, objective function, and constraints based on the given information.

Let's denote:
- \(x\) as the number of bookcases made,
- \(y\) as the number of garden chairs made.

The objective is to maximize profit. Each bookcase yields a profit of $270, and each garden chair yields a profit of $350. So, the objective function can be written as:
\[ \text{Maximize: } 270x + 350y \]

Now, let's consider the constraints:

1. **Woodworking Hours Constraint**: Each bookcase requires 3 hours of woodworking, and each garden chair requires 2 hours of woodworking. There are 80 hours available.
   - \(3x + 2y \leq 80\)

2. **Nails Boxes Constraint**: Each bookcase requires 2 boxes of nails, and each garden chair requires 4 boxes of nails. There are 70 boxes available.
   - \(2x + 4y \leq 70\)

3. **Varnish Units Constraint**: Both bookcases and garden chairs require 3 units of varnish each. There are 90 units available.
   - \(3x + 3y \leq 90\)

4. **Non-Negativity Constraints**: The number of bookcases and garden chairs cannot be negative.
   - \(x \geq 0, y \geq 0\)

Given these constraints and the objective function, we can now write the Gurobi code in Python to solve this linear programming problem.

```python
from gurobipy import *

# Create a new model
m = Model("Nu_Designs_Optimization")

# Define variables
x = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="bookcases")
y = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="garden_chairs")

# Set the objective function
m.setObjective(270*x + 350*y, GRB.MAXIMIZE)

# Add constraints
m.addConstr(3*x + 2*y <= 80, "woodworking_hours")
m.addConstr(2*x + 4*y <= 70, "nails_boxes")
m.addConstr(3*x + 3*y <= 90, "varnish_units")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Bookcases to make: {x.x}")
    print(f"Garden chairs to make: {y.x}")
    print(f"Maximum profit: ${270*x.x + 350*y.x:.2f}")
else:
    print("No optimal solution found")
```