Making a new developer productive as quickly as possible is most of the times challenging for the product team. I’ve heard stories about new on-boarding team members needing up to several weeks, or even months, until they feel comfortable or knowledgeable enough about the project and the code. This shouldn’t be the norm. Situations like these are detrimental to the project, wasting valuable time and resources that could be otherwise used to streamline those great features into production. And we all know it: there’s no place like production!
Recently, I found myself in the shoes of the new team member by joining the Eventrix product team at MozaicLabs. Just like you, I felt the need to make myself productive as soon as possible, in order to deliver value to the project.
In this article, I will share with you more about my own experience, as well as tools and techniques that can be used to achieve productivity.
Easy project setup
First things first. When a new developer joins the project, one of the first things they need is to set up their development environment. And I’m not talking just about the IDE. It’s also about getting the source code, configuring the development environment variables, initializing and populating the database, deploying the artifact locally, etc., you get the idea.
What is the most common thing you hear when facing all of that? “Yeah, it’s going to take at least a few days, if not the whole week!”. Here is your first problem: not being able to get up and running on your first day on the job.
First step to quickly become productive when joining a team is automation. Computers are very good at executing the repeatable steps that we, humans, dread to do manually. And they do it faster, too! So write a few scripts, one for each complex task like the ones described in the paragraph above. The new team member will only need to execute those scripts on the local machine, go grab a cup of coffee while that’s running, and have the development environment all ready after a few minutes when the scripts are done.
To avoid those scripts becoming a huge mess themselves, it might help if everyone on the team was using the same kind of operating system, IDE, database management tool, etc. That way, the scripts wouldn’t break on subtle variations of the running system, and they wouldn’t need too much maintenance. Plus, the development environment consistency is useful when you need help from a colleague who won’t stumble because you’re using a different Linux flavor, or a different kind of IDE.
A high-level overview
The next thing on your list should be asking for a high-level overview presentation of the project from someone who has more knowledge about it. Typically, this person can be the architect, the technical team leader, or a senior developer.
During this session, your teammate can explain the following to you:
the business value of the product, and the problem it tries to resolve for the end-user
the easiest (or the most complex) business case scenario of the product
why certain decision were taken during the project’s lifecycle
the most common pitfalls that a newbie can get stuck into while working on the project
the most sensitive areas of the code, in terms of high probability of bug occurrence
the project structure, the software design, the most common classes encountered in the code (such as controllers, services, validators, entities, etc.) and how they interact with each other
the frameworks and libraries used, and their typical use-case
code conventions
if and how the project deals with performance, security and scalability
anything else that a new team member should know about the project before diving into the code
Mob programming
At this point, if you’re still fuzzy about how to start implementing that first feature on your own, you can ask for a mob programming session. That’s a software development approach where the whole team works on the same thing, at the same time, in the same space, and at the same computer. If the team is large, projecting the screen onto a wall might come in handy.
So, pick a simple (but not too simple) feature from the backlog and implement it from scratch, together, as a team. Everyone should take turns at the keyboard every 15 minutes or so.
How is this session going to help you? Well, it will allow you to see how a user story gets translated into code, going through all the layers of the application: from the user interface all the way down to the database (and back again). At the same time, you can ask questions and gather insights from your colleagues about the code and the best practices to be used.
The downsides of the mob programming session are that:
it can take quite some time, from a few hours to an entire day
it can get tiring
it puts on hold the other tasks that your teammates are working on
you can’t organize more of these in a short period of time
Those downsides may look grim, but the amount of learning that you will acquire during such a session will prove to be invaluable in the longer term.
Pair programming
The smaller scale alternative to mob programming is pair programming. This is a software-development technique in which two programmers work as a pair together on one workstation. The driver writes code while the other, the observer, pointer or navigator, reviews each line of code as it is typed in. The two programmers switch roles frequently.
These pairing sessions can happen a lot more frequently than the mobbing ones. Nothing stops you from pairing with someone every day. In fact, all the downsides of the mob session are alleviated:
it doesn’t have to take much time, it can be as short as an hour
being short, it won’t get tiring; you can stop as soon as you feel losing focus
no one else’s work is being put on hold
as stated above, you can pair daily; moreover, every day you can pair with someone else.
Readable tests, executable specifications
You may have heard about Gherkin scenarios: business readable, domain-related specifications that let you describe the software’s behavior without detailing how that behavior is implemented.
A typical scenario follows the “Given – When – Then” syntax, and it looks like this:
Scenario: “Organizer updates session status to “Rejected””
Given
“Alex” event organizer
“Alex’s conference” event
“Adi” event reviewer for “Alex’s conference”
“Plato” is a speaker
“Plato”s submission “Absolute Truth” submitted to “Alex’s conference”
When
Alex is logged in
Alex is on “Absolute Truth” page
Alex updates session status to “Rejected”
Then
Ensure that Adi views “Absolute Truth” session status as “Rejected”
These scenarios help you understand the business needs of a certain feature. The “given” section describes the preconditions that should be met before executing a certain operation. The “when” section describes the operation to be executed as part of the feature to be implemented. The “then” section describes the expected results after executing the operation.
Going into finer details, you should read the unit / integration / functional tests associated with the feature you are interested in. If those tests are well written, they will provide you examples on how certain classes are used, how they react to different inputs, and how they interact with other parts of the system.
Koans
Last but not least, if the project uses a specific programming language, framework or library that you have never worked with previously, you can get yourself up to speed by working on some koans. These are simple problems where the programmer is asked to “fill in the blanks”. They look a lot like unit tests. The aim is to make the tests pass, gradually using features of the thing you’re aiming to learn. By the end of the koans exercises, you should be feeling completely comfortable with that language / framework. If you don’t, feel free to re-do the exercises as many times as you need, or to search for other similar koans on that same subject.
In my case, I needed to refresh my memory regarding the Groovy programming language and the Grails framework. Towards that goal, I have worked on this groovy-koans project available on Github. By the end of it, I even managed to make some small contributions through pull requests to improve the project by fixing some typos, updating some outdated and incorrect links.
Conclusions
When faced with a [scary] new project, don’t get discouraged or feel overwhelmed. There are several techniques that you and your team can employ to tackle the seemingly impossible goal of being productive right from your first days. These range from using automated scripts to set up your project, getting educated through a project overview presentation or reading the specs and tests, up to experimenting with mob programming, pair programming and koans.
If you have any other useful techniques that you can share with us, let us know in a comment below.
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
var astra = {"break_point":"921","isRtl":"","is_scroll_to_id":"1","is_scroll_to_top":"1","is_header_footer_builder_active":"1","responsive_cart_click":"flyout","is_dark_palette":"","revealEffectEnable":"","ajax_url":"https://mozaicworks.com/wp-admin/admin-ajax.php","infinite_count":"2","infinite_total":"0","pagination":"infinite","infinite_scroll_event":"scroll","no_more_post_message":"No more posts to show.","grid_layout":{"desktop":"3","tablet":1,"mobile":1},"site_url":"https://mozaicworks.com","blogArchiveTitleLayout":"","blogArchiveTitleOn":"","show_comments":"Show Comments","enableHistoryPushState":"1","masonryEnabled":"","blogMasonryBreakPoint":"0","shop_infinite_count":"2","shop_infinite_total":"0","shop_total_products":"1","shop_pagination":"number","shop_infinite_scroll_event":"scroll","shop_no_more_post_message":"No more products to show.","shop_result_count_format":"Showing 1\u2013{count} of {total} results","checkout_prev_text":"Back to my details","checkout_next_text":"Proceed to payment","shop_quick_view_enable":"disabled","shop_quick_view_stick_cart":"","shop_quick_view_auto_height":"1","woo_cart_empty_featured_product":"","single_product_qty_ajax_nonce":"e93debc8af","quick_view_nonce":"849fc62228","single_product_ajax_add_to_cart":"1","single_product_ajax_url":"/?wc-ajax=astra_add_cart_single_product","is_cart":"","is_single_product":"","view_cart":"View cart","cart_url":"https://mozaicworks.com/cart","checkout_url":"https://mozaicworks.com/checkout","add_to_cart_options_single":"rt_add_to_cart","is_astra_pro":"1","shopRevealEffectEnable":""};
//# sourceURL=astra-theme-js-js-extra
document.addEventListener( 'wpcf7submit', e => turnstile.reset() );
//# sourceURL=cloudflare-turnstile-js-after
var astraAddon = {"is_elementor_active":"","sticky_active":"1","svgIconClose":"\u003Cspan class=\"ast-icon icon-close\"\u003E\u003C/span\u003E","hf_account_show_menu_on":"hover","hf_account_action_type":"link","hf_account_logout_action":"link","header_main_stick":"1","header_above_stick":"","header_below_stick":"","stick_header_meta":"","header_main_stick_meta":"","header_above_stick_meta":"","header_below_stick_meta":"","sticky_header_on_devices":"both","sticky_header_style":"none","sticky_hide_on_scroll":"1","break_point":"921","tablet_break_point":"768","mobile_break_point":"544","header_main_shrink":"1","header_animation_effect":"none","header_logo_width":"","responsive_header_logo_width":{"desktop":200,"tablet":"","mobile":150},"stick_origin_position":"","site_layout":"ast-full-width-layout","site_content_width":"1070","site_layout_padded_width":"1200","site_layout_box_width":"1024","header_builder_active":"1","component_limit":"10","single_product_sticky_product_image":"","single_product_sticky_product_image_top_offset":"0","cart_sticky_cart_totals":"","order_review_toggle_texts":{"toggle_show_text":"Show Order Summary","toggle_hide_text":"Hide Order Summary"},"check_user_exist_nonce":"cbcdd699d6","woocommerce_login_nonce":"e740847d90","is_logged_in":"","user_validation_msgs":{"error_msg":"Entered user detail is not a valid.","success_msg":"This user is already registered. Please enter the password to continue.","login_failed_msg":"Login failed. Please reload the page and try again."},"checkout_order_review_sticky":"","cartflows_version":"","is_registration_required":"1","is_complete_package":"1","is_header_builder_active":"1"};
//# sourceURL=astra-addon-js-js-extra
var xoo_wsc_params = {"adminurl":"https://mozaicworks.com/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","qtyUpdateDelay":"500","notificationTime":"5000","html":{"successNotice":"\u003Cul class=\"xoo-wsc-notices\"\u003E\u003Cli class=\"xoo-wsc-notice-success\"\u003E\u003Cspan class=\"xoo-wsc-icon-check_circle\"\u003E\u003C/span\u003E%s%\u003C/li\u003E\u003C/ul\u003E","errorNotice":"\u003Cul class=\"xoo-wsc-notices\"\u003E\u003Cli class=\"xoo-wsc-notice-error\"\u003E\u003Cspan class=\"xoo-wsc-icon-cross\"\u003E\u003C/span\u003E%s%\u003C/li\u003E\u003C/ul\u003E"},"strings":{"maxQtyError":"Only %s% in stock","stepQtyError":"Quantity can only be purchased in multiple of %s%","calculateCheckout":"Please use checkout form to calculate shipping","couponEmpty":"Please enter promo code"},"nonces":{"update_shipping_method_nonce":"d738eabd81"},"isCheckout":"","isCart":"","sliderAutoClose":"1","shippingEnabled":"","couponsEnabled":"1","autoOpenCart":"yes","addedToCart":"","ajaxAddToCart":"yes","showBasket":"always_show","flyToCart":"yes","flyToCartTime":"1500","productFlyClass":"","refreshCart":"no","fetchDelay":"200"};
//# sourceURL=xoo-wsc-main-js-js-extra
var complianz = {"prefix":"cmplz_","debug":"","user_banner_id":"1","set_cookies":[],"block_ajax_content":"0","banner_version":"22","version":"7.5.6","store_consent":"","do_not_track_enabled":"1","consenttype":"optin","region":"eu","geoip":"","dismiss_timeout":"","disable_cookiebanner":"","soft_cookiewall":"","dismiss_on_scroll":"","cookie_expiry":"365","url":"https://mozaicworks.com/wp-json/complianz/v1/","locale":"lang=en&locale=en_US","set_cookies_on_root":"0","cookie_domain":"","current_policy_id":"26","cookie_path":"/","categories":{"statistics":"statistics","marketing":"marketing"},"tcf_active":"","placeholdertext":"Click to accept {category} cookies and enable this content","css_file":"https://mozaicworks.com/wp-content/uploads/complianz/css/banner-{banner_id}-{type}.css?v=22","page_links":{"eu":{"cookie-statement":{"title":"Cookie Policy ","url":"https://mozaicworks.com/cookie-policy-eu"},"privacy-statement":{"title":"Terms And Conditions","url":"https://mozaicworks.com/terms-and-conditions"},"impressum":{"title":"Private: Contact Old","url":"https://mozaicworks.com/?page_id=12523"}},"us":{"impressum":{"title":"Private: Contact Old","url":"https://mozaicworks.com/?page_id=12523"}},"uk":{"impressum":{"title":"Private: Contact Old","url":"https://mozaicworks.com/?page_id=12523"}},"ca":{"impressum":{"title":"Private: Contact Old","url":"https://mozaicworks.com/?page_id=12523"}},"au":{"impressum":{"title":"Private: Contact Old","url":"https://mozaicworks.com/?page_id=12523"}},"za":{"impressum":{"title":"Private: Contact Old","url":"https://mozaicworks.com/?page_id=12523"}},"br":{"impressum":{"title":"Private: Contact Old","url":"https://mozaicworks.com/?page_id=12523"}}},"tm_categories":"","forceEnableStats":"","preview":"","clean_cookies":"","aria_label":"Click to accept {category} cookies and enable this content","iapi_nav":"fallback","is_cookiepolicy_page":""};
//# sourceURL=cmplz-cookiebanner-js-extra
Comments are closed.