"i hate the word enterprise" it's marketing talk programmers don't use it, really but it has a meaning "your software isn't revenue generating" your software is being relied on to make money elsewhere people get pissed if it doesn't work so it has to work if it fails, it has to be fixed quickly perl king of my dwim tmtowtdi needs to be more DWIS with less WTDI historically perl is a swiss army chainsaw getting the job done isn't enough the job is bigger than normal DRY straightforwardness onc concept method when do you split into a new function? sooner than common wisdom suggests "a call to a loop should be its own method" put your constants only in one place config files james hates them but if you need them, only system config should be there don't reassign if you assign to one var twice, your block/sub is too big logging do it ...at an appropriate level of granularity declarative-like syntax the Error module provides exceptions through subclassing this means typing a lot don't think about data in the small, granual sense (strings, etc) think about larger conceptual models communications oo is all about things talking sending messages messages and behaviors are far more important than data and state ...but remember that objects /themselves/ are about state state state is a bad thing implies knowledge held, rather than acquired statelessness bad, too you have to pass everything in a message creates tigtly bound componants strike a balance if you can't do this with components, you need different separation class names are volatile don't hardwire them in if you hardwire, then subclass, you will suffer simple constructors never, ever put arguments in constructor make objects construct in classes the result of a method call makes subclassing easier clear example given: userlogin/adminlogin use objects whenever appropriate. it saves time later. objects are not true just because they're constructed provide ->truth or overload bool conditionals they're bad use them when you need them, not becase you can woah: in smalltalk: object.truth.if_true(code) truth returns a False or True object. False.if_true is nop singletons value singeltons "there can be only one 1" often immutable often magnitudes perl doesn't do this makes comparison easier who are you talking to? a computer? get over it, your'e not programming is about talking to other programmers how does this help reliability? doing it once means easier to test/debug helps maintenance: fund bugs faster systematically scaling: profiling is better things can be moved about more move subsystems without fear