SlideShare ist ein Scribd-Unternehmen logo
1 von 50
Downloaden Sie, um offline zu lesen
YOU CAN’T
MISS WHAT
YOU CAN’T
 MEASURE
Y’uh can’ git the’uh fruhm he’uh

  [You can’t get there from here]
RED ➭ GREEN ➭ REFACTOR
1. Denial
2. Anger
3. Bargaining
4. Depression
5. Acceptance
1. Depression
2. Bargaining
3. Anger
4. Acceptance
5. Denial
@customers =
Person.ïŹnd_by_contents(@phrase, :columns =>
['ïŹrst_name', 'last_name', 'business_name',
'email_address', 'phone1'], :include => { :contacts
=> :customer }, :limit => 50).collect { |person|
person.contacts.collect { |contact|
contact.customer } }.ïŹ‚atten
{10:51}[1.9.3]~/project:master ✓ ➭ git blame app/controllers/customers_...
    ...
  cf2ee204 (Kerri Miller    2012-02-18 12:09:22 -0700 36)
TEST COVERAGE
TEST COVERAGE
C0 — % of lines of code that have been executed

C1 — % of branches that have been followed at least
once

C2 — % of unique paths through the source code that
have been followed
LINES OF CODE
LINES OF CODE
{20:32}[1.9.3]~/project:master ✓ ➭ rake stats

+----------------------+-------+-------+---------+---------+-----+-------+
| Name                 | Lines |    LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers          | 2297 | 1566 |          18 |     106 |   5 |   12 |
| Helpers              |   177 |    137 |        0 |      18 |   0 |    5 |
| Models               | 3948 | 2522 |          35 |     272 |   7 |    7 |
| Libraries            |   164 |     92 |        4 |      12 |   3 |    5 |
| Model specs          | 2863 | 2143 |           1 |       2 |   2 | 1069 |
| View specs           |     5 |      3 |        0 |       0 |   0 |    0 |
| Controller specs     | 4283 | 3632 |           0 |       0 |   0 |    0 |
| Helper specs         |   152 |    108 |        0 |       0 |   0 |    0 |
| Library specs        |    51 |     36 |        0 |       0 |   0 |    0 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total                | 13940 | 10239 |        58 |     410 |   7 |   22 |
+----------------------+-------+-------+---------+---------+-----+-------+
  Code LOC: 4317     Test LOC: 5922       Code to Test Ratio: 1:1.4
STATIC vs DYNAMIC
"Data is easy.
Information is hard."
               -Dr Ying Li
COMPLEXITY
CYCLOMATIC
lin·e·ar·li
ASSIGNMENTS
BRANCHES
CONDITIONALS
FLOG
class Test
  def blah        
    a = eval "1+1"   # 1.2 (a=) + 6.0 (eval)
    if a == 2 then   # 1.2 (if) + 1.2(==) + 0.4 (fixnum)
      puts "yay"     # 1.2 (puts)
    end
  end
end                  # 11.2 total
‱ Extract Method
‱ Decompose Objects
‱ Rethink your domain model
CHURN
app/models/user.rb = 84

app/models/invoice.rb = 88
Wonderland Trail

Length:
47.2 miles
Wonderland Trail

Length:
47.2 miles
app/models/user.rb = 84

app/models/invoice.rb = 88
{10:54}[1.9.3]~/project:master ✓ ➭ git blame app/models/subscription.rb
    ...
  c9ce82b4 (Kerri Miller    2012-05-18 10:19:47 -0700
{20:32}[1.9.3]~/project:master ✓ ➭ flog -a app/models/subscription.rb
   1609.9: flog total
    61.9: flog/method average

   408.8:   Subscription#update                app/models/subscription.rb:472
   323.2:   Subscription#new                   app/models/subscription.rb:250
   252.0:   Subscription#reply                 app/models/subscription.rb:137
   230.5:   Subscription::send_notifications   app/models/subscription.rb:78
    33.6:   Subscription#none
    25.5:   Subscription#can_expire?           app/models/subscription.rb:155
    11.7:   Subscription::reject_no_ack        app/models/subscription.rb:205
     4.8:   Subscription#initialize            app/models/subscription.rb:64
     4.4:   Subscription#expire!               app/models/subscription.rb:183
     3.7:   Subscription#unexpire!             app/models/subscription.rb:194
     3.4:   Subscription#reason_text           app/models/subscription.rb:172
     2.2:   Subscription#is_current?           app/models/subscription.rb:178
     2.0:   Subscription#to_s                  app/models/subscription.rb:71
{20:33}[1.9.3]~/project:master ✓ ➭ flog -d app/models/subscription.rb
   321.7: flog total
    32.2: flog/method average

   230.5: Subscription::send_notifications app/models/subscription.rb:78
    47.8:   branch
    31.7:   ticket
    23.1:   assignment
    17.9:   user
    17.6:   []
    12.2:   empty?
     9.8:   support_queue
     8.1:   deliver
     8.0:   class
     7.6:   email_address
     7.0:   ==
{08:16}[1.9.3]~/project:master ✓ ➭ flog -a app/models/subscription.rb

    52.8:   Subscription::send_notifications app/models/subscription.rb:80
    28.8:   Subscription#none
    25.5:   Subscription#can_expire?         app/models/subscription.rb:119
    10.2:   Subscription::set_mail_options   app/models/subscription.rb:221
     9.8:   Subscription::email_staff        app/models/subscription.rb:268
     8.5:   Subscription::filter_subscriptions app/models/subscription.rb:17
     7.9:   Subscription::email_reviewers    app/models/subscription.rb:258
     7.3:   Subscription::email_subscribers app/models/subscription.rb:169
     6.3:   Subscription::subscriber_emails app/models/subscription.rb:204
     5.0:   Subscription::log_rate_limited   app/models/subscription.rb:239
     4.8:   Subscription#initialize          app/models/subscription.rb:65
     4.7:   Subscription::extract_email_addresses app/models/subscription.rb
     4.6:   Subscription::filter_rate_limited app/models/subscription.rb:248
     4.4:   Subscription#expire!             app/models/subscription.rb:147
     4.0:   Subscription::wants_notifications_on_own_posts? app/models/subsc
     3.7:   Subscription#unexpire!           app/models/subscription.rb:158
     3.4:   Subscription#reason_text         app/models/subscription.rb:136
     3.2:   Subscription::valid_recipient?   app/models/subscription.rb:187
     2.4:   Subscription::ok_to_email?       app/models/subscription.rb:183
     2.2:   Subscription#is_current?         app/models/subscription.rb:142
     2.0:   Subscription#to_s                app/models/subscription.rb:73
     1.5:   Subscription::find_reviewers     app/models/subscription.rb:254
     1.4:   Subscription::mail_subject       app/models/subscription.rb:217
{08:43}[1.9.3]~/project:master ✓ ➭ flog -a app/models/subscription.rb

    27.9:   Subscription#none
    25.5:   Subscription#can_expire?         app/models/subscription.rb:78
     4.8:   Subscription#initialize          app/models/subscription.rb:65
     4.4:   Subscription#expire!             app/models/subscription.rb:106
     3.7:   Subscription#unexpire!           app/models/subscription.rb:117
     3.4:   Subscription#reason_text         app/models/subscription.rb:95
     2.2:   Subscription#is_current?         app/models/subscription.rb:101
     2.0:   Subscription#to_s                app/models/subscription.rb:73

{08:43}[1.9.3]~/project:master ✓ ➭ flog -a app/models/subscriber_notifier.rb
   136.6: flog total
     8.5: flog/method average

    54.1:   SubscriberNotifier::send_notifications app/models/subscriber_notif
    12.0:   SubscriberNotifier::email_subscribers app/models/subscriber_notifi
    10.2:   SubscriberNotifier::set_mail_options app/models/subscriber_notifie
     9.8:   SubscriberNotifier::email_staff app/models/subscriber_notifier.rb
     8.5:   SubscriberNotifier::filter_subscriptions app/models/subscriber_not
     7.9:   SubscriberNotifier::email_reviewers app/models/subscriber_notifier
     6.3:   SubscriberNotifier::subscriber_emails app/models/subscriber_notifi
     5.0:   SubscriberNotifier::log_rate_limited app/models/subscriber_notifie
     4.7:   SubscriberNotifier::extract_email_addresses app/models/subscriber_
     4.6:   SubscriberNotifier::filter_rate_limited app/models/subscriber_noti
     4.0:   SubscriberNotifier::wants_notifications_on_own_posts? app/models/s
     3.2:   SubscriberNotifier::valid_recipient? app/models/subscriber_notifie
     2.4:   SubscriberNotifier::ok_to_email? app/models/subscriber_notifier.rb
> gem install flay
BEST PRACTICES & STYLE
rails_best_practices
reek
roodi
pelusa
cane
THANKS!
★ @kerrizor

★ glass artist

★ vespa mechanic

★ lighting designer

★ professional poker player

★ Senior Developer @ Amazon,
  Contour.com, Blue Box Group

Weitere Àhnliche Inhalte

Ähnlich wie You Can't Miss What You Can't Measure

Overcoming (organizational) scalability issues in your Prometheus ecosystem
Overcoming (organizational) scalability issues in your Prometheus ecosystemOvercoming (organizational) scalability issues in your Prometheus ecosystem
Overcoming (organizational) scalability issues in your Prometheus ecosystem
QAware GmbH
 
Code Quality Analysis
Code Quality AnalysisCode Quality Analysis
Code Quality Analysis
martin_j_andrews
 
BOOKS FOR CASH ON DELIVERY-INTERNSHIP PROJECT
BOOKS FOR CASH ON DELIVERY-INTERNSHIP PROJECTBOOKS FOR CASH ON DELIVERY-INTERNSHIP PROJECT
BOOKS FOR CASH ON DELIVERY-INTERNSHIP PROJECT
Ravi Teja P
 

Ähnlich wie You Can't Miss What You Can't Measure (20)

Performance testingfromthecloud_usingBlazemeter
Performance testingfromthecloud_usingBlazemeterPerformance testingfromthecloud_usingBlazemeter
Performance testingfromthecloud_usingBlazemeter
 
Bug Tracking System
Bug Tracking SystemBug Tracking System
Bug Tracking System
 
Business Utility Application
Business Utility ApplicationBusiness Utility Application
Business Utility Application
 
Overcoming scalability issues in your prometheus ecosystem
Overcoming scalability issues in your prometheus ecosystemOvercoming scalability issues in your prometheus ecosystem
Overcoming scalability issues in your prometheus ecosystem
 
Sample report
Sample reportSample report
Sample report
 
Online notice board
Online notice boardOnline notice board
Online notice board
 
IRJET - Notification Blockerbased on Location
IRJET - Notification Blockerbased on LocationIRJET - Notification Blockerbased on Location
IRJET - Notification Blockerbased on Location
 
IRJET- A Review on Bug Tracking System
IRJET- A Review on Bug Tracking SystemIRJET- A Review on Bug Tracking System
IRJET- A Review on Bug Tracking System
 
LunchBox:- A Web And Mobile Application
LunchBox:- A Web And Mobile ApplicationLunchBox:- A Web And Mobile Application
LunchBox:- A Web And Mobile Application
 
267_20230812_ClubServicenow_License_Subscription.pdf
267_20230812_ClubServicenow_License_Subscription.pdf267_20230812_ClubServicenow_License_Subscription.pdf
267_20230812_ClubServicenow_License_Subscription.pdf
 
Overcoming (organizational) scalability issues in your Prometheus ecosystem
Overcoming (organizational) scalability issues in your Prometheus ecosystemOvercoming (organizational) scalability issues in your Prometheus ecosystem
Overcoming (organizational) scalability issues in your Prometheus ecosystem
 
MSSQL Queries.pdf
MSSQL Queries.pdfMSSQL Queries.pdf
MSSQL Queries.pdf
 
6 tips for improving ruby performance
6 tips for improving ruby performance6 tips for improving ruby performance
6 tips for improving ruby performance
 
A Survey on Design of Online Judge System
A Survey on Design of Online Judge SystemA Survey on Design of Online Judge System
A Survey on Design of Online Judge System
 
Code Quality Analysis
Code Quality AnalysisCode Quality Analysis
Code Quality Analysis
 
BOOKS FOR CASH ON DELIVERY-INTERNSHIP PROJECT
BOOKS FOR CASH ON DELIVERY-INTERNSHIP PROJECTBOOKS FOR CASH ON DELIVERY-INTERNSHIP PROJECT
BOOKS FOR CASH ON DELIVERY-INTERNSHIP PROJECT
 
client-server-computing.pdf
client-server-computing.pdfclient-server-computing.pdf
client-server-computing.pdf
 
Online Examination System Project report
Online Examination System Project report Online Examination System Project report
Online Examination System Project report
 
IRJET- Research Study on Testing Mantle in SDLC
IRJET- Research Study on Testing Mantle in SDLCIRJET- Research Study on Testing Mantle in SDLC
IRJET- Research Study on Testing Mantle in SDLC
 
IRJET- Detecting Performance of Clouds by Uploading Applications
IRJET- Detecting Performance of Clouds by Uploading ApplicationsIRJET- Detecting Performance of Clouds by Uploading Applications
IRJET- Detecting Performance of Clouds by Uploading Applications
 

KĂŒrzlich hochgeladen

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
Enterprise Knowledge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
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
Earley Information Science
 

KĂŒrzlich hochgeladen (20)

08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
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 🐘
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
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
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
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
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
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
 
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...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
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
 
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
 
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
 

You Can't Miss What You Can't Measure

  • 1. YOU CAN’T MISS WHAT YOU CAN’T MEASURE
  • 2.
  • 3. Y’uh can’ git the’uh fruhm he’uh [You can’t get there from here]
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11. RED ➭ GREEN ➭ REFACTOR
  • 12.
  • 13. 1. Denial 2. Anger 3. Bargaining 4. Depression 5. Acceptance
  • 14. 1. Depression 2. Bargaining 3. Anger 4. Acceptance 5. Denial
  • 15.
  • 16. @customers = Person.ïŹnd_by_contents(@phrase, :columns => ['ïŹrst_name', 'last_name', 'business_name', 'email_address', 'phone1'], :include => { :contacts => :customer }, :limit => 50).collect { |person| person.contacts.collect { |contact| contact.customer } }.ïŹ‚atten
  • 17. {10:51}[1.9.3]~/project:master ✓ ➭ git blame app/controllers/customers_... ... cf2ee204 (Kerri Miller 2012-02-18 12:09:22 -0700 36)
  • 18.
  • 20. TEST COVERAGE C0 — % of lines of code that have been executed C1 — % of branches that have been followed at least once C2 — % of unique paths through the source code that have been followed
  • 21.
  • 23. LINES OF CODE {20:32}[1.9.3]~/project:master ✓ ➭ rake stats +----------------------+-------+-------+---------+---------+-----+-------+ | Name | Lines | LOC | Classes | Methods | M/C | LOC/M | +----------------------+-------+-------+---------+---------+-----+-------+ | Controllers | 2297 | 1566 | 18 | 106 | 5 | 12 | | Helpers | 177 | 137 | 0 | 18 | 0 | 5 | | Models | 3948 | 2522 | 35 | 272 | 7 | 7 | | Libraries | 164 | 92 | 4 | 12 | 3 | 5 | | Model specs | 2863 | 2143 | 1 | 2 | 2 | 1069 | | View specs | 5 | 3 | 0 | 0 | 0 | 0 | | Controller specs | 4283 | 3632 | 0 | 0 | 0 | 0 | | Helper specs | 152 | 108 | 0 | 0 | 0 | 0 | | Library specs | 51 | 36 | 0 | 0 | 0 | 0 | +----------------------+-------+-------+---------+---------+-----+-------+ | Total | 13940 | 10239 | 58 | 410 | 7 | 22 | +----------------------+-------+-------+---------+---------+-----+-------+ Code LOC: 4317 Test LOC: 5922 Code to Test Ratio: 1:1.4
  • 25. "Data is easy. Information is hard." -Dr Ying Li
  • 30. FLOG class Test   def blah             a = eval "1+1" # 1.2 (a=) + 6.0 (eval)     if a == 2 then # 1.2 (if) + 1.2(==) + 0.4 (fixnum)       puts "yay"   # 1.2 (puts)     end   end end # 11.2 total
  • 31. ‱ Extract Method ‱ Decompose Objects ‱ Rethink your domain model
  • 32. CHURN
  • 37.
  • 38.
  • 39.
  • 40. {10:54}[1.9.3]~/project:master ✓ ➭ git blame app/models/subscription.rb ... c9ce82b4 (Kerri Miller 2012-05-18 10:19:47 -0700
  • 41. {20:32}[1.9.3]~/project:master ✓ ➭ flog -a app/models/subscription.rb 1609.9: flog total 61.9: flog/method average 408.8: Subscription#update app/models/subscription.rb:472 323.2: Subscription#new app/models/subscription.rb:250 252.0: Subscription#reply app/models/subscription.rb:137 230.5: Subscription::send_notifications app/models/subscription.rb:78 33.6: Subscription#none 25.5: Subscription#can_expire? app/models/subscription.rb:155 11.7: Subscription::reject_no_ack app/models/subscription.rb:205 4.8: Subscription#initialize app/models/subscription.rb:64 4.4: Subscription#expire! app/models/subscription.rb:183 3.7: Subscription#unexpire! app/models/subscription.rb:194 3.4: Subscription#reason_text app/models/subscription.rb:172 2.2: Subscription#is_current? app/models/subscription.rb:178 2.0: Subscription#to_s app/models/subscription.rb:71
  • 42. {20:33}[1.9.3]~/project:master ✓ ➭ flog -d app/models/subscription.rb 321.7: flog total 32.2: flog/method average 230.5: Subscription::send_notifications app/models/subscription.rb:78 47.8: branch 31.7: ticket 23.1: assignment 17.9: user 17.6: [] 12.2: empty? 9.8: support_queue 8.1: deliver 8.0: class 7.6: email_address 7.0: ==
  • 43. {08:16}[1.9.3]~/project:master ✓ ➭ flog -a app/models/subscription.rb 52.8: Subscription::send_notifications app/models/subscription.rb:80 28.8: Subscription#none 25.5: Subscription#can_expire? app/models/subscription.rb:119 10.2: Subscription::set_mail_options app/models/subscription.rb:221 9.8: Subscription::email_staff app/models/subscription.rb:268 8.5: Subscription::filter_subscriptions app/models/subscription.rb:17 7.9: Subscription::email_reviewers app/models/subscription.rb:258 7.3: Subscription::email_subscribers app/models/subscription.rb:169 6.3: Subscription::subscriber_emails app/models/subscription.rb:204 5.0: Subscription::log_rate_limited app/models/subscription.rb:239 4.8: Subscription#initialize app/models/subscription.rb:65 4.7: Subscription::extract_email_addresses app/models/subscription.rb 4.6: Subscription::filter_rate_limited app/models/subscription.rb:248 4.4: Subscription#expire! app/models/subscription.rb:147 4.0: Subscription::wants_notifications_on_own_posts? app/models/subsc 3.7: Subscription#unexpire! app/models/subscription.rb:158 3.4: Subscription#reason_text app/models/subscription.rb:136 3.2: Subscription::valid_recipient? app/models/subscription.rb:187 2.4: Subscription::ok_to_email? app/models/subscription.rb:183 2.2: Subscription#is_current? app/models/subscription.rb:142 2.0: Subscription#to_s app/models/subscription.rb:73 1.5: Subscription::find_reviewers app/models/subscription.rb:254 1.4: Subscription::mail_subject app/models/subscription.rb:217
  • 44. {08:43}[1.9.3]~/project:master ✓ ➭ flog -a app/models/subscription.rb 27.9: Subscription#none 25.5: Subscription#can_expire? app/models/subscription.rb:78 4.8: Subscription#initialize app/models/subscription.rb:65 4.4: Subscription#expire! app/models/subscription.rb:106 3.7: Subscription#unexpire! app/models/subscription.rb:117 3.4: Subscription#reason_text app/models/subscription.rb:95 2.2: Subscription#is_current? app/models/subscription.rb:101 2.0: Subscription#to_s app/models/subscription.rb:73 {08:43}[1.9.3]~/project:master ✓ ➭ flog -a app/models/subscriber_notifier.rb 136.6: flog total 8.5: flog/method average 54.1: SubscriberNotifier::send_notifications app/models/subscriber_notif 12.0: SubscriberNotifier::email_subscribers app/models/subscriber_notifi 10.2: SubscriberNotifier::set_mail_options app/models/subscriber_notifie 9.8: SubscriberNotifier::email_staff app/models/subscriber_notifier.rb 8.5: SubscriberNotifier::filter_subscriptions app/models/subscriber_not 7.9: SubscriberNotifier::email_reviewers app/models/subscriber_notifier 6.3: SubscriberNotifier::subscriber_emails app/models/subscriber_notifi 5.0: SubscriberNotifier::log_rate_limited app/models/subscriber_notifie 4.7: SubscriberNotifier::extract_email_addresses app/models/subscriber_ 4.6: SubscriberNotifier::filter_rate_limited app/models/subscriber_noti 4.0: SubscriberNotifier::wants_notifications_on_own_posts? app/models/s 3.2: SubscriberNotifier::valid_recipient? app/models/subscriber_notifie 2.4: SubscriberNotifier::ok_to_email? app/models/subscriber_notifier.rb
  • 45.
  • 47. BEST PRACTICES & STYLE rails_best_practices reek roodi pelusa cane
  • 48.
  • 49.
  • 50. THANKS! ★ @kerrizor ★ glass artist ★ vespa mechanic ★ lighting designer ★ professional poker player ★ Senior Developer @ Amazon, Contour.com, Blue Box Group