Series: delightful products

Once you’ve hit the point where a simpler pattern isn’t working for you anymore and you have to start using the more complicated one, [there’s a natural tendency] to then always reach for the complicated one in other situations where the simple one would be just fine. Martin Fowler

The Boss needs an app to capture employee suggestions — we can’t use a cardboard box with a cut-out slot, we are a software company!

class SuggestionsController < ApplicationController :: Base before_filter :authenticate! before_filter :boss_only , except: [ :new , :create ] def index @suggestions = Redis . find_by_key ( "suggestions" ) unless @suggestions @suggestions = Respository . for ( :suggestion ). all Resque . enqueue ( CacheSuggestionJob , @suggestions ) Logger . log ( I18n . t ( :cache_not_warm )) end @suggestions = SuggestionDecorator . decorate_collection ( @suggestions ) end def new @suggestion = FormBuilder . for ( :suggestion ) end def create @suggestion = Suggestion . new params . require ( :idea ). permit ( :category ) if @suggestion . valid? current_user . extend SuggestionSubmitter current_user . suggest ( @suggestion ) Resque . enqueue ( NotifyBossJob , @suggestion ) unless current_user . intern? Resque . enqueue ( AddToDailyEmailDigestJob , @suggestion ) flash [ :success ] = I18n . t ( :thank_you ) redirect_to root_url else Logger . log ( I18n . t ( :invalid_suggestion_attempt ), current_user , @suggestion ) flash [ :error ] = @suggestion . error_messages render :new end end end

Sometimes simple is better.