Updates from kmitov Toggle Comment Threads | Keyboard Shortcuts

  • kmitov 6:48 am on August 12, 2019 Permalink |
    Tags: , , ,   

    ‘if-else’ is Forbidden – why and how to reduce logic branching in your code. 

    Each time there is an if-else logic in your code there is some logic branching. A state is checked and based on the result from the check different path are taken. This means that two scenarios are implemented and two scenarios should be support from now on. This could quickly become a problem because the number of supported cases grows exponentially.

    The more decisions you make in the code the more cases you must support.

    At the end you start from Process1 but you have 4 different cases and path that you should support. These are 4 different tests that should be written and these are for different places where things could go wrong.

    The four different paths are Process 1,2,4; 1,2,5; 1,3,6; 1,3,7

    Demonstration of a live example and a real production bug

    We have Subscriptions in the platform. Each subscription has a max_users field that shows how many users you could add to this subscription. If max_users=1 this means you can have only one user using the subscription.

    When adding people to the subscription you have two cases

    1. You successfully add someone to the subscription and you show a message “Success”
    2. The max users is reached and you show a message “Error”

    The code in a simplified manner looks something like this:

    if subscription.save 
       form.show_message "Success"
    else 
       form.show_message "Error"

    While developing we’ve changed the code for the error from form.show_message “Error” to modal_dialog.show_message “Error”

    After that we’ve changed the implementation further and the code for modal_dialog.show_message “Error” was no longed called.

    As a result when the use tries to add someone to his subscription, for which they’ve payed, the app freezes and nothing happens. There is no error displayed and no user is added to the subscription.

    The bug occurred because with the latest changes we’ve forgot to manually check the second case of the if-else clause and there is was not test developed for this case.

    How to remove the if-else clause from this code

    subscription.save
    message = subscription.get_save_message
    form.show_message message

    The subscription.save knows what message to set based on whether the subscription was successfully saved. It could set Error or it could set Success. After that we just show whatever message the subscription has to the form. If it is empty that’s great. This means no errors have occurred. subscriptions.get_save_message could be implemented in many different ways. It could be on the subscription object or another object, but this depends on the technology and framework used. But after the method save is called the message is set and there is a single flow and now branches in our code. The method form.show_message is called a single time on a single place in our code. If we change the API of this method we would change in a single place and will not forget about the second place. There is always a single scenario. Save->Show message.




     
  • kmitov 7:06 am on January 22, 2019 Permalink |
    Tags: cache, ,   

    Implementation of Multi-levels caching. Example for Rails 

    There are two difficult things in Computer Science. Choosing a name for a variable and cache invalidation.

    That being said I went on a journey to implement multi-levels caching in one of our platforms. Cache should be fast. Fast cache is expensive. If you can use 1M of very fast and expensive cache, why not implement a second level cache that is 10M, not that fast and not that expensive and 100M of normal cache that is cheap, but still faster than going to db.

    TL;DR;

    I decided to implement a DbCache that will store cached html rendered values directly in db and will access them from the DB instead of the fast Redis/Memcachier cache. All in the name of saving a few dollars on expensive fast cache that I do not really need.

    <% cache(cache_key) do # this is the redis cache %>
      <%= db_cache(cache_key) do # this is the db cache %>
        <% # actual calculation of value %>
      <% end %>
    <% end %>

    Implementation

    There is no need to constantly render the html/json of the content that we would like to serve to the client. It could be rendered once and served until updated. We are using Memcachier for a very fast access to cached values, but it is costing us more money. And in many cases we do not need this fast access.

    That’s why there is a DbCache implementation

    It works in the following way. It has a key and a value.

    When using in the view you can use

     <% cache(cache_key) do %>
       <%= db_cache(cache_key) do %>
       <% end %>
     <% end %>

    In this way if something is in cache we take it. This is L1 cache if you like. If it is not in L1 cache (that is stored in memory) than we ask db_cache. db_cache is our second level cache – L2. If the value is not in db_cache then we render it. The principle could be applied for L3 cache, although we are not there yet as a platform to need L3 cache.

    But it is db_cache. It is accessing the db. Why do you even call it cache?

    When the db_cache is accessed we make a single query to the db and retrieve a single record. For an indexed, not very large table this is fast. If the value is to be rendered again it will mean making a few more request for different objects and their associations and moving through all the trouble of rendering it again which involves views. By retrieving the HTML/JSON directly from DB we could directly serve it.

    How is db_cache implemented?

    DbCache model that stores the values in the db. It has a key and value columns. That’s it. Creating/retrieving/updating DbCache records is what is interesting.

    The key is column in the DB that is an integer. NOT a string. This integer is generated with a hash function and is than shifted right. The postgres db has a signed int column and the hash is generating an unsigned int. We have to shift because there is not enough space for storing unsigned int in a postgres db. In this way the cache key given from the developer is transformed to an internal key that is used for finding the record. And there of course is an index on this hash64 column.

    def db_cache key, &block
      # This will give us a 64 bit hash
      # Shift the value to reduce it because the column is signed and there is no room for
      # an unsigned value
      internal_key = Digest::XXH64.hexdigest(key).to_i(16) >> 1
    
      db_cache = DbCache.find_by(hash64: internal_key)
    
      ...
    end

    How are keys expired?

    If a key has expired we must create a new record for this key. Expiring keys could be difficult. Every record has an updated_at value. Every day a job on the db is run and if the updated_at value is more than specific days old it is automatically expired. This controls the number of records in the DB. I am kind of interested in storing only records that are regularly accessed. I think that if a page was not accessed in a couple of days, you generally do not need a cached value for it.

    This opens the next question:

    How are keys marked not to expire? If we change the accessed_at for a record on every read that will be slow because of a write to accessed_at

    True. It is important to expire old keys, but it is also important not to touch records on every read request because this will be very slow. If we make a touch on every request to the cache this will involve an update that will slow down the method. So an update is happening only once a day. See the db_cache.touch call below. The record could be accessed thousands of times today but there will be only one write to update the updated_at value. To touch the record.

    def db_cache key, &block
    
      internal_key = Digest::XXH64.hexdigest(key).to_i(16) >> 1
    
      db_cache = DbCache.find_by(hash64: internal_key)
      if db_cache.nil?
        # create cache value
      else
        db_cache.touch if db_cache.updated_at < Time.now - 1.day
      end
    
      ...
    end

    How fast is DbCache?

    These are just referenced values and of course this depends on the size of your cached values and the db and the load. In our specific case on Heroku we’ve found that the DbCache generally retrieves values in the range of 2 to 8 ms. In comparison the very fast Memcachier does this in the range of 2 to 8 ms.

    We also used NewRelic to look at the performance that end users are experiencing. And there was a large improvement because we could cache hundreds of MB of records in DB compared to the few MB for Memcachier that we are paying for.

    Rails specific details

    Since this code has to live in our platform and it is also bound to use some other rails object there are a few things more that I’ve done. Here is the full code that I hope gives a complete picture.

    # Author::    Kiril Mitov  
    # Copyright:: Copyright (c) 2018 Robopartans Group
    # License::   MIT
    module DbCacheHelper
    
      def db_cache key, &block
        # puts "db_cache: key: #{key}"
        result = nil
        if controller.respond_to?(:perform_caching) && controller.perform_caching
    
          # This will give us a 64 bit hash
          # Shift the value to reduce it because the column is signed and there is now room for
          # un unsigned value
          internal_key = Digest::XXH64.hexdigest(key).to_i(16) >> 1
    
          db_cache = DbCache.find_by(hash64: internal_key)
          if db_cache.nil?
            # puts "DBCache Miss: #{key}, #{internal_key}"
            Rails.logger.info "DBCache Miss: #{key}, #{internal_key}"
    
            content = capture(&block)
    
            # Use a rescue. This will make sure that if
            # a race condition occurs between the check for
            # existence of the db_cache and the actuall write
            # we will still be able to find the key.
            # This happens when two or more people access the site at exactly the
            # same time.
            begin
              # puts "DBCache: Trying to create"
              # puts "DBCache Count before find or create: #{DbCache.count}"
              db_cache = DbCache.find_or_create_by(hash64: internal_key)
              # puts "DBCache Count after find or create: #{DbCache.count}"
              # puts "DBCache: Found or record is with id:#{db_cache.id}"
            rescue ActiveRecord::RecordNotUnique
              retry
            end
    
            # The update is after the create because the value should not be part of the
            # create.
            db_cache.update(value: content)
          else
            # puts "DBCache Hit: #{key}, #{internal_key}"
            Rails.logger.info "DBCache Hit: #{key}, #{internal_key}"
            db_cache.touch if db_cache.updated_at < Time.now - 1.day
          end
    
          result = db_cache.value
        else
          result = capture(&block)
        end
        # Result could be nil if we've cached nil. So just dont return nil,
        # but return empty string
        result ? result.html_safe : ""
      end
    
    end


     
  • kmitov 2:02 pm on January 9, 2019 Permalink |
    Tags: i18n, parallel, , ,   

    i18n locales and the pass of rspec parallel specs and 

    First rule of good unit testing is: each test should be independent of the other tests.

    But if there is a global variable like I18n.locale than one spec could touch it and another spec will be run in a different locale from the default.

    TL;DR;

    Before each suite of specs set the locale to the default. This ensures that the specs are run against the same locale each time. Specific code is:

    # spec/rails_helper.rb
    RSpec.configure do |config|
      config.before :each do
        I18n.locale = Globalize.locale = I18n.default_locale
      end
    end
    

    i18n breaks spec isolation

    Internationalization, or i18n, should be part of most platforms. This means that i18n features should be properly tests. In suites when one of the specs modifies i18n the specs that are run after that are dependent on this new local.

    This seem trivial, but we only go to explore it the moment we started running specs in parallel on different CPU cores. The specs were started and run in different times and order on each run.

     
  • kmitov 7:21 am on January 8, 2019 Permalink |
    Tags: capybara, chromedriver, feature tests, google-chrome, , , ,   

    Chromedriver not filling all the whole password field in automated RSpec, Capybara, Feature Tests 

    This is such a lovely story. You will like it.

    When using google chromedriver to run capybara tests sometimes, just sometimes, especially if the tests are run in parallel, when the test has to fill a text field like a password, it fills only part of it. Last time checked for chromedriver 2.45

    TL; DR;

    Solution – google does not care, or it seems it is too difficult for the chromedriver team to resolve so there simply is no solution.

    What is the test?

    We are using Rails, Rspec, Capybara, Google chromedriver. We are developing feature tests. Tests are run in parallel with

    rake parallel:spec

    Here is the test in question. Simply fill a password on the form for upgrading a subscription, click on Confirm and expect to be redirected to a page that says – “You’ve upgraded your subscription”


    def submit_and_expect_success password
          # dialog opens to confirm with password
          fill_in "owner_password", with: password
          click_on "Confirm"
    
          expect_redirect_to "/subscriptions/#{subscription.to_param}"
    
          # If it redirects to this page, it means that the change was successful
          expect(page).to have_current_path "/subscriptions/#{subscription.to_param}"
    end

    And the tests are failing with timeout at expect_redirect_to. No, expect_redirect_to is a custom method, because we are using ActionCable to wait for subscription upgrade to finish. Because of the payment service at the back this sometimes takes a while and we want to show a nice progress and we need a websocket. But that being said the method is nothing special.

    module ExpectRedirect
      def expect_redirect_to url
        # If the path doesn't change before the timeout passes,
        # the test will fail, because there will be no redirect
    
        puts "expect url: #{url}"
        begin
          Timeout.timeout(Capybara.default_max_wait_time) do
            sleep(0.1) until url == URI(page.current_url).path
            page.current_url
          end
        rescue Timeout::Error=>e
          puts "Current url is still: #{page.current_url}"
          puts page.body
          raise e
        end
      end
    end

    If we are redirected to the url withing Capybara.default_max_wait_time than everything is fine. If not, we are raising the Timeout::Error.

    Parallel execution

    For some reason the test in question fails only when we are doing a parallel execution. Or at least mostly when we are doing parallel execution of the tests. So we moved through some nice articles to revise our understanding of Timeout again and again.

    https://jvns.ca/blog/2015/11/27/why-rubys-timeout-is-dangerous-and-thread-dot-raise-is-terrifying/

    But nevertheless the tests were failing with Timeout::Error on waiting for a redirect and in the html we could see the error returned by the server:

    <div><p>Invalid password</p></div>

    How come the password is Invalid

    No this took a while to debug and it seems rather mysterious but this is what we got:

    User password in DB is: 10124ddeaf1a69e3748e308508d916b6

    The server receives from the html form: 10124ddeaf1a69e3748e30850

    User password in DB is: 74c2a3e926420e1a30363423f121fc1e

    The server receives from the html from: 74c2a3e926420e1a3

    and so on and so on.

    Sometimes the difference is 8 symbols. Sometimes it is 2. Sometimes it is 16.

    It seems to be a client side issue

    Like. JavaScript. If there is an error this strange it has to be in the JavaScript. Right. There in the javascript we see:

    let form_data = form.serializeObject();
    this.perform('start_change', form_data);

    The form gets serialized. Probably it is not serialized correctly. Probably the values that we are sending are just not the values on the form. So I revised my knowledge on serializing objects in JavaScript with

    https://stackoverflow.com/questions/17488660/difference-between-serialize-and-serializeobject-jquery

    So far so good. But the serialization was not the problem. Here is what I did. I fixed all the passwords to be 32 symbols.

    let form_data = form.serializeObject();
     if(form_data["owner_password"].lenght != 32) {
            form_data["owner_password"] = "this was:" + form_data["owner_password"] + " which is less than 32 symbols"
          }
    this.perform('start_change', form_data);

    It it happened. The value of the password field was simply not 32 symbols long. It was not filled during the test.

    A little bit of search and we arrive at:

    https://github.com/teamcapybara/capybara/issues/1890

    and there in the bottom of the issue, there is the standard: “Not our problem resolution” with the link to:

    https://bugs.chromium.org/p/chromedriver/issues/detail?id=1771&q=sendkeys&sort=-id&colspec=ID%20Status%20Pri%20Owner%20Summary

    It seems that google chromedriver is not filling all the characters in the password field. It is doing it on random and is completely unpredictable.

    Issue still exists on:

    Issue still exist for
    
    Chrome: Version 71.0.3578.98 (Official Build) (64-bit)
    Chromedriver chromedriver --version
    ChromeDriver 2.45.615279 (12b89733300bd268cff3b78fc76cb8f3a7cc44e5)
    Linux kireto-laptop3 4.4.0-141-generic #167-Ubuntu x86_64 GNU/Linux
    Description:	Ubuntu 16.04.5 LTS
    Release:	16.04
    Codename:	xenial

    Today we would try Firefox driver.


     
  • kmitov 6:00 pm on January 3, 2019 Permalink |
    Tags: http,   

    The curious case of …http status code 505 

    Today I learned that there was such a thing as http status code 505. Well, I’ve been in software development for quite some time, but 505 was a new for me.

    TL; DR;

    There was a space in the URL and this results in an error 505

    Details

    The curious case started with an error when we were checking that some links on the platform are valid. This is what happened:

    Message: "Error: The link https://www.fllcasts.com/competitions/ returned status code 505! 
    
    Error: The link https://www.fllcasts.com/competitions/ returned status code 505! 
    
    Error: The link http://www.fllcasts.com/courses/19-moving-straight-with-lego-mindstorms-ev3-robots returned status code 505! 
    
    Error: The link http://www.fllcasts.com/courses/6-box-robot-two-fewer-parts-and-one-motor-simplifying-a-robot returned status code 505! "

    Strange. A quick curl revealed that the url was correct and curl was returning a correct result. wget also showed that it is working.

    It took me about one hour. One hour looking and the problem was the following:

    When the HTML document was constructed it had the following content

    <a href="{{ competitions_link }} "><img..

    Note the space. The space after }} and before “. The space right here <a href=”{{ competitions_link }}HERE”>. This took an hour today. And the solution is just to strip.

    Test

    If interested here is the test for this problem:

    it "strips url and then checks them to avoid error 505" do
         link = ' https://www.fllcasts.com '
    
    stub_request(:head, "https://www.fllcasts.com").to_return(status: 201)
    
    success, message = UrlChecker::check_link link, true
    
    expect(success).to be_truthy
    expect(message).to be_empty
    end

     
  • kmitov 10:02 am on December 31, 2018 Permalink |
    Tags: , Software Planning, Trello   

    How to plan with Trello? Part 1 – backlog and sprint board 

    I recently shared this with a friend that is constantly getting lost with Trello and how exactly to structure his software project plan. I shared my experience with him and he kind of liked it so here is my story and the few rules that are keeping me sane for the past 2 years of following them.

    Main issues with planing a software project with Trello is to decide

    • are different features in different board,
    • why do you need lables. Are different features marked with labels
    • are different features in lists?
    • how do you set the priority for a task. Do you have a list for priority, or label for priority.

    Because of these questions for the last 4-5-6 years I’ve started and stopped using Trello many times.

    These are all difficult questions. Here are my simple solutions.

    TL;DR;

    Create two boards. Backlog and SprintXX. In the SprintXX you have three lists. XX is the number of the sprint. “SPXX Planned“, “Ongoing“, “Done SPXX December 01- December 15“. When the sprint that is two – three weeks finishes you archive “Done SPXX December 01- December 15” and create a new “Done SPXX+1 December 16-December 31” list. Then you rename list “SPXX Planned” to “SPXX+1 Planned” where XX is the number of the Sprint.

    This keeps the Trello clear.

    Create two boards

    Board one is the Sprint board
    Board two is the Backlog board

    If you are currently not working on the task and there is little to no chance to work on it in the next 3-4 weeks that it is in the Backlog. This means it will be handled later.

    Sprint Board

    The Sprint board has the name of the current Sprint. I like sprints that are 2-3 weeks long. It has three lists

    SPXX Planed

    The list has all the tasks that are planned for the current sprint or probably the next one. These are tasks that you are genuinely planning to do something about.

    Ongoing

    These are all the tasks that we are currently working on. If we have even a single line of code for this task than we are working on it.

    Done SPXX December 01 – December 15

    These are all the tasks completed in the spring XX. Note that the list has the name “Done SPXX December 01 – December 15”. This is the full name of the sprint.

    At the end of the sprint

    When the spring ends you archive “Done SPXX December 01 -December 15”. You do not archive the tasks. You archive the whole list. This gives you a chance to get back to the list at the regular reviews that you are having with the team and actually review what has happened in this sprint.



     
  • kmitov 8:10 am on April 4, 2015 Permalink |  

    AUBG Discussion on Goldman Sachs 

    on-the-internet-you-can-choose-to-be-anything

    Think about – culture at Goldman Sachs.

    • How important is for the success of the company? Do you think it fosters talent development?
    • Key words – High standards, competitive environment, feedback seeking, openness to critique, collaborative practices, support for partners, shared acknowledgment for accomplishments, personal responsibility for failures

    Question – the traditional model for leadership development at Goldman Sachs.

    • What are the main reasons for the need of a formalized leadership development program? And the challenges for its implementation?
    • Apprenticeship, Informal, decentralized, on the job
    • War for talent, from teamwork to leadership, size issue, make people better more quickly, need for scaling-up new business opportunities
    • Skepticism, opportunity cost of time in the program

    Comment on this – what should the program look like and why?

    • Distinct physical location vs utilizing existing space
    • Outside speakers vs internal trainers
    • General leadership skills vs unique Goldman practices
    • Classroom instruction vs developmental experiences
    • Larger vs smaller classes
    • Company-wide vs division based groups
    • Separate classes for different levels of experience vs mixed groups
    • Who should own the program?

    Conclusion:

    7 likes

    I just posted some new trends in leadership developments
    In addition:
    Generational differences – Millenials will be the new executives
    Rise of Collective Leadership – No more “heroic” leaders, “collective” leaders are to be important.Greater focus on Innovation in leadership development methods – new technologies for communication – no more elevator speeches – there is FB, LInkdedin
    Transfer of greater Developmental Ownership to the Individual – you are responsible for your own development

    5 likes

    It should be a mixture between Outside speakers vs internal trainers, since if it is just internal trainers it will not bring the necessary extent of excitement.

    investment banks are mere puffs and as such their operations should not be considered by the financial institutions

    What would be the duration of the leadership program? I think one of the challenges when developing leaders in this industry would be high turnover. People seem to burn out quickly: http://www.bloomberg.com/news/articles/2012-05-20/banking-burnouts-blow-away-myths-of-wall-street-glamour

    4 likes

    I think that the best fit for leadership development program is up to 10-12 people

    I would support this and will give the following example for a leadership development program at PepsiCo. The program starts with a five-day session for 9
    selected executives at a time, in a remote and beautiful location, to cover Pepsi’s
    leadership fundamentals, with feedback, in order to develop personal vision and
    an action plan. The executives have 90 days to action their plan . They reconvene
    for 3 days for coaching, personal leadership improvement plans, reviewing their
    successes and failures in executing their plans. CEO leads all this. This is
    also rolled out to other parts of the organisation through executive led
    development and coaching initiatives.

    3 likes

    I would recommend a combined training utilizing external consultant for general management leadership and also e-learning on the unique Goldman practices

    2 likes

    It would be nice if external speakers come from backgrounds different from investment banking to add variety and new ideas.

    Have you heard about the 70:20:10 rule? A study done by McCall, Lombardo and Eichinger (1996) conducted among over a hundred CEOs concluded that their development came 70% from job experiences, 20% came from interpersonal relationships and 10% from formal trainings. Companies that use it Medtronic, Essilor, SAP, Ernst & Young, KPMG, PwC, Nike, Nokia, Microsoft,Dell, BAT, Oracle, HP, Sony Ericsson, Morgan Stanley,Standard Chartered, NAB, Philips, Avery, Westinghouse, Holcim, Coca Cola Amatil, American Express, Bank of America, Rabobank, Goldman Sachs, ANZ Bank, GAP, Irish Life, Caterpillar, Wrigley, Mars, Coca-Cola, Home Depot, Best Buy, L’Oréal, BT, Boston Scientific, Maersk, Creganna-Tactx Medical, Eli Lilly, GlaxoSmithKline,Herbert Smith Freehills, Cranfield University, Princeton University, George Washington University, Nestle, and the Australian Federal Government.

     

     
    • Dima 11:06 am on April 4, 2015 Permalink | Log in to Reply

      I think that Distinct physical location in a luxury place might be more successful since these people arer used to be treated superiorly.

      • Dima 11:08 am on April 4, 2015 Permalink | Log in to Reply

        It should be a mixture between Outside speakers vs internal trainers, since if it is just internal trainers it will not bring the necessary extent of excitement.

        • Nadya 11:12 am on April 4, 2015 Permalink | Log in to Reply

          And I could add it will be great to be icluded individual coaching sesions with externel proffesional coahcers

        • Kris 11:13 am on April 4, 2015 Permalink | Log in to Reply

          It would be nice if external speakers come from backgrounds different from investment banking to add variety and new ideas.

      • Vesi 11:23 am on April 4, 2015 Permalink | Log in to Reply

        I would support this and will give the following example for a leadership development program at PepsiCo. The program starts with a five-day session for 9
        selected executives at a time, in a remote and beautiful location, to cover Pepsi’s
        leadership fundamentals, with feedback, in order to develop personal vision and
        an action plan. The executives have 90 days to action their plan . They reconvene
        for 3 days for coaching, personal leadership improvement plans, reviewing their
        successes and failures in executing their plans. CEO leads all this. This is
        also rolled out to other parts of the organisation through executive led
        development and coaching initiatives.

    • Nadya 11:07 am on April 4, 2015 Permalink | Log in to Reply

      I think that the best fit for leadership development program is up to 10-12 people

    • Nadya 11:10 am on April 4, 2015 Permalink | Log in to Reply

      The program could be set: self lerarning fo rgeneral leadership skills and learning visits by countires for Goldman practices

    • tsonislav 11:11 am on April 4, 2015 Permalink | Log in to Reply

      investment banks are mere puffs and as such their operations should not be considered by the financial institutions

    • Dessy and Tedy 11:12 am on April 4, 2015 Permalink | Log in to Reply

      Mixed groups, so that people can learn and benefit better from each other

    • Vesi 11:14 am on April 4, 2015 Permalink | Log in to Reply

      I would recommend a combined training utilizing external consultant for general management leadership and also e-learning on the unique Goldman practices

      • Dima & Geri 11:16 am on April 4, 2015 Permalink | Log in to Reply

        A bee for Vessyy and Nadia!!

      • Throll1 11:20 am on April 4, 2015 Permalink | Log in to Reply

        Where would this external consultants would come from. This are goldman sachs. This are the guys. Do you think someone could possibly teach them something?

        • Dima & Geri 11:28 am on April 4, 2015 Permalink | Log in to Reply

          Yes, but only acknowledged and highly successful leaders for other hot industries. I think they will appreaciate an IT guru like Tim Cook.

        • Radi 11:33 am on April 4, 2015 Permalink | Log in to Reply

          I’m thinking about the reverse mentorship program, introduced in GE, do you guys think this would work here?

    • Dima & Geri 11:15 am on April 4, 2015 Permalink | Log in to Reply

      Who should own the program? Definitely it should be a top down approach. The top managament should be largely involved because it is a major disruption and the message should be delivered in a definite way.

    • John Smith 11:16 am on April 4, 2015 Permalink | Log in to Reply

      Have you heard about the 70:20:10 rule? A study done by McCall, Lombardo and Eichinger (1996) conducted among over a hundred CEOs concluded that their development came 70% from job experiences, 20% came from interpersonal relationships and 10% from formal trainings. Companies that use it Medtronic, Essilor, SAP, Ernst & Young, KPMG, PwC, Nike, Nokia, Microsoft,Dell, BAT, Oracle, HP, Sony Ericsson, Morgan Stanley,Standard Chartered, NAB, Philips, Avery, Westinghouse, Holcim, Coca Cola Amatil, American Express, Bank of America, Rabobank, Goldman Sachs, ANZ Bank, GAP, Irish Life, Caterpillar, Wrigley, Mars, Coca-Cola, Home Depot, Best Buy, L’Oréal, BT, Boston Scientific, Maersk, Creganna-Tactx Medical, Eli Lilly, GlaxoSmithKline,Herbert Smith Freehills, Cranfield University, Princeton University, George Washington University, Nestle, and the Australian Federal Government.

      • tsonislav 11:17 am on April 4, 2015 Permalink | Log in to Reply

        *SPAM ALLERT*

      • Dessy and Tedy 11:18 am on April 4, 2015 Permalink | Log in to Reply

        TROLLING?

        • tsonislav 11:19 am on April 4, 2015 Permalink | Log in to Reply

          Lorem ipsum dolor sit amet, etiam dignissim eu vel, ullum aliquid eos in. Ad quando omnium veritus mel, vix ea putent repudiandae. Eligendi menandri id est.

    • Alex 11:17 am on April 4, 2015 Permalink | Log in to Reply

      Unique Goldman Sachs practices should be popularized and linked to the general leadership skill. New managers would become familiar with the success stories in GS

      • radiro 11:20 am on April 4, 2015 Permalink | Log in to Reply

        and what about the role of the top management in the evolution of organizational culture

      • radiro 11:24 am on April 4, 2015 Permalink | Log in to Reply

        Do you think that the ongoing leadership program at GS supports emerging leaders

    • radiro 11:20 am on April 4, 2015 Permalink | Log in to Reply

      the question is what drives organizational culture

    • John Smith 11:21 am on April 4, 2015 Permalink | Log in to Reply

      Noe, Hollenbeck, Gerhart, Wright (2012) identify four major categories of development:
      • Formal education

      • Assessment

      • Job experiences

      • Interpersonal relationships

      (from the textbook, Biatheszzzz!)

    • Kris 11:24 am on April 4, 2015 Permalink | Log in to Reply

      What would be the duration of the leadership program? I think one of the challenges when developing leaders in this industry would be high turnover. People seem to burn out quickly: http://www.bloomberg.com/news/articles/2012-05-20/banking-burnouts-blow-away-myths-of-wall-street-glamour

      • Tedy 11:27 am on April 4, 2015 Permalink | Log in to Reply

        I agree with Christan – more personal and family suppot should be offered. Investment bankers suffer more of burnout, deadlines and pressure. They need assistance more in this area, rather than just professional training

        • Kris 11:32 am on April 4, 2015 Permalink | Log in to Reply

          But does that fit with the industry requirements? Maybe an investment bank just needs highly motivated people who will spend a couple of years working there than leave.

        • Vesi 11:35 am on April 4, 2015 Permalink | Log in to Reply

          this is so, people are very stressed and have to work overtime hours. A case study has been conducted indicated an staff turnover of 44% for 3 years.

      • Radi 11:28 am on April 4, 2015 Permalink | Log in to Reply

        GS are implementing this leadership program partially to tackle the turnover.

      • Kiril 11:29 am on April 4, 2015 Permalink | Log in to Reply

        So in order not to burnout why don`t we just leave them without a program do to their work. They would be much more productive, don’t you think?

        • Tedy 11:31 am on April 4, 2015 Permalink | Log in to Reply

          KK, in order to burn out, first you must burn – e.g be an excellent employee. What I am saying is that need assistance in maintaining work/life balance, rahter than just prof.training

        • Santa Claus 11:32 am on April 4, 2015 Permalink | Log in to Reply

          They are burning out quickly without a program now. with this program we will takle exactly this issue.

        • Kris 11:36 am on April 4, 2015 Permalink | Log in to Reply

          Maybe people do not go there with long term employment in mind. Spend a couple of years, work hard and make a name, get Goldman Sachs on your CV and continue elsewhere.

          • kmitov 11:38 am on April 4, 2015 Permalink | Log in to Reply

            Than why are you investing in this people if you plan for them to leave. I do not think it makes much sense.

    • John Smith 11:25 am on April 4, 2015 Permalink | Log in to Reply

      Doug Ready, Jay Conger, and Linda Hill (2010) identify four common traits among high potential employees:
      1. Drive to excel
      2. Catalytic learning capability
      3. Enterprising spirit
      4. Dynamic sensors
      Source: HBR, July 2010 issue

      • Kiril 11:27 am on April 4, 2015 Permalink | Log in to Reply

        Why do we need the enterprising spirit? I would argue that people without that much of enterprise spirits, but more entrepreneurial could have a much greater impact as we have seen the in the last decades

    • John Smith 11:28 am on April 4, 2015 Permalink | Log in to Reply

      GE puts senior level talent potential employees through a series of four six-month job rotation program in different businesses, regions. 2 Years is the minimum duration for job experience development for senior people.

    • Anko 11:30 am on April 4, 2015 Permalink | Log in to Reply

      A tailor made leadership development program, led by externel professionals but faciliated by internels, wirh the participation of the high level management of the company (At least for the open and closing dates). The most talanted employees will be “awarded” with participation in the program and the chance to meet the executives thus taking the new iniciative for prestige and exciting.

      • Santa Claus 11:36 am on April 4, 2015 Permalink | Log in to Reply

        The talented employees are actually THE Executives!

        • Anko 11:40 am on April 4, 2015 Permalink | Log in to Reply

          Samta, gluposti na tarkaleta, you know! If the xecutives are the only talanted employees then the company is doomed. Is this the case?

    • Nadya 11:32 am on April 4, 2015 Permalink | Log in to Reply

      Greater focus on Innovation in leadership development methods – new technologies for communication – no more elevator speeches – there is FB, LInkdedin
      Transfer of greater Developmental Ownership to the Individual – you are responsible for your own development

      • Nadya 11:34 am on April 4, 2015 Permalink | Log in to Reply

        I just posted some new trends in leadership developments
        In addition:
        Generational differences – Millenials will be the new executives
        Rise of Collective Leadership – No more “heroic” leaders, “collective” leaders are to be important.

    • tsonislav 11:33 am on April 4, 2015 Permalink | Log in to Reply

      Who is paying for this site ????!

    • tsonislav 11:38 am on April 4, 2015 Permalink | Log in to Reply

      аз мога да правя барбекю 🙂

    • Nadya 11:39 am on April 4, 2015 Permalink | Log in to Reply

      WELL DONE!!! GREAT IDEA FOR FACILITATION!!!

    • Santa Claus 11:39 am on April 4, 2015 Permalink | Log in to Reply

      Classroom instruction is not on the agenda as a best practice anymore! Everyone is into experiences now! For reference – Marketing classes!

      • Kris 11:41 am on April 4, 2015 Permalink | Log in to Reply

        Totally agreed!

      • Tedy 11:41 am on April 4, 2015 Permalink | Log in to Reply

        Do you remember how the Wolf of Wallstreet relaxed? NOW THAT’S A PROGRAM!

      • tsonislav 11:42 am on April 4, 2015 Permalink | Log in to Reply

        I really think that the banks give such enormous bonuses also as a marketing – to show how extremely successful they are

      • kmitov 11:42 am on April 4, 2015 Permalink | Log in to Reply

        Yes, I would agree with that. But then again what structure do you need then. No classroom, no teachers, than what would be the formal in formal management learninv

c
compose new post
j
next post/next comment
k
previous post/previous comment
r
reply
e
edit
o
show/hide comments
t
go to top
l
go to login
h
show/hide help
shift + esc
cancel