SlideShare a Scribd company logo
1 of 62
Download to read offline
Best Practices Are Best
...Except When They're Not
Nolan Erck
Obligatory “About Me” Stuff
Chief Consultant / Owner, South Of Shasta
Stuff: ColdFusion, C/C++, PHP, WordPress,
Android, jQuery, Ruby, .NET, AngularJS,
On-site Training, etc.
SacInteractive Co-Manager
Reformed video game developer
Music junkie
Today's Agenda
What is a “Best Practice”?
An Explanation of “Technical Debt”
Sometimes I've Had to Break The Rules
How To Fix Things Later
Other Resources
Questions? Ask'em!
This might turn into a “round table”
discussion.
That's Okay.
I'll “moderate” if need be.
I run a consulting business
Often includes taking over legacy projects.
Can't always rebuild from scratch.
Have to make decisions.
Developers are paid to solve problems
Does the client care how I solve it?
What can I fix, given the resource
constraints?
I run a consulting business
Some factors to consider:
– Being able to draw a line in the sand.
– Good. Cheap. Quick.
● Pick two.
– The 80/20 Rule.
I run a consulting business
Make it work now and make it elegant in
version 2 if need be.
Don't Let Perfect Be The Enemy Of Good
What is a “Best Practice”?
Google says this:
Commercial or professional procedures that
are accepted or prescribed as being correct
or most effective.
What is a Best Practice?
But it is still a practice
The practice of medicine
Because sometimes...it's wrong
What is a Best Practice?
● Today's “Best Practice” is tomorrow's “Bad
Idea”.
● Best Practices sometimes come and go
quickly.
● Good Practices might be better than Best
Practices sometimes.
What is a Best Practice?
Your mileage may vary – deadlines are real
Client doesn't care what's recommended
Just want it how they want it
StackOverflow: “Well I would never do it
THAT way!”
Reality: sometimes you HAVE to do it
THAT way
What is “Technical Debt”?
No project is perfect
Shortcuts are sometimes inevitable
Shortcuts cause “Technical Debt”
What is “Technical Debt”?
A dam has a leak.
Can stick a finger in the leak.
Eventually you run out of fingers.
Remove the brick and replace it.
StackOverflow: Well, I would never do it
that way!
These are the times that I had to do it that
way.
Some real-world bad situations
When might you use CFML
Instead of CFScript?
When the client demands the ability to
change HTML in the source code via FTP
...in Production!
ColdFusion: When I used CFForm/CFSelect
on a recent project
...and it was the right thing to do
When an open source MVC framework
wasn't the right answer
and “rolling my own” framework
was the correct decision
Is emailing errors to the team always a
bad idea?
No.
When the problem isn't in code
So... my hands are completely tied and I
have to change all of the URL strings that
are passed with "Alter" in them (of which
there are many) to "altr".
– Poor guy on a Google forum, recently
When the problem isn't in code
Find a stakeholder, outside of IT
Communicate the issue
– In a non-technical way
– Users have a lesser experience
– Magic phrase: “Lower click-thru rate”
– Magic phrase: “Lower conversion rate”
How To Fix Things Later
Bootstrap
– “works” fine in table-based websites. Minor
side-effects, nothing crazy.
jQuery
– can just “sit there” for later.
LESS / SASS
– to refactor old CSS.
How To Fix Things Later
Source Control.
Task tracking / ticket systems.
Testing tools.
Tools for automating.
“I don't have time”.
– 30 minutes a day works wonders!
Seriously.
How To Fix Things Later
Don't be afraid to ask questions
Post on Google Groups, StackOverflow,
whatever.
Talk to people at the conference!
How To Fix Things Later
“But when I post on StackOverflow, I get
yelled at for doing it wrong!”
Senior Developer != Great Communicator
<rant>”how to ask questions”</rant>
Other Resources
JoelOnSoftware.com
Ben Nadel's blog
“Secrets of the Rockstar Programmers”
“Head First Java”
“Head First Design Patterns”
Any “Head First” books, really.
Questions? Comments?
Email: nolan@southofshasta.com
Twitter: @southofshasta
Blog: southofshasta.com/blog
Do you need a consultant for a project? :)
Thanks!
Best Practices Are Best
...Except When They're Not
Nolan Erck
Obligatory “About Me” Stuff
Chief Consultant / Owner, South Of Shasta
Stuff: ColdFusion, C/C++, PHP, WordPress,
Android, jQuery, Ruby, .NET, AngularJS,
On-site Training, etc.
SacInteractive Co-Manager
Reformed video game developer
Music junkie
18 years software development
Chief Consultant / Owner, South Of Shasta
Consulting for 7 years
Teach classes.
Stuff: ColdFusion, C/C++, PHP, WordPress,
Android, jQuery, Ruby, .NET, AngularJS, etc.
SacInteractive Co-Manager (formerly
Sacramento CFUG)
Reformed video game dev – Lucas, Maxis
Music junkie
Today's Agenda
What is a “Best Practice”?
An Explanation of “Technical Debt”
Sometimes I've Had to Break The Rules
How To Fix Things Later
Other Resources
Questions? Ask'em!
This might turn into a “round table”
discussion.
That's Okay.
I'll “moderate” if need be.
I run a consulting business
Often includes taking over legacy projects.
Can't always rebuild from scratch.
Have to make decisions.
Developers are paid to solve problems
Does the client care how I solve it?
What can I fix, given the resource
constraints?
I run a consulting business
Some factors to consider:
– Being able to draw a line in the sand.
– Good. Cheap. Quick.
● Pick two.
– The 80/20 Rule.
Being able to draw a line in the sand.
A skill I struggle with.
When is “good enough” truly “good enough” but won't
come back to bite me (at least not SOON)?
I run a consulting business
Make it work now and make it elegant in
version 2 if need be.
Don't Let Perfect Be The Enemy Of Good
What is a “Best Practice”?
Google says this:
Commercial or professional procedures that
are accepted or prescribed as being correct
or most effective.
What is a Best Practice?
But it is still a practice
The practice of medicine
Because sometimes...it's wrong
What is a Best Practice?
● Today's “Best Practice” is tomorrow's “Bad
Idea”.
● Best Practices sometimes come and go
quickly.
● Good Practices might be better than Best
Practices sometimes.
What is a Best Practice?
Your mileage may vary – deadlines are real
Client doesn't care what's recommended
Just want it how they want it
StackOverflow: “Well I would never do it
THAT way!”
Reality: sometimes you HAVE to do it
THAT way
What is “Technical Debt”?
No project is perfect
Shortcuts are sometimes inevitable
Shortcuts cause “Technical Debt”
Working on a project, come across a bug/change you need to make.
The “best practice” might involve adding a “big chunk” of code
(relatively speaking). (i.e. updating to a new version of a 3rd party
library, making reconfiguring how some old functions work, maybe all
of the above.)
The deadline is approaching, or the client is getting antsy (same thing).
So you throw a “short cut” into the code – maybe hack a “global”
variable or 2 into the code to get it DONE now.
Short term: that might work fine.
Longer term: you've incurred some “technical debt” into the application.
Taking a “loan” out at the bank; eventually that loan has to be paid
back.
What is “Technical Debt”?
A dam has a leak.
Can stick a finger in the leak.
Eventually you run out of fingers.
Remove the brick and replace it.
If a dam springs a leak, we can
a) stick our finger in the hole (quick) – technical debt
you eventually run out of fingers!
b) remove the offending brick, rebuild a better, stronger one.
Might take more time, but is better long-term decision.
StackOverflow: Well, I would never do it
that way!
These are the times that I had to do it that
way.
Some real-world bad situations
Stuff happens.
The following are true stories from different projects
I've worked on.
In which the “best practice” wasn't a viable option.
When might you use CFML
Instead of CFScript?
Site was under source control (good).
Client knew how to hand edit small bits of HTML (links, bold,
underline, new paragraphs of verbiage, etc).
Did not want to change his work flow. Refused.
This is the guy signing the checks and approving my budgets.
You can't always just say “no, that's not a best practice”.
Solution: installed Git on the server.
Created a link that ran a BAT file, doing a “git commit” for recent
changes.
Could run this script periodically on Production.
Or client could run it to let me know he was finished changing
things (i.e. just click this link when you're done making edits.)
Yes, we are changing code on Production.
No I'm not happy about it.
And neither are the StackOverflows.
...but the guy approving the budgets was.
(and everything got added to source control...eventually)
Longer term: he needed a WYSIWYG and some changes to the
app, but this worked for now, and we finished the app!
When the client demands the ability to
change HTML in the source code via FTP
...in Production!
Site was under source control (good).
Client knew how to hand edit small bits of HTML (links, bold,
underline, new paragraphs of verbiage, etc).
Did not want to change his work flow. Refused.
This is the guy signing the checks and approving my budgets.
You can't always just say “no, that's not a best practice”.
Solution: installed Git on the server.
Created a link that ran a BAT file, doing a “git commit” for recent
changes.
Could run this script periodically on Production.
Or client could run it to let me know he was finished changing
things (i.e. just click this link when you're done making edits.)
Yes, we are changing code on Production.
No I'm not happy about it.
And neither are the StackOverflows.
...but the guy approving the budgets was.
(and everything got added to source control...eventually)
Longer term: he needed a WYSIWYG and some changes to the
app, but this worked for now, and we finished the app!
ColdFusion: When I used CFForm/CFSelect
on a recent project
...and it was the right thing to do
US Post office
when you’ve got 2 DAYS to train 3 NON-developers
on how to maintain a ColdFusion applicaiton
already in place….taht’s already using CFForm,
CFSelect etc.
They had ZERO coding experience
But Dreamweaver made sense and “clicked” for
them.
Is it REALLY the best solution to try and teach them
OO and Model-Glue in a position like that?
Probably not.
When an open source MVC framework
wasn't the right answer
and “rolling my own” framework
was the correct decision
Large scale web app for the semi-conductor industry.
Had quickly approaching deadlines (conf's and client
demos).
Leadership gave me a budget for 3 junior developers
(I “inherited” the team.)
2 junior web guys
1 retired Fortran / Assembly developer
...but they all knew what XML was and how it worked.
Teaching 3 people OO + MVC + Mach-ii would have taken
lots of time.
Instead, we wrote a DSL in XML.
The junior devs could help “describe” the different pieces of
the app in XML and tell me what they needed the
language to do.
I wrote the DSL “engine”
(which actually was OO, just not at the level the junior dev's
cared about.)
Is emailing errors to the team always a
bad idea?
No.
Fusion. Non-technical clients
NO idea what happens on their server
Showing them a bar graph of “bad IIS requests per hour
that hit the ColdFusion connector via HTTP” (or some
such thing) wouldn’t have added any VALUE to the team
But the team lives and dies by email.
So we set up a simple onError() that emailed myself (IT)
and 2 others on the leadership team.
Short term -- immediately increased IT budget to get the
server under better control (it was throwing a LOT of
errors and getting more traffic than they realized).
Longer term -- the non-techie guys (that were in charge of
the MONEY) started thinking about forward planning, and
maybe it was time to rebuild these apps so the code was
fresher, had better browser/mobile support etc.
When the problem isn't in code
So... my hands are completely tied and I
have to change all of the URL strings that
are passed with "Alter" in them (of which
there are many) to "altr".
– Poor guy on a Google forum, recently
When the problem isn't in code
Find a stakeholder, outside of IT
Communicate the issue
– In a non-technical way
– Users have a lesser experience
– Magic phrase: “Lower click-thru rate”
– Magic phrase: “Lower conversion rate”
How To Fix Things Later
Bootstrap
– “works” fine in table-based websites. Minor
side-effects, nothing crazy.
jQuery
– can just “sit there” for later.
LESS / SASS
– to refactor old CSS.
How To Fix Things Later
Source Control.
Task tracking / ticket systems.
Testing tools.
Tools for automating.
“I don't have time”.
– 30 minutes a day works wonders!
Seriously.
Source Control
(Subversion, Git, PerfForce, Team Foundation Server, etc)
Don't let the Git people fool you – any of them will work.)
Task tracking / ticket systems
Great places to store “todo” lists for later so everyone on
the project can see.
Jira, Lighthouse, anything that's NOT “just sending email”
Unit Tests
...and any other testing (framework) that you can use.
Tools for automating parts of the build process.
Grunt, Maven, Ant, whatever.
Don't have to learn them all at once.
Pick 1 thing you don't know and try it out.
Make a “pet project” outside of work so you have
something fun to expiriment with.
“I don't have time” – 30 minutes a day works wonders!
Seriously.
How To Fix Things Later
Don't be afraid to ask questions
Post on Google Groups, StackOverflow,
whatever.
Talk to people at the conference!
Don't Be Afraid to Ask Questions
Post on Google Groups, StackOverflow,
whatever.
Talk to people at the conference!
Client: brought in to do “pair programming”.
He'd worked there for 15 years, wrote most of their
CF code, but done so by himself mostly. Hadn't
used OO/MVC at all, but at least knew of Ben
Nadel's blog. :)
Semi Rant: these “how to ask smart questions”
posts on Google Groups...take them with a grain of
salt. Authors, please work on wording these in non-
snarky tones.
How To Fix Things Later
“But when I post on StackOverflow, I get
yelled at for doing it wrong!”
Senior Developer != Great Communicator
<rant>”how to ask questions”</rant>
But sometimes when I post on StackOverflow I get
yelled at for doing it wrong!
That's THEIR problem (the yeller) not yours.
Everybody makes mistakes, even THAT guy.
A Senior Developer != A Great Communicator.
Don't be afraid of doing things wrong. That's
how we learn.
Other Resources
JoelOnSoftware.com
Ben Nadel's blog
“Secrets of the Rockstar Programmers”
“Head First Java”
“Head First Design Patterns”
Any “Head First” books, really.
JoelOnSoftware.com (his books too)
Book: Secrets of the Rockstar Programmers
BenNadel.com – for CF and JS stuff, asking questions that
get a polite, professional response. (Seriously, Ben is the
nicest guy ever.)
“Head First Java”
Even if you're NOT a Java developer.
Or if you're already a 'senior' developer.
Read it anyway. Learn new, clear, different ways of
explaining what code does to non-developers (or just
people other than yourself that have a different brain than
you do, and approach problems differently).
Pretty much any “Head First” book for that matter.
“Head First Design Patterns”
– Same idea, but for higher level OO concepts.
Super easy ways to explain OO designs to non OO folks.
I use this book when I teach any intermediate/advanced
OO class. It works wonders!
Questions? Comments?
Email: nolan@southofshasta.com
Twitter: @southofshasta
Blog: southofshasta.com/blog
Do you need a consultant for a project? :)
Thanks!

More Related Content

What's hot

Director of Product at Glassdoor Talks: How to Transition to Product Management
Director of Product at Glassdoor Talks:  How to Transition to Product ManagementDirector of Product at Glassdoor Talks:  How to Transition to Product Management
Director of Product at Glassdoor Talks: How to Transition to Product ManagementProduct School
 
Co-Founders - short lessons learned
Co-Founders - short lessons learnedCo-Founders - short lessons learned
Co-Founders - short lessons learnedAndreas Klinger
 
How Tools Have Shaped the Role of the Designer
How Tools Have Shaped the Role of the DesignerHow Tools Have Shaped the Role of the Designer
How Tools Have Shaped the Role of the DesignerJonathan Lieberman
 
Engineering Management for Early Stage Startups
Engineering Management for Early Stage StartupsEngineering Management for Early Stage Startups
Engineering Management for Early Stage StartupsAndreas Klinger
 
How good is your software development team ?
How good is your software development team ?How good is your software development team ?
How good is your software development team ?Kinshuk Adhikary
 
Working w/ Emerging Technologies Explained by GoodRead's Sr. PM
Working w/ Emerging Technologies Explained by GoodRead's Sr. PM Working w/ Emerging Technologies Explained by GoodRead's Sr. PM
Working w/ Emerging Technologies Explained by GoodRead's Sr. PM Product School
 
10 bezcennych lekcji dla software developera stającego się szefem firmy
10 bezcennych lekcji dla software developera stającego się szefem firmy10 bezcennych lekcji dla software developera stającego się szefem firmy
10 bezcennych lekcji dla software developera stającego się szefem firmyWojciech Seliga
 
Confitura 2013 Software Developer Career Unplugged
Confitura 2013 Software Developer Career UnpluggedConfitura 2013 Software Developer Career Unplugged
Confitura 2013 Software Developer Career UnpluggedWojciech Seliga
 
Ten lessons I painfully learnt while moving from software developer
to entrep...
Ten lessons I painfully learnt while moving from software developer
to entrep...Ten lessons I painfully learnt while moving from software developer
to entrep...
Ten lessons I painfully learnt while moving from software developer
to entrep...Wojciech Seliga
 
Lean Blog Podcast #115 - Mark Graban Interviews Eric Ries on "The Lean Startup"
Lean Blog Podcast #115 - Mark Graban Interviews Eric Ries on "The Lean Startup"Lean Blog Podcast #115 - Mark Graban Interviews Eric Ries on "The Lean Startup"
Lean Blog Podcast #115 - Mark Graban Interviews Eric Ries on "The Lean Startup"Mark Graban
 
Founders - why we do what we do - and why this sucks.
Founders - why we do what we do - and why this sucks.Founders - why we do what we do - and why this sucks.
Founders - why we do what we do - and why this sucks.Andreas Klinger
 
Ten lessons I painfully learnt while moving from software developer to entrep...
Ten lessons I painfully learnt while moving from software developer to entrep...Ten lessons I painfully learnt while moving from software developer to entrep...
Ten lessons I painfully learnt while moving from software developer to entrep...Wojciech Seliga
 
The Technical Debt Trap
The Technical Debt TrapThe Technical Debt Trap
The Technical Debt TrapDoc Norton
 
Devoxx Poland 2015: 5-10-15 years with Java
Devoxx Poland 2015: 5-10-15 years with Java Devoxx Poland 2015: 5-10-15 years with Java
Devoxx Poland 2015: 5-10-15 years with Java Wojciech Seliga
 
It's Not About Working Software After All!
It's Not About Working Software After All!It's Not About Working Software After All!
It's Not About Working Software After All!Ignite
 
5-10-15 years of Java developer career - Warszawa JUG 2015
5-10-15 years of Java developer career - Warszawa JUG 20155-10-15 years of Java developer career - Warszawa JUG 2015
5-10-15 years of Java developer career - Warszawa JUG 2015Wojciech Seliga
 
Customer Development Methodology
Customer Development MethodologyCustomer Development Methodology
Customer Development MethodologyVenture Hacks
 

What's hot (20)

Director of Product at Glassdoor Talks: How to Transition to Product Management
Director of Product at Glassdoor Talks:  How to Transition to Product ManagementDirector of Product at Glassdoor Talks:  How to Transition to Product Management
Director of Product at Glassdoor Talks: How to Transition to Product Management
 
Co-Founders - short lessons learned
Co-Founders - short lessons learnedCo-Founders - short lessons learned
Co-Founders - short lessons learned
 
Front-end Culture @ Booking.com
Front-end Culture @ Booking.comFront-end Culture @ Booking.com
Front-end Culture @ Booking.com
 
ConnectIn Amsterdam 2014 - Beter beslissen met data - Booking.com & Netwerven
ConnectIn Amsterdam 2014 - Beter beslissen met data - Booking.com & NetwervenConnectIn Amsterdam 2014 - Beter beslissen met data - Booking.com & Netwerven
ConnectIn Amsterdam 2014 - Beter beslissen met data - Booking.com & Netwerven
 
What lies beneath
What lies beneathWhat lies beneath
What lies beneath
 
How Tools Have Shaped the Role of the Designer
How Tools Have Shaped the Role of the DesignerHow Tools Have Shaped the Role of the Designer
How Tools Have Shaped the Role of the Designer
 
Engineering Management for Early Stage Startups
Engineering Management for Early Stage StartupsEngineering Management for Early Stage Startups
Engineering Management for Early Stage Startups
 
How good is your software development team ?
How good is your software development team ?How good is your software development team ?
How good is your software development team ?
 
Working w/ Emerging Technologies Explained by GoodRead's Sr. PM
Working w/ Emerging Technologies Explained by GoodRead's Sr. PM Working w/ Emerging Technologies Explained by GoodRead's Sr. PM
Working w/ Emerging Technologies Explained by GoodRead's Sr. PM
 
10 bezcennych lekcji dla software developera stającego się szefem firmy
10 bezcennych lekcji dla software developera stającego się szefem firmy10 bezcennych lekcji dla software developera stającego się szefem firmy
10 bezcennych lekcji dla software developera stającego się szefem firmy
 
Confitura 2013 Software Developer Career Unplugged
Confitura 2013 Software Developer Career UnpluggedConfitura 2013 Software Developer Career Unplugged
Confitura 2013 Software Developer Career Unplugged
 
Ten lessons I painfully learnt while moving from software developer
to entrep...
Ten lessons I painfully learnt while moving from software developer
to entrep...Ten lessons I painfully learnt while moving from software developer
to entrep...
Ten lessons I painfully learnt while moving from software developer
to entrep...
 
Lean Blog Podcast #115 - Mark Graban Interviews Eric Ries on "The Lean Startup"
Lean Blog Podcast #115 - Mark Graban Interviews Eric Ries on "The Lean Startup"Lean Blog Podcast #115 - Mark Graban Interviews Eric Ries on "The Lean Startup"
Lean Blog Podcast #115 - Mark Graban Interviews Eric Ries on "The Lean Startup"
 
Founders - why we do what we do - and why this sucks.
Founders - why we do what we do - and why this sucks.Founders - why we do what we do - and why this sucks.
Founders - why we do what we do - and why this sucks.
 
Ten lessons I painfully learnt while moving from software developer to entrep...
Ten lessons I painfully learnt while moving from software developer to entrep...Ten lessons I painfully learnt while moving from software developer to entrep...
Ten lessons I painfully learnt while moving from software developer to entrep...
 
The Technical Debt Trap
The Technical Debt TrapThe Technical Debt Trap
The Technical Debt Trap
 
Devoxx Poland 2015: 5-10-15 years with Java
Devoxx Poland 2015: 5-10-15 years with Java Devoxx Poland 2015: 5-10-15 years with Java
Devoxx Poland 2015: 5-10-15 years with Java
 
It's Not About Working Software After All!
It's Not About Working Software After All!It's Not About Working Software After All!
It's Not About Working Software After All!
 
5-10-15 years of Java developer career - Warszawa JUG 2015
5-10-15 years of Java developer career - Warszawa JUG 20155-10-15 years of Java developer career - Warszawa JUG 2015
5-10-15 years of Java developer career - Warszawa JUG 2015
 
Customer Development Methodology
Customer Development MethodologyCustomer Development Methodology
Customer Development Methodology
 

Viewers also liked

Conceptos de información-1
Conceptos de información-1Conceptos de información-1
Conceptos de información-1Leonardo Melo
 
ITB2016 Converting Legacy Apps into Modern MVC
ITB2016 Converting Legacy Apps into Modern MVCITB2016 Converting Legacy Apps into Modern MVC
ITB2016 Converting Legacy Apps into Modern MVCOrtus Solutions, Corp
 
The power of unity
The power of unityThe power of unity
The power of unityYCC
 
Storyboard (day 1 of filming)
Storyboard (day 1 of filming)Storyboard (day 1 of filming)
Storyboard (day 1 of filming)LucyAnne97
 
Killing Shark-Riding Dinosaurs with ORM
Killing Shark-Riding Dinosaurs with ORMKilling Shark-Riding Dinosaurs with ORM
Killing Shark-Riding Dinosaurs with ORMOrtus Solutions, Corp
 
CBDW2014 - Building ContentBox Modules
CBDW2014 - Building ContentBox ModulesCBDW2014 - Building ContentBox Modules
CBDW2014 - Building ContentBox ModulesOrtus Solutions, Corp
 
Q2 how does your media product represent particular social
Q2 how does your media product represent particular socialQ2 how does your media product represent particular social
Q2 how does your media product represent particular socialLucyAnne97
 
Creating a Double Page Spread Document
Creating a Double Page Spread DocumentCreating a Double Page Spread Document
Creating a Double Page Spread Documentlaurenjewell
 
Michael Jackson
Michael JacksonMichael Jackson
Michael JacksonLucyAnne97
 
Michael jackson
Michael jacksonMichael jackson
Michael jacksonLucyAnne97
 

Viewers also liked (19)

Fc, cp, dps
Fc, cp, dpsFc, cp, dps
Fc, cp, dps
 
Conceptos de información-1
Conceptos de información-1Conceptos de información-1
Conceptos de información-1
 
CMigrating to mvc with cold box 3.8
CMigrating to mvc with cold box 3.8CMigrating to mvc with cold box 3.8
CMigrating to mvc with cold box 3.8
 
ITB2016 Converting Legacy Apps into Modern MVC
ITB2016 Converting Legacy Apps into Modern MVCITB2016 Converting Legacy Apps into Modern MVC
ITB2016 Converting Legacy Apps into Modern MVC
 
Horror
HorrorHorror
Horror
 
The power of unity
The power of unityThe power of unity
The power of unity
 
File types pro forma
File types pro formaFile types pro forma
File types pro forma
 
Best Photos.
Best Photos.Best Photos.
Best Photos.
 
Storyboard (day 1 of filming)
Storyboard (day 1 of filming)Storyboard (day 1 of filming)
Storyboard (day 1 of filming)
 
Killing Shark-Riding Dinosaurs with ORM
Killing Shark-Riding Dinosaurs with ORMKilling Shark-Riding Dinosaurs with ORM
Killing Shark-Riding Dinosaurs with ORM
 
CBDW2014 - Building ContentBox Modules
CBDW2014 - Building ContentBox ModulesCBDW2014 - Building ContentBox Modules
CBDW2014 - Building ContentBox Modules
 
Q2 how does your media product represent particular social
Q2 how does your media product represent particular socialQ2 how does your media product represent particular social
Q2 how does your media product represent particular social
 
ITB2015 - NoSQL For You And Me
ITB2015 - NoSQL For You And MeITB2015 - NoSQL For You And Me
ITB2015 - NoSQL For You And Me
 
Creating a Double Page Spread Document
Creating a Double Page Spread DocumentCreating a Double Page Spread Document
Creating a Double Page Spread Document
 
Q1 Evaluation
Q1 EvaluationQ1 Evaluation
Q1 Evaluation
 
Michael Jackson
Michael JacksonMichael Jackson
Michael Jackson
 
Олі Мельник
Олі МельникОлі Мельник
Олі Мельник
 
Андрію Благому
Андрію БлагомуАндрію Благому
Андрію Благому
 
Michael jackson
Michael jacksonMichael jackson
Michael jackson
 

Similar to ITB2016 best practices are best except when they are not

AD - Developer communication and Technology
AD - Developer communication and TechnologyAD - Developer communication and Technology
AD - Developer communication and TechnologyEnplore AB
 
Big guns for small guys (reloaded)
Big guns for small guys (reloaded)Big guns for small guys (reloaded)
Big guns for small guys (reloaded)Jorge López-Lago
 
Put a UI Developer in a Bank; See What Happens
Put a UI Developer in a Bank; See What HappensPut a UI Developer in a Bank; See What Happens
Put a UI Developer in a Bank; See What HappensC4Media
 
Functional requirements: Thinking Like A Pirate
Functional requirements: Thinking Like A PirateFunctional requirements: Thinking Like A Pirate
Functional requirements: Thinking Like A PirateAmye Scavarda
 
Planning JavaScript and Ajax for larger teams
Planning JavaScript and Ajax for larger teamsPlanning JavaScript and Ajax for larger teams
Planning JavaScript and Ajax for larger teamsChristian Heilmann
 
WordCamp Nashville 2016: The promise and peril of Agile and Lean practices
WordCamp Nashville 2016: The promise and peril of Agile and Lean practicesWordCamp Nashville 2016: The promise and peril of Agile and Lean practices
WordCamp Nashville 2016: The promise and peril of Agile and Lean practicesmtoppa
 
Resisting The Feature Creature
Resisting The Feature CreatureResisting The Feature Creature
Resisting The Feature CreatureChristian Heilmann
 
Replacing Lotus Notes? Here's How It Really Goes Down
Replacing Lotus Notes?  Here's How It Really Goes DownReplacing Lotus Notes?  Here's How It Really Goes Down
Replacing Lotus Notes? Here's How It Really Goes DownPeter Presnell
 
Designer vs Developer (Barcamp Memphis 2009)
Designer vs Developer (Barcamp Memphis 2009)Designer vs Developer (Barcamp Memphis 2009)
Designer vs Developer (Barcamp Memphis 2009)Steven Trotter
 
Boston Ruby Meetup: The promise and peril of Agile and Lean practices
Boston Ruby Meetup: The promise and peril of Agile and Lean practicesBoston Ruby Meetup: The promise and peril of Agile and Lean practices
Boston Ruby Meetup: The promise and peril of Agile and Lean practicesmtoppa
 
So You Want to Rewrite That...
So You Want to Rewrite That...So You Want to Rewrite That...
So You Want to Rewrite That...Camille Fournier
 
How to justify technical debt mitigations in Software Engineering
How to justify technical debt mitigations in Software EngineeringHow to justify technical debt mitigations in Software Engineering
How to justify technical debt mitigations in Software EngineeringAndré Agostinho
 
#Noprojects @Agile Venture Prato 2018
#Noprojects @Agile Venture Prato 2018#Noprojects @Agile Venture Prato 2018
#Noprojects @Agile Venture Prato 2018Dimitri Favre
 
DevDay 2013 - Building Startups and Minimum Viable Products
DevDay 2013 - Building Startups and Minimum Viable ProductsDevDay 2013 - Building Startups and Minimum Viable Products
DevDay 2013 - Building Startups and Minimum Viable ProductsBen Hall
 
Driving agility into your customer experience
Driving agility into your customer experienceDriving agility into your customer experience
Driving agility into your customer experiencemarc mcneill
 
Product Development -The Great Unknown
Product Development -The Great UnknownProduct Development -The Great Unknown
Product Development -The Great UnknownSteve Owens
 
Website design proposal
Website design proposalWebsite design proposal
Website design proposalNiaz Yousufzai
 

Similar to ITB2016 best practices are best except when they are not (20)

AD - Developer communication and Technology
AD - Developer communication and TechnologyAD - Developer communication and Technology
AD - Developer communication and Technology
 
Big guns for small guys (reloaded)
Big guns for small guys (reloaded)Big guns for small guys (reloaded)
Big guns for small guys (reloaded)
 
Designer vs Developer
Designer vs DeveloperDesigner vs Developer
Designer vs Developer
 
Put a UI Developer in a Bank; See What Happens
Put a UI Developer in a Bank; See What HappensPut a UI Developer in a Bank; See What Happens
Put a UI Developer in a Bank; See What Happens
 
Functional requirements: Thinking Like A Pirate
Functional requirements: Thinking Like A PirateFunctional requirements: Thinking Like A Pirate
Functional requirements: Thinking Like A Pirate
 
Biz Product Learnings
Biz Product LearningsBiz Product Learnings
Biz Product Learnings
 
Planning JavaScript and Ajax for larger teams
Planning JavaScript and Ajax for larger teamsPlanning JavaScript and Ajax for larger teams
Planning JavaScript and Ajax for larger teams
 
WordCamp Nashville 2016: The promise and peril of Agile and Lean practices
WordCamp Nashville 2016: The promise and peril of Agile and Lean practicesWordCamp Nashville 2016: The promise and peril of Agile and Lean practices
WordCamp Nashville 2016: The promise and peril of Agile and Lean practices
 
Resisting The Feature Creature
Resisting The Feature CreatureResisting The Feature Creature
Resisting The Feature Creature
 
Replacing Lotus Notes? Here's How It Really Goes Down
Replacing Lotus Notes?  Here's How It Really Goes DownReplacing Lotus Notes?  Here's How It Really Goes Down
Replacing Lotus Notes? Here's How It Really Goes Down
 
Designer vs Developer (Barcamp Memphis 2009)
Designer vs Developer (Barcamp Memphis 2009)Designer vs Developer (Barcamp Memphis 2009)
Designer vs Developer (Barcamp Memphis 2009)
 
Boston Ruby Meetup: The promise and peril of Agile and Lean practices
Boston Ruby Meetup: The promise and peril of Agile and Lean practicesBoston Ruby Meetup: The promise and peril of Agile and Lean practices
Boston Ruby Meetup: The promise and peril of Agile and Lean practices
 
So You Want to Rewrite That...
So You Want to Rewrite That...So You Want to Rewrite That...
So You Want to Rewrite That...
 
How to justify technical debt mitigations in Software Engineering
How to justify technical debt mitigations in Software EngineeringHow to justify technical debt mitigations in Software Engineering
How to justify technical debt mitigations in Software Engineering
 
#Noprojects @Agile Venture Prato 2018
#Noprojects @Agile Venture Prato 2018#Noprojects @Agile Venture Prato 2018
#Noprojects @Agile Venture Prato 2018
 
Introduction to Agile
Introduction to AgileIntroduction to Agile
Introduction to Agile
 
DevDay 2013 - Building Startups and Minimum Viable Products
DevDay 2013 - Building Startups and Minimum Viable ProductsDevDay 2013 - Building Startups and Minimum Viable Products
DevDay 2013 - Building Startups and Minimum Viable Products
 
Driving agility into your customer experience
Driving agility into your customer experienceDriving agility into your customer experience
Driving agility into your customer experience
 
Product Development -The Great Unknown
Product Development -The Great UnknownProduct Development -The Great Unknown
Product Development -The Great Unknown
 
Website design proposal
Website design proposalWebsite design proposal
Website design proposal
 

More from Ortus Solutions, Corp

BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
Secure your Secrets and Settings in ColdFusion
Secure your Secrets and Settings in ColdFusionSecure your Secrets and Settings in ColdFusion
Secure your Secrets and Settings in ColdFusionOrtus Solutions, Corp
 
Daniel Garcia ContentBox: CFSummit 2023
Daniel Garcia ContentBox: CFSummit 2023Daniel Garcia ContentBox: CFSummit 2023
Daniel Garcia ContentBox: CFSummit 2023Ortus Solutions, Corp
 
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdf
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdfITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdf
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdfOrtus Solutions, Corp
 
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdf
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdfITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdf
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdfOrtus Solutions, Corp
 
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdf
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdfITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdf
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdfOrtus Solutions, Corp
 
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdf
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdfITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdf
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdfOrtus Solutions, Corp
 
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdfITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdfOrtus Solutions, Corp
 
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdf
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdfITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdf
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdfOrtus Solutions, Corp
 
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdf
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdfITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdf
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdfOrtus Solutions, Corp
 
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdf
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdfITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdf
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdfOrtus Solutions, Corp
 
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdf
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdfITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdf
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdfOrtus Solutions, Corp
 
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdf
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdfITB_2023_Chatgpt_Box_Scott_Steinbeck.pdf
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdfOrtus Solutions, Corp
 
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdf
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdfITB_2023_CommandBox_Task_Runners_Brad_Wood.pdf
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdfOrtus Solutions, Corp
 
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdf
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdfITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdf
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdfOrtus Solutions, Corp
 
ITB2023 Developing for Performance - Denard Springle.pdf
ITB2023 Developing for Performance - Denard Springle.pdfITB2023 Developing for Performance - Denard Springle.pdf
ITB2023 Developing for Performance - Denard Springle.pdfOrtus Solutions, Corp
 

More from Ortus Solutions, Corp (20)

BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Ortus Government.pdf
Ortus Government.pdfOrtus Government.pdf
Ortus Government.pdf
 
Luis Majano The Battlefield ORM
Luis Majano The Battlefield ORMLuis Majano The Battlefield ORM
Luis Majano The Battlefield ORM
 
Brad Wood - CommandBox CLI
Brad Wood - CommandBox CLI Brad Wood - CommandBox CLI
Brad Wood - CommandBox CLI
 
Secure your Secrets and Settings in ColdFusion
Secure your Secrets and Settings in ColdFusionSecure your Secrets and Settings in ColdFusion
Secure your Secrets and Settings in ColdFusion
 
Daniel Garcia ContentBox: CFSummit 2023
Daniel Garcia ContentBox: CFSummit 2023Daniel Garcia ContentBox: CFSummit 2023
Daniel Garcia ContentBox: CFSummit 2023
 
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdf
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdfITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdf
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdf
 
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdf
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdfITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdf
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdf
 
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdf
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdfITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdf
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdf
 
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdf
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdfITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdf
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdf
 
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdfITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
 
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdf
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdfITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdf
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdf
 
ITB_2023_CBWire_v3_Grant_Copley.pdf
ITB_2023_CBWire_v3_Grant_Copley.pdfITB_2023_CBWire_v3_Grant_Copley.pdf
ITB_2023_CBWire_v3_Grant_Copley.pdf
 
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdf
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdfITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdf
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdf
 
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdf
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdfITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdf
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdf
 
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdf
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdfITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdf
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdf
 
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdf
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdfITB_2023_Chatgpt_Box_Scott_Steinbeck.pdf
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdf
 
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdf
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdfITB_2023_CommandBox_Task_Runners_Brad_Wood.pdf
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdf
 
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdf
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdfITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdf
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdf
 
ITB2023 Developing for Performance - Denard Springle.pdf
ITB2023 Developing for Performance - Denard Springle.pdfITB2023 Developing for Performance - Denard Springle.pdf
ITB2023 Developing for Performance - Denard Springle.pdf
 

Recently uploaded

Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 

Recently uploaded (20)

Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 

ITB2016 best practices are best except when they are not

  • 1. Best Practices Are Best ...Except When They're Not Nolan Erck
  • 2. Obligatory “About Me” Stuff Chief Consultant / Owner, South Of Shasta Stuff: ColdFusion, C/C++, PHP, WordPress, Android, jQuery, Ruby, .NET, AngularJS, On-site Training, etc. SacInteractive Co-Manager Reformed video game developer Music junkie
  • 3. Today's Agenda What is a “Best Practice”? An Explanation of “Technical Debt” Sometimes I've Had to Break The Rules How To Fix Things Later Other Resources
  • 4. Questions? Ask'em! This might turn into a “round table” discussion. That's Okay. I'll “moderate” if need be.
  • 5. I run a consulting business Often includes taking over legacy projects. Can't always rebuild from scratch. Have to make decisions. Developers are paid to solve problems Does the client care how I solve it? What can I fix, given the resource constraints?
  • 6. I run a consulting business Some factors to consider: – Being able to draw a line in the sand. – Good. Cheap. Quick. ● Pick two. – The 80/20 Rule.
  • 7. I run a consulting business Make it work now and make it elegant in version 2 if need be. Don't Let Perfect Be The Enemy Of Good
  • 8. What is a “Best Practice”? Google says this: Commercial or professional procedures that are accepted or prescribed as being correct or most effective.
  • 9. What is a Best Practice? But it is still a practice The practice of medicine Because sometimes...it's wrong
  • 10. What is a Best Practice? ● Today's “Best Practice” is tomorrow's “Bad Idea”. ● Best Practices sometimes come and go quickly. ● Good Practices might be better than Best Practices sometimes.
  • 11. What is a Best Practice? Your mileage may vary – deadlines are real Client doesn't care what's recommended Just want it how they want it StackOverflow: “Well I would never do it THAT way!” Reality: sometimes you HAVE to do it THAT way
  • 12.
  • 13.
  • 14.
  • 15. What is “Technical Debt”? No project is perfect Shortcuts are sometimes inevitable Shortcuts cause “Technical Debt”
  • 16. What is “Technical Debt”? A dam has a leak. Can stick a finger in the leak. Eventually you run out of fingers. Remove the brick and replace it.
  • 17. StackOverflow: Well, I would never do it that way! These are the times that I had to do it that way.
  • 18. Some real-world bad situations
  • 19. When might you use CFML Instead of CFScript?
  • 20. When the client demands the ability to change HTML in the source code via FTP ...in Production!
  • 21. ColdFusion: When I used CFForm/CFSelect on a recent project ...and it was the right thing to do
  • 22. When an open source MVC framework wasn't the right answer and “rolling my own” framework was the correct decision
  • 23. Is emailing errors to the team always a bad idea? No.
  • 24. When the problem isn't in code So... my hands are completely tied and I have to change all of the URL strings that are passed with "Alter" in them (of which there are many) to "altr". – Poor guy on a Google forum, recently
  • 25. When the problem isn't in code Find a stakeholder, outside of IT Communicate the issue – In a non-technical way – Users have a lesser experience – Magic phrase: “Lower click-thru rate” – Magic phrase: “Lower conversion rate”
  • 26. How To Fix Things Later Bootstrap – “works” fine in table-based websites. Minor side-effects, nothing crazy. jQuery – can just “sit there” for later. LESS / SASS – to refactor old CSS.
  • 27. How To Fix Things Later Source Control. Task tracking / ticket systems. Testing tools. Tools for automating. “I don't have time”. – 30 minutes a day works wonders! Seriously.
  • 28. How To Fix Things Later Don't be afraid to ask questions Post on Google Groups, StackOverflow, whatever. Talk to people at the conference!
  • 29. How To Fix Things Later “But when I post on StackOverflow, I get yelled at for doing it wrong!” Senior Developer != Great Communicator <rant>”how to ask questions”</rant>
  • 30. Other Resources JoelOnSoftware.com Ben Nadel's blog “Secrets of the Rockstar Programmers” “Head First Java” “Head First Design Patterns” Any “Head First” books, really.
  • 31. Questions? Comments? Email: nolan@southofshasta.com Twitter: @southofshasta Blog: southofshasta.com/blog Do you need a consultant for a project? :) Thanks!
  • 32. Best Practices Are Best ...Except When They're Not Nolan Erck
  • 33. Obligatory “About Me” Stuff Chief Consultant / Owner, South Of Shasta Stuff: ColdFusion, C/C++, PHP, WordPress, Android, jQuery, Ruby, .NET, AngularJS, On-site Training, etc. SacInteractive Co-Manager Reformed video game developer Music junkie 18 years software development Chief Consultant / Owner, South Of Shasta Consulting for 7 years Teach classes. Stuff: ColdFusion, C/C++, PHP, WordPress, Android, jQuery, Ruby, .NET, AngularJS, etc. SacInteractive Co-Manager (formerly Sacramento CFUG) Reformed video game dev – Lucas, Maxis Music junkie
  • 34. Today's Agenda What is a “Best Practice”? An Explanation of “Technical Debt” Sometimes I've Had to Break The Rules How To Fix Things Later Other Resources
  • 35. Questions? Ask'em! This might turn into a “round table” discussion. That's Okay. I'll “moderate” if need be.
  • 36. I run a consulting business Often includes taking over legacy projects. Can't always rebuild from scratch. Have to make decisions. Developers are paid to solve problems Does the client care how I solve it? What can I fix, given the resource constraints?
  • 37. I run a consulting business Some factors to consider: – Being able to draw a line in the sand. – Good. Cheap. Quick. ● Pick two. – The 80/20 Rule. Being able to draw a line in the sand. A skill I struggle with. When is “good enough” truly “good enough” but won't come back to bite me (at least not SOON)?
  • 38. I run a consulting business Make it work now and make it elegant in version 2 if need be. Don't Let Perfect Be The Enemy Of Good
  • 39. What is a “Best Practice”? Google says this: Commercial or professional procedures that are accepted or prescribed as being correct or most effective.
  • 40. What is a Best Practice? But it is still a practice The practice of medicine Because sometimes...it's wrong
  • 41. What is a Best Practice? ● Today's “Best Practice” is tomorrow's “Bad Idea”. ● Best Practices sometimes come and go quickly. ● Good Practices might be better than Best Practices sometimes.
  • 42. What is a Best Practice? Your mileage may vary – deadlines are real Client doesn't care what's recommended Just want it how they want it StackOverflow: “Well I would never do it THAT way!” Reality: sometimes you HAVE to do it THAT way
  • 43.
  • 44.
  • 45.
  • 46. What is “Technical Debt”? No project is perfect Shortcuts are sometimes inevitable Shortcuts cause “Technical Debt” Working on a project, come across a bug/change you need to make. The “best practice” might involve adding a “big chunk” of code (relatively speaking). (i.e. updating to a new version of a 3rd party library, making reconfiguring how some old functions work, maybe all of the above.) The deadline is approaching, or the client is getting antsy (same thing). So you throw a “short cut” into the code – maybe hack a “global” variable or 2 into the code to get it DONE now. Short term: that might work fine. Longer term: you've incurred some “technical debt” into the application. Taking a “loan” out at the bank; eventually that loan has to be paid back.
  • 47. What is “Technical Debt”? A dam has a leak. Can stick a finger in the leak. Eventually you run out of fingers. Remove the brick and replace it. If a dam springs a leak, we can a) stick our finger in the hole (quick) – technical debt you eventually run out of fingers! b) remove the offending brick, rebuild a better, stronger one. Might take more time, but is better long-term decision.
  • 48. StackOverflow: Well, I would never do it that way! These are the times that I had to do it that way.
  • 49. Some real-world bad situations Stuff happens. The following are true stories from different projects I've worked on. In which the “best practice” wasn't a viable option.
  • 50. When might you use CFML Instead of CFScript? Site was under source control (good). Client knew how to hand edit small bits of HTML (links, bold, underline, new paragraphs of verbiage, etc). Did not want to change his work flow. Refused. This is the guy signing the checks and approving my budgets. You can't always just say “no, that's not a best practice”. Solution: installed Git on the server. Created a link that ran a BAT file, doing a “git commit” for recent changes. Could run this script periodically on Production. Or client could run it to let me know he was finished changing things (i.e. just click this link when you're done making edits.) Yes, we are changing code on Production. No I'm not happy about it. And neither are the StackOverflows. ...but the guy approving the budgets was. (and everything got added to source control...eventually) Longer term: he needed a WYSIWYG and some changes to the app, but this worked for now, and we finished the app!
  • 51. When the client demands the ability to change HTML in the source code via FTP ...in Production! Site was under source control (good). Client knew how to hand edit small bits of HTML (links, bold, underline, new paragraphs of verbiage, etc). Did not want to change his work flow. Refused. This is the guy signing the checks and approving my budgets. You can't always just say “no, that's not a best practice”. Solution: installed Git on the server. Created a link that ran a BAT file, doing a “git commit” for recent changes. Could run this script periodically on Production. Or client could run it to let me know he was finished changing things (i.e. just click this link when you're done making edits.) Yes, we are changing code on Production. No I'm not happy about it. And neither are the StackOverflows. ...but the guy approving the budgets was. (and everything got added to source control...eventually) Longer term: he needed a WYSIWYG and some changes to the app, but this worked for now, and we finished the app!
  • 52. ColdFusion: When I used CFForm/CFSelect on a recent project ...and it was the right thing to do US Post office when you’ve got 2 DAYS to train 3 NON-developers on how to maintain a ColdFusion applicaiton already in place….taht’s already using CFForm, CFSelect etc. They had ZERO coding experience But Dreamweaver made sense and “clicked” for them. Is it REALLY the best solution to try and teach them OO and Model-Glue in a position like that? Probably not.
  • 53. When an open source MVC framework wasn't the right answer and “rolling my own” framework was the correct decision Large scale web app for the semi-conductor industry. Had quickly approaching deadlines (conf's and client demos). Leadership gave me a budget for 3 junior developers (I “inherited” the team.) 2 junior web guys 1 retired Fortran / Assembly developer ...but they all knew what XML was and how it worked. Teaching 3 people OO + MVC + Mach-ii would have taken lots of time. Instead, we wrote a DSL in XML. The junior devs could help “describe” the different pieces of the app in XML and tell me what they needed the language to do. I wrote the DSL “engine” (which actually was OO, just not at the level the junior dev's cared about.)
  • 54. Is emailing errors to the team always a bad idea? No. Fusion. Non-technical clients NO idea what happens on their server Showing them a bar graph of “bad IIS requests per hour that hit the ColdFusion connector via HTTP” (or some such thing) wouldn’t have added any VALUE to the team But the team lives and dies by email. So we set up a simple onError() that emailed myself (IT) and 2 others on the leadership team. Short term -- immediately increased IT budget to get the server under better control (it was throwing a LOT of errors and getting more traffic than they realized). Longer term -- the non-techie guys (that were in charge of the MONEY) started thinking about forward planning, and maybe it was time to rebuild these apps so the code was fresher, had better browser/mobile support etc.
  • 55. When the problem isn't in code So... my hands are completely tied and I have to change all of the URL strings that are passed with "Alter" in them (of which there are many) to "altr". – Poor guy on a Google forum, recently
  • 56. When the problem isn't in code Find a stakeholder, outside of IT Communicate the issue – In a non-technical way – Users have a lesser experience – Magic phrase: “Lower click-thru rate” – Magic phrase: “Lower conversion rate”
  • 57. How To Fix Things Later Bootstrap – “works” fine in table-based websites. Minor side-effects, nothing crazy. jQuery – can just “sit there” for later. LESS / SASS – to refactor old CSS.
  • 58. How To Fix Things Later Source Control. Task tracking / ticket systems. Testing tools. Tools for automating. “I don't have time”. – 30 minutes a day works wonders! Seriously. Source Control (Subversion, Git, PerfForce, Team Foundation Server, etc) Don't let the Git people fool you – any of them will work.) Task tracking / ticket systems Great places to store “todo” lists for later so everyone on the project can see. Jira, Lighthouse, anything that's NOT “just sending email” Unit Tests ...and any other testing (framework) that you can use. Tools for automating parts of the build process. Grunt, Maven, Ant, whatever. Don't have to learn them all at once. Pick 1 thing you don't know and try it out. Make a “pet project” outside of work so you have something fun to expiriment with. “I don't have time” – 30 minutes a day works wonders! Seriously.
  • 59. How To Fix Things Later Don't be afraid to ask questions Post on Google Groups, StackOverflow, whatever. Talk to people at the conference! Don't Be Afraid to Ask Questions Post on Google Groups, StackOverflow, whatever. Talk to people at the conference! Client: brought in to do “pair programming”. He'd worked there for 15 years, wrote most of their CF code, but done so by himself mostly. Hadn't used OO/MVC at all, but at least knew of Ben Nadel's blog. :) Semi Rant: these “how to ask smart questions” posts on Google Groups...take them with a grain of salt. Authors, please work on wording these in non- snarky tones.
  • 60. How To Fix Things Later “But when I post on StackOverflow, I get yelled at for doing it wrong!” Senior Developer != Great Communicator <rant>”how to ask questions”</rant> But sometimes when I post on StackOverflow I get yelled at for doing it wrong! That's THEIR problem (the yeller) not yours. Everybody makes mistakes, even THAT guy. A Senior Developer != A Great Communicator. Don't be afraid of doing things wrong. That's how we learn.
  • 61. Other Resources JoelOnSoftware.com Ben Nadel's blog “Secrets of the Rockstar Programmers” “Head First Java” “Head First Design Patterns” Any “Head First” books, really. JoelOnSoftware.com (his books too) Book: Secrets of the Rockstar Programmers BenNadel.com – for CF and JS stuff, asking questions that get a polite, professional response. (Seriously, Ben is the nicest guy ever.) “Head First Java” Even if you're NOT a Java developer. Or if you're already a 'senior' developer. Read it anyway. Learn new, clear, different ways of explaining what code does to non-developers (or just people other than yourself that have a different brain than you do, and approach problems differently). Pretty much any “Head First” book for that matter. “Head First Design Patterns” – Same idea, but for higher level OO concepts. Super easy ways to explain OO designs to non OO folks. I use this book when I teach any intermediate/advanced OO class. It works wonders!
  • 62. Questions? Comments? Email: nolan@southofshasta.com Twitter: @southofshasta Blog: southofshasta.com/blog Do you need a consultant for a project? :) Thanks!