SlideShare una empresa de Scribd logo
1 de 50
Descargar para leer sin conexión
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.find_by_contents(@phrase, :columns =>
['first_name', 'last_name', 'business_name',
'email_address', 'phone1'], :include => { :contacts
=> :customer }, :limit => 50).collect { |person|
person.contacts.collect { |contact|
contact.customer } }.flatten
{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

Más contenido relacionado

Similar a 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
 
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
 

Similar a 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
 

Último

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (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
 
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
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
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
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
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
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
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
 
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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 

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.find_by_contents(@phrase, :columns => ['first_name', 'last_name', 'business_name', 'email_address', 'phone1'], :include => { :contacts => :customer }, :limit => 50).collect { |person| person.contacts.collect { |contact| contact.customer } }.flatten
  • 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