Technical requirementsGood code versus bad codeBad codeImproper indentationComments that state the obviousComments that excuse bad codeCommented-out lines of codeImproper organization of namespacesBad naming conventionsClasses that do multiple jobsMethods that do many thingsMethods with more than 10 lines of codeMethods with more than two parametersUsing exceptions to control program flowCode that is difficult to readCode that is tightly coupledLow cohesionObjects left hanging aroundUse of the Finalize() methodOver-engineeringLearn to Keep It Simple, StupidLack of regions in large classesLost-intention codeDirectly exposing informationGood codeProper indentationMeaningful commentsAPI documentation commentsProper organization using namespacesGood naming conventionsClasses that only do one jobMethods that do one thingMethods with less than 10 lines, and preferably no more than 4Methods with no more than two parametersProper use of exceptionsCode that is readableCode that is loosely coupledHigh cohesionObjects are cleanly disposed ofAvoiding the Finalize() methodThe right level of abstractionUsing regions in large classesThe need for coding standards, principles, and methodologiesCoding standardsCoding principlesCoding methodologiesCoding conventionsModularityKISSYAGNIDRYSOLIDOccam's RazorSummaryQuestionsFurther reading