You are interested in how to use classes properly, so let's talk about it. **Design your classes** Why did you choose to split the functionality as you did? Does you `BuildShape` have any stand alone value? Does it have any re-use value? In ruby it is very easy to arbitrarily break functionality into different classes, because you can call methods and members which are not there, and only in runtime they are checked. This does not mean you _should_ arbitrarily break functionality into different classes - quite the opposite! It is the developers _responsibility_ to design his classes well. **How should you design this?** What are the _actors_ in this exercise? * We need to prompt the user to choose a shape * We need to draw a shape * We need to draw a square * We need to draw a triangle So, we could break it down to 4 classes (with inheritance) - `ShapeFactory`, `Shape`, `Square < Shape`, `Triangle < Shape`. `Shape` contains the functionality that is relevant to both `Square` and `Triangle` (like having texture), and the `ShapeFactory` is used to decide which shape to draw. class Shape def initialize(texture, size) @texture = texture @size = size end end class Triangle < Shape def draw @size.times { |i| puts @texture * i } end end class Square < Shape def draw @size.times { puts @texture * @size } end end module ShapeFactory def self.create_shape(shape_name) case shape_name when 'square' Square.new('#', 5) when 'triangle' Triangle.new('*', 5) end end end Now all you have to do is prompt the user: puts 'Enter either "triangle" or "square"' shape_name = gets.chomp print "you entered: " puts shape_name until shape = ShapeFactory.create_shape(shape_name) puts "#{shape_name} is not a valid shape, try again" shape_name = gets.chomp end puts "#{shape_name} is a valid shape." shape.draw