├── LICENSE ├── README.md ├── images └── cover.webp └── pages ├── TBD.md ├── chapter_01.md ├── chapter_02.md ├── chapter_03.md ├── chapter_04.md ├── chapter_05.md ├── who_is_it_for.md └── why_this_guide.md /LICENSE: -------------------------------------------------------------------------------- 1 | Attribution 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution 4.0 International Public License 58 | 59 | By exercising the Licensed Rights (defined below), You accept and agree 60 | to be bound by the terms and conditions of this Creative Commons 61 | Attribution 4.0 International Public License ("Public License"). To the 62 | extent this Public License may be interpreted as a contract, You are 63 | granted the Licensed Rights in consideration of Your acceptance of 64 | these terms and conditions, and the Licensor grants You such rights in 65 | consideration of benefits the Licensor receives from making the 66 | Licensed Material available under these terms and conditions. 67 | 68 | 69 | Section 1 -- Definitions. 70 | 71 | a. Adapted Material means material subject to Copyright and Similar 72 | Rights that is derived from or based upon the Licensed Material 73 | and in which the Licensed Material is translated, altered, 74 | arranged, transformed, or otherwise modified in a manner requiring 75 | permission under the Copyright and Similar Rights held by the 76 | Licensor. For purposes of this Public License, where the Licensed 77 | Material is a musical work, performance, or sound recording, 78 | Adapted Material is always produced where the Licensed Material is 79 | synched in timed relation with a moving image. 80 | 81 | b. Adapter's License means the license You apply to Your Copyright 82 | and Similar Rights in Your contributions to Adapted Material in 83 | accordance with the terms and conditions of this Public License. 84 | 85 | c. Copyright and Similar Rights means copyright and/or similar rights 86 | closely related to copyright including, without limitation, 87 | performance, broadcast, sound recording, and Sui Generis Database 88 | Rights, without regard to how the rights are labeled or 89 | categorized. For purposes of this Public License, the rights 90 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 91 | Rights. 92 | 93 | d. Effective Technological Measures means those measures that, in the 94 | absence of proper authority, may not be circumvented under laws 95 | fulfilling obligations under Article 11 of the WIPO Copyright 96 | Treaty adopted on December 20, 1996, and/or similar international 97 | agreements. 98 | 99 | e. Exceptions and Limitations means fair use, fair dealing, and/or 100 | any other exception or limitation to Copyright and Similar Rights 101 | that applies to Your use of the Licensed Material. 102 | 103 | f. Licensed Material means the artistic or literary work, database, 104 | or other material to which the Licensor applied this Public 105 | License. 106 | 107 | g. Licensed Rights means the rights granted to You subject to the 108 | terms and conditions of this Public License, which are limited to 109 | all Copyright and Similar Rights that apply to Your use of the 110 | Licensed Material and that the Licensor has authority to license. 111 | 112 | h. Licensor means the individual(s) or entity(ies) granting rights 113 | under this Public License. 114 | 115 | i. Share means to provide material to the public by any means or 116 | process that requires permission under the Licensed Rights, such 117 | as reproduction, public display, public performance, distribution, 118 | dissemination, communication, or importation, and to make material 119 | available to the public including in ways that members of the 120 | public may access the material from a place and at a time 121 | individually chosen by them. 122 | 123 | j. Sui Generis Database Rights means rights other than copyright 124 | resulting from Directive 96/9/EC of the European Parliament and of 125 | the Council of 11 March 1996 on the legal protection of databases, 126 | as amended and/or succeeded, as well as other essentially 127 | equivalent rights anywhere in the world. 128 | 129 | k. You means the individual or entity exercising the Licensed Rights 130 | under this Public License. Your has a corresponding meaning. 131 | 132 | 133 | Section 2 -- Scope. 134 | 135 | a. License grant. 136 | 137 | 1. Subject to the terms and conditions of this Public License, 138 | the Licensor hereby grants You a worldwide, royalty-free, 139 | non-sublicensable, non-exclusive, irrevocable license to 140 | exercise the Licensed Rights in the Licensed Material to: 141 | 142 | a. reproduce and Share the Licensed Material, in whole or 143 | in part; and 144 | 145 | b. produce, reproduce, and Share Adapted Material. 146 | 147 | 2. Exceptions and Limitations. For the avoidance of doubt, where 148 | Exceptions and Limitations apply to Your use, this Public 149 | License does not apply, and You do not need to comply with 150 | its terms and conditions. 151 | 152 | 3. Term. The term of this Public License is specified in Section 153 | 6(a). 154 | 155 | 4. Media and formats; technical modifications allowed. The 156 | Licensor authorizes You to exercise the Licensed Rights in 157 | all media and formats whether now known or hereafter created, 158 | and to make technical modifications necessary to do so. The 159 | Licensor waives and/or agrees not to assert any right or 160 | authority to forbid You from making technical modifications 161 | necessary to exercise the Licensed Rights, including 162 | technical modifications necessary to circumvent Effective 163 | Technological Measures. For purposes of this Public License, 164 | simply making modifications authorized by this Section 2(a) 165 | (4) never produces Adapted Material. 166 | 167 | 5. Downstream recipients. 168 | 169 | a. Offer from the Licensor -- Licensed Material. Every 170 | recipient of the Licensed Material automatically 171 | receives an offer from the Licensor to exercise the 172 | Licensed Rights under the terms and conditions of this 173 | Public License. 174 | 175 | b. No downstream restrictions. You may not offer or impose 176 | any additional or different terms or conditions on, or 177 | apply any Effective Technological Measures to, the 178 | Licensed Material if doing so restricts exercise of the 179 | Licensed Rights by any recipient of the Licensed 180 | Material. 181 | 182 | 6. No endorsement. Nothing in this Public License constitutes or 183 | may be construed as permission to assert or imply that You 184 | are, or that Your use of the Licensed Material is, connected 185 | with, or sponsored, endorsed, or granted official status by, 186 | the Licensor or others designated to receive attribution as 187 | provided in Section 3(a)(1)(A)(i). 188 | 189 | b. Other rights. 190 | 191 | 1. Moral rights, such as the right of integrity, are not 192 | licensed under this Public License, nor are publicity, 193 | privacy, and/or other similar personality rights; however, to 194 | the extent possible, the Licensor waives and/or agrees not to 195 | assert any such rights held by the Licensor to the limited 196 | extent necessary to allow You to exercise the Licensed 197 | Rights, but not otherwise. 198 | 199 | 2. Patent and trademark rights are not licensed under this 200 | Public License. 201 | 202 | 3. To the extent possible, the Licensor waives any right to 203 | collect royalties from You for the exercise of the Licensed 204 | Rights, whether directly or through a collecting society 205 | under any voluntary or waivable statutory or compulsory 206 | licensing scheme. In all other cases the Licensor expressly 207 | reserves any right to collect such royalties. 208 | 209 | 210 | Section 3 -- License Conditions. 211 | 212 | Your exercise of the Licensed Rights is expressly made subject to the 213 | following conditions. 214 | 215 | a. Attribution. 216 | 217 | 1. If You Share the Licensed Material (including in modified 218 | form), You must: 219 | 220 | a. retain the following if it is supplied by the Licensor 221 | with the Licensed Material: 222 | 223 | i. identification of the creator(s) of the Licensed 224 | Material and any others designated to receive 225 | attribution, in any reasonable manner requested by 226 | the Licensor (including by pseudonym if 227 | designated); 228 | 229 | ii. a copyright notice; 230 | 231 | iii. a notice that refers to this Public License; 232 | 233 | iv. a notice that refers to the disclaimer of 234 | warranties; 235 | 236 | v. a URI or hyperlink to the Licensed Material to the 237 | extent reasonably practicable; 238 | 239 | b. indicate if You modified the Licensed Material and 240 | retain an indication of any previous modifications; and 241 | 242 | c. indicate the Licensed Material is licensed under this 243 | Public License, and include the text of, or the URI or 244 | hyperlink to, this Public License. 245 | 246 | 2. You may satisfy the conditions in Section 3(a)(1) in any 247 | reasonable manner based on the medium, means, and context in 248 | which You Share the Licensed Material. For example, it may be 249 | reasonable to satisfy the conditions by providing a URI or 250 | hyperlink to a resource that includes the required 251 | information. 252 | 253 | 3. If requested by the Licensor, You must remove any of the 254 | information required by Section 3(a)(1)(A) to the extent 255 | reasonably practicable. 256 | 257 | 4. If You Share Adapted Material You produce, the Adapter's 258 | License You apply must not prevent recipients of the Adapted 259 | Material from complying with this Public License. 260 | 261 | 262 | Section 4 -- Sui Generis Database Rights. 263 | 264 | Where the Licensed Rights include Sui Generis Database Rights that 265 | apply to Your use of the Licensed Material: 266 | 267 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 268 | to extract, reuse, reproduce, and Share all or a substantial 269 | portion of the contents of the database; 270 | 271 | b. if You include all or a substantial portion of the database 272 | contents in a database in which You have Sui Generis Database 273 | Rights, then the database in which You have Sui Generis Database 274 | Rights (but not its individual contents) is Adapted Material; and 275 | 276 | c. You must comply with the conditions in Section 3(a) if You Share 277 | all or a substantial portion of the contents of the database. 278 | 279 | For the avoidance of doubt, this Section 4 supplements and does not 280 | replace Your obligations under this Public License where the Licensed 281 | Rights include other Copyright and Similar Rights. 282 | 283 | 284 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 285 | 286 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 287 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 288 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 289 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 290 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 291 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 292 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 293 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 294 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 295 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 296 | 297 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 298 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 299 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 300 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 301 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 302 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 303 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 304 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 305 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 306 | 307 | c. The disclaimer of warranties and limitation of liability provided 308 | above shall be interpreted in a manner that, to the extent 309 | possible, most closely approximates an absolute disclaimer and 310 | waiver of all liability. 311 | 312 | 313 | Section 6 -- Term and Termination. 314 | 315 | a. This Public License applies for the term of the Copyright and 316 | Similar Rights licensed here. However, if You fail to comply with 317 | this Public License, then Your rights under this Public License 318 | terminate automatically. 319 | 320 | b. Where Your right to use the Licensed Material has terminated under 321 | Section 6(a), it reinstates: 322 | 323 | 1. automatically as of the date the violation is cured, provided 324 | it is cured within 30 days of Your discovery of the 325 | violation; or 326 | 327 | 2. upon express reinstatement by the Licensor. 328 | 329 | For the avoidance of doubt, this Section 6(b) does not affect any 330 | right the Licensor may have to seek remedies for Your violations 331 | of this Public License. 332 | 333 | c. For the avoidance of doubt, the Licensor may also offer the 334 | Licensed Material under separate terms or conditions or stop 335 | distributing the Licensed Material at any time; however, doing so 336 | will not terminate this Public License. 337 | 338 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 339 | License. 340 | 341 | 342 | Section 7 -- Other Terms and Conditions. 343 | 344 | a. The Licensor shall not be bound by any additional or different 345 | terms or conditions communicated by You unless expressly agreed. 346 | 347 | b. Any arrangements, understandings, or agreements regarding the 348 | Licensed Material not stated herein are separate from and 349 | independent of the terms and conditions of this Public License. 350 | 351 | 352 | Section 8 -- Interpretation. 353 | 354 | a. For the avoidance of doubt, this Public License does not, and 355 | shall not be interpreted to, reduce, limit, restrict, or impose 356 | conditions on any use of the Licensed Material that could lawfully 357 | be made without permission under this Public License. 358 | 359 | b. To the extent possible, if any provision of this Public License is 360 | deemed unenforceable, it shall be automatically reformed to the 361 | minimum extent necessary to make it enforceable. If the provision 362 | cannot be reformed, it shall be severed from this Public License 363 | without affecting the enforceability of the remaining terms and 364 | conditions. 365 | 366 | c. No term or condition of this Public License will be waived and no 367 | failure to comply consented to unless expressly agreed to by the 368 | Licensor. 369 | 370 | d. Nothing in this Public License constitutes or may be interpreted 371 | as a limitation upon, or waiver of, any privileges and immunities 372 | that apply to the Licensor or You, including from the legal 373 | processes of any jurisdiction or authority. 374 | 375 | 376 | ======================================================================= 377 | 378 | Creative Commons is not a party to its public licenses. 379 | Notwithstanding, Creative Commons may elect to apply one of its public 380 | licenses to material it publishes and in those instances will be 381 | considered the “Licensor.” The text of the Creative Commons public 382 | licenses is dedicated to the public domain under the CC0 Public Domain 383 | Dedication. Except for the limited purpose of indicating that material 384 | is shared under a Creative Commons public license or as otherwise 385 | permitted by the Creative Commons policies published at 386 | creativecommons.org/policies, Creative Commons does not authorize the 387 | use of the trademark "Creative Commons" or any other trademark or logo 388 | of Creative Commons without its prior written consent including, 389 | without limitation, in connection with any unauthorized modifications 390 | to any of its public licenses or any other arrangements, 391 | understandings, or agreements concerning use of licensed material. For 392 | the avoidance of doubt, this paragraph does not form part of the public 393 | licenses. 394 | 395 | Creative Commons may be contacted at creativecommons.org. 396 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # The Definitive Guide to Succeeding as a Professional Dev 2 | 3 | ![Cover image featuring the TrueSeniorDev logo.](images/cover.webp) 4 | 5 | --- 6 | 7 | ⚠️ This guide is still in progress but **`I'm actively working on it 👨‍💻`**. 8 | 9 | **[✉️ Get notified when a new chapter is out](https://www.fromthetrenches.dev/p/dev-guide)** 10 | 11 | --- 12 | 13 | ## INTRO 14 | 15 | ### [📖 Why I'm writing this guide?](pages/why_this_guide.md) 16 | 17 | ### [📖 Who is this guide for?](pages/who_is_it_for.md) 18 | 19 | ## PART 1. Being a professional developer. 20 | 21 | If you consider yourself a professional, you're no longer coding just for fun. You're now coding to help your company succeed. And this completely changes the game. 22 | 23 | You'll never become a true professional (or, in fact, anything more than a micromanaged code monkey) if you don't understand: 24 | 25 | ### [📖 Chapter 1. What does it mean to be a professional?](pages/chapter_01.md) 26 | 27 | What sets a professional apart from a hobbyist, the difference between passive, active, and proactive mindsets, and the nature of modern software development. 28 | 29 | ### [📖 Chapter 2. What makes companies successful?](pages/chapter_02.md) 30 | 31 | What _all_ companies need to succeed (even if they don't realize it), how they can achieve it, and why should you as a developer understand it. 32 | 33 | ### [📖 Chapter 3. How we, developers, can influence a company's success?](pages/chapter_03.md) 34 | 35 | Why you have more leverage than you think, how you can influence different facets of a company's success, and why it's crucial for you to do so. 36 | 37 | ## PART 2. Advancing your career. 38 | 39 | Being a true professional is not enough for getting noticed and promoted. To fast-track your career progression you have to purposefully steer it. 40 | 41 | In particular, it's essential for you to know: 42 | 43 | ### [📖 Chapter 4. What's the one (and only) thing that will get you promoted?](pages/chapter_04.md) 44 | 45 | Why the popular myth of the 10x developer is a misconception, what it means to make an impact, how it can turn you into a 100x developer, and why all tech companies consider it when promoting and hiring. 46 | 47 | ### [📖 Chapter 5. How do career ladders (levels) work across the industry?](pages/chapter_05.md) 48 | 49 | What are the similarities between levels across various companies, and what is the scope of impact and expectations associated with each level. 50 | 51 | ### 👨‍💻 Chapter 6. How to make a far-reaching impact? 52 | 53 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 54 | 55 | All the different ways in which you can make an impact, how to extend its reach, and why you don't have to be a manager or lead to make a company-wide splash. 56 | 57 | ### 👨‍💻 Chapter 7. How to take control of your career advancement? 58 | 59 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 60 | 61 | Why first impressions matter, how to get yourself and your accomplishments noticed, how to enlist your manager's support, and how to negotiate a promotion or a raise. 62 | 63 | ## PART 3. Developing a comprehensive skillset. 64 | 65 | To effectively make an impact and advance your career, you need the right (and well-rounded) set of skills and traits. 66 | 67 | To develop such a comprehensive skillset, you must learn: 68 | 69 | ### 👨‍💻 Chapter 8. What does it mean to be a well-rounded developer? 70 | 71 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 72 | 73 | Which categories of skills do you need to master, which ones require a basic understanding, and what's the rationale behind these particular categories. 74 | 75 | ### 👨‍💻 Chapter 9. Should you be a generalist or a specialist? 76 | 77 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 78 | 79 | The pros and cons of both approaches, how to combine them, and which path is more likely to advance your career in today's dynamic job market. 80 | 81 | ### 👨‍💻 Chapter 10. The definitive list of tech skills. 82 | 83 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 84 | 85 | Everything you need to design, develop, and maintain complex software systems, from coding and architecture to security and performance (and much more). 86 | 87 | ### 👨‍💻 Chapter 11. The definitive list of non-tech skills. 88 | 89 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 90 | 91 | All the skills revolving around _the process_ of developing complex systems, from soft skills and personal productivity to methodologies and business metrics (and much more). 92 | 93 | ### 👨‍💻 Chapter 12. Traits of an outstanding developer (and how to cultivate them). 94 | 95 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 96 | 97 | Why you need a specific set of personal traits to excel as a developer, what these traits are, and how they can be developed and refined despite the common misconception that one's traits are fixed. 98 | 99 | ### 👨‍💻 Chapter 13. How to create your personalized learning roadmap? 100 | 101 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 102 | 103 | How to prioritize skills at each level from Junior to seasoned Senior, determine learning order, identify skill gaps, decide which gaps to close first, and tailor your learning plan to your needs. 104 | 105 | ## PART 4. Learning effectively. 106 | 107 | Learning may seem like just another skill, but it's unique. To become a true professional developer and keep up with the fast-paced tech industry, you must master the art of effective and in-depth learning. 108 | 109 | This will help you become an expert and efficient learner: 110 | 111 | ### 👨‍💻 Chapter 14. A brief note on general learning techniques. 112 | 113 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 114 | 115 | Why the way you learn makes a critical difference, how much modern learning techniques differ from what we're taught at school, and a few pointers to kickstart your journey with effective learning methods. 116 | 117 | ### 👨‍💻 Chapter 15. Programming-specific learning advice (or how to quickly master new languages or frameworks). 118 | 119 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 120 | 121 | How to transfer knowledge from one language or framework to another, how to make the most of various learning resources, and how to optimally balance learning and experimentation. 122 | 123 | ### 👨‍💻 Chapter 16. How to learn in-depth (and why it's essential)? 124 | 125 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 126 | 127 | Why superficial understanding won't cut it for a true senior dev, how to avoid blindly applying best practices, and how to dig into their true roots, edge cases, and limitations. 128 | 129 | ### 👨‍💻 Chapter 17. How to learn without sacrificing your work-life balance? 130 | 131 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 132 | 133 | How to create the time you need without compromising your personal life by maximizing learning at your job, taking advantage of various learning opportunities, and creating an environment conducive to learning. 134 | 135 | ## PART 5. Staying relevant. 136 | 137 | Technology is changing too fast to learn everything just once and rely on that knowledge forever. If you're aiming for a successful lifelong career, you'll need to continuously update your skills or even completely reinvent yourself. 138 | 139 | To avoid becoming a relic of the past, you must not only know how to learn effectively but also: 140 | 141 | ### 👨‍💻 Chapter 18. How to best stay up-to-date with what's new? 142 | 143 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 144 | 145 | How to choose which outlets to follow, whether to focus on mainstream or niche sources, how closely related they should be to your current specialization, and how often to check them for updates to ensure you won't miss the next big thing. 146 | 147 | ### 👨‍💻 Chapter 19. How to decide what's worth investing your time (and how much)? 148 | 149 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 150 | 151 | How to filter out the hype, which novelties to experiment with, should you try out several in parallel, how much time and effort to invest, and should you become an early adopter. 152 | 153 | ### 👨‍💻 Chapter 20. How to avoid becoming obsolete? 154 | 155 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 156 | 157 | How to anticipate when your current specialization is at risk of becoming obsolete, identify what to transition to, and start preparing to reinvent yourself (while leveraging the benefits of existing expertise). 158 | 159 | ## PART 6. Experience level-specific advice. 160 | 161 | Most of the principles presented in this guide are universal. However, what you should prioritize, which projects or companies to seek, and which activities will help you the most differ based on your current level of experience. 162 | 163 | Here's some fine-tuned advice tailored to your specific stage in your career: 164 | 165 | ### 👨‍💻 Chapter 21. A fresh graduate or a junior. 166 | 167 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 168 | 169 | If you're about to start or are a year or two into your first job. What to focus on to kickstart your career the right way, build a solid foundation for further progression, and "level up" for the first time. 170 | 171 | ### 👨‍💻 Chapter 22. A mid-level or early senior. 172 | 173 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 174 | 175 | If you already know your stuff but still have some gaps in your skillset and don't yet feel like a true expert. How to fill those gaps, gain more experience rapidly, build a well-rounded and robust skillset, and become a top-tier senior professional. 176 | 177 | ### 👨‍💻 Chapter 23. A seasoned senior. 178 | 179 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 180 | 181 | If you're an experienced pro with multiple complex projects and years of experience under your belt, ready to advance your career to the next level. How to extend the scope of your impact beyond your direct team, take full control of your further progression, and successfully transition to staff or management roles. 182 | 183 | ### 👨‍💻 Chapter 24. A staff or principal-level veteran. 184 | 185 | > _[✉️ Coming Soon(ish)™](https://www.fromthetrenches.dev/p/dev-guide)_ 186 | 187 | If you are a grey-haired, battle-scarred mentor who knows your specialization inside and out. How to keep your skills fresh, stay relevant, avoid a plateau, and continue to improve even when you're at the top of your game. 188 | 189 | --- 190 | 191 | ⚠️ This guide is still in progress, so the above table of contents may (and most probably will) change. As you dive deeper into a given topic, it's normal to get new ideas and discover better ways to organize them. 192 | 193 | **[✉️ Get notified when a new chapter is out](https://www.fromthetrenches.dev/p/dev-guide)** 194 | 195 | --- 196 | 197 | * [NEXT: Why I'm writing this guide?](pages/why_this_guide.md) 198 | -------------------------------------------------------------------------------- /images/cover.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FromTheTrenches/DevGuide/b53ecdcd8fed1ca28222183a3ef446609fbd7993/images/cover.webp -------------------------------------------------------------------------------- /pages/TBD.md: -------------------------------------------------------------------------------- 1 | # This chapter is Coming Soon(ish)™ 👨‍💻 2 | 3 | ### **[✉️ Get notified when a new chapter is out](https://www.fromthetrenches.dev/p/dev-guide)** -------------------------------------------------------------------------------- /pages/chapter_01.md: -------------------------------------------------------------------------------- 1 | # What does it mean to be a professional? 2 | 3 | A professional is someone you hire when you lack the expertise, time, or resources to solve a problem on your own. 4 | 5 | The key element here is solving a problem, not having the expertise. A hobbyist doing something for fun, or a performer showcasing their mastery for others to admire, can be equally skilled. What distinguishes a professional is the purpose of solving their customer's problems. 6 | 7 | And this requires a radically different mindset. 8 | 9 | ## Three mindsets: passive, active, and proactive. 10 | 11 | Imagine hiring a chef to prepare meals for you. 12 | 13 | **The _PASSIVE_ approach** would be to blindly follow instructions. You'd have to know not only what dish you want but also how to prepare it, and provide a detailed recipe to the chef. 14 | 15 | Because it's you who knows the recipe the best, you may even have to micromanage the process a bit along the way, tasting, checking how well done the dish is, and so on. 16 | 17 | In this case, you probably wouldn't even call your hire a chef. Apart from the rare instances where you are the expert on the matter and just need unqualified help to save you some time, this mode of working is undesirable. And even the benefit of saving time seems dubious, considering how time-consuming it would be to prepare such painstakingly detailed instructions. 18 | 19 | **The _ACTIVE_ approach** would be to receive a set of high-level requirements (what kind of dish, how well done, spicy or not, which allergens to avoid) and prepare a delightful meal without further detailed instructions or micromanagement. 20 | 21 | In this mode, you still need to precisely know _what_ you want, but you don't need to understand _how_ to achieve it - your chef will handle it, likely much better than you ever could on your own. 22 | 23 | This approach has practical uses. For example, it's what you typically expect when you go to a restaurant. But it may prove insufficient for more complex or extensive cases, where you have only a vague understanding of what you want. 24 | 25 | **The _PROACTIVE_ approach** would be to receive success criteria, such as "I want to organize an all-night wedding party for 30 people", or "I need to provide healthy, balanced catering for school kids, with meals not repeating over the course of a month", then take care of the entire process end-to-end. 26 | 27 | In this scenario, you don't really know what combination of dishes would work best - you just know the end result you want to achieve. And it is up to the chef to not only prepare delicious individual dishes but also to decide on the complete meal plan. 28 | 29 | This demands more from the chef and is often more expensive for you as the client. But it yields the best results, as the chef is now focused on your holistic success, not just individual dishes. When hiring a professional, this is where you most often want to be. 30 | 31 | And it's particularly true for complex, team-oriented endeavors such as software development. 32 | 33 | ## The nature of modern software development. 34 | 35 | As Marc Andreessen famously said in 2011, software is eating the world. 36 | 37 | Modern companies depend on software as never before. Even if they don't sell it directly as a product, software is still fundamental to driving their operations and growth. It's critical for their customers, employees, suppliers, and partners. It's the engine that runs the business - and the network that connects it with other businesses. It's the cornerstone of the company's success. 38 | 39 | At the same time, the software got bigger. Much bigger. And the software development process got incomparably more complex: Huge teams. The whole portfolios of products. A vast network of interconnected APIs. Complex distributed architectures. Tens or even hundreds of external vendors. Constant progress at a crazy pace. Cutthroat competition and continuously changing user tastes. No manager, analyst, or architect is able to micromanage it all. The responsibility for the company's success has to be distributed. 40 | 41 | This means that _every_ developer needs to be a proactive chef, not just tech leads and managers. 42 | 43 | ## Raising the bar for professional software developers. 44 | 45 | The concept that a developer shouldn't just churn out code like a robot isn't new. Terms like "cowboy coder" or "code monkey" predate my 20+ years-long programming career. However, their original definitions were limited. They referred to a programmer who simply writes code according to given specifications, avoiding more conceptual, design, or architectural work. 46 | 47 | Nowadays, that definition doesn't cut it anymore. 48 | 49 | With the complexity, teamwork, and user-centricity of modern software development, the game has completely changed. It's no longer sufficient to design, architect, and code the technical aspects of a system effectively. Professional developers must act as proactive chefs. We're hired to generate business value. To help our companies grow and thrive. To help them achieve - and sustain - their success. 50 | 51 | Therefore, my modern, revised definition of a code monkey is: _**A code monkey is a developer who contributes only to developing software, not to the holistic success of the company**_. 52 | 53 | This definition is more ambitious. It demands a completely new mindset and a different, broader set of skills. It might even seem intimidating. But it's achievable, and becoming a true professional is immensely more satisfying than being just a micromanaged, mindless drone. 54 | 55 | However, to make this leap, you first need to understand what makes companies successful. 56 | 57 | --- 58 | 59 | * [NEXT: What makes companies successful?](chapter_02.md) 60 | * [PREV: Who is this guide for?](who_is_it_for.md) 61 | * [Table of contents](https://github.com/FromTheTrenches/DevGuide#-chapter-1-what-does-it-mean-to-be-a-professional) 62 | -------------------------------------------------------------------------------- /pages/chapter_02.md: -------------------------------------------------------------------------------- 1 | # What makes companies successful? 2 | 3 | What defines a true professional is their focus on the success of their company, not just churning out code like a robot. 4 | 5 | Which is, obviously, impossible without understanding what makes a company successful. 6 | 7 | Of course, there's no universal recipe. Building a successful company is incredibly challenging and requires getting hundreds of small details right. 8 | 9 | But while every company is unique, at a high level they all share a few core characteristics. If you understand them - and how to influence them as a developer - you'll be well on your way to contributing to your company's success and becoming a highly sought-after professional. 10 | 11 | So, what makes companies successful? 12 | 13 | ## The 4 key elements of the company's success. 14 | 15 | The recipe for a company's success, while insanely hard to achieve, is, at its core, very simple: 16 | 17 | 1. **Gain competitive advantage.** First and foremost, a company needs to gain a competitive advantage. It needs to be better than the competition (or at least differentiate itself enough) in one or more of these aspects: having a better product, being more technologically innovative, building new products faster, or being cheaper. 18 | 19 | 2. **Endure rapid growth.** Then, when the company becomes successful, it inevitably starts to grow. Rapid growth is hard to manage and - if the company is not skillful at it - can destroy its competitive advantage. 20 | 21 | 3. **Sustain competitive advantage.** Next, to be truly successful, a company needs to sustain its competitive advantage over time. It needs to cut enough corners to win now - but not as many as to die the "death of a thousand cuts" later. 22 | 23 | 4. **Evolve and adapt.** Finally, the world never stands still. To not lose its competitive edge, a company needs to continuously evolve, to adapt to the ever-changing user tastes, competition, and market. 24 | 25 | Let's take a look at these ingredients in more detail. 26 | 27 | ## Competitive advantage: Product 28 | 29 | Building a better product is the most obvious competitive advantage. If users like and buy your product more than the other ones - you win. But what convinces them to do so? 30 | 31 | It all boils down to two things: addressing users' needs and providing a great user experience. 32 | 33 | ### How can a company achieve it? 34 | 35 | * **Adopt an empirical, iterative approach.** Discover what users want through a series of short experiments. 36 | 37 | * **Excel at rapidly validating ideas.** Become efficient at quick iterations and prototyping, and develop a robust toolbox of product discovery and prototyping techniques. 38 | 39 | * **Engage closely with users and understand what they do.** Build strong relationships, gather feedback directly, and capture a robust set of metrics from product usage. 40 | 41 | * **Foster cross-functional collaboration.** Ensure close cooperation between engineering, product, design, marketing, and commercial teams so they all work together towards the same goal, without silos or stage gates. 42 | 43 | * **Develop top-notch UX capabilities.** Don't just understand and solve users' problems, but do so in a smooth and elegant manner. 44 | 45 | ## Competitive advantage: Technology 46 | 47 | Providing superior technical capabilities is another competitive edge. This is different from creating a more polished product. While you still need to solve real user problems, your winning strategy is not focused on refining the product but on making it capable of things no one else is capable of. 48 | 49 | ChatGPT is a famous example. When it was first released, its interface was rudimentary and clunky, features limited, and it wasn't particularly tailored to solve specific user problems. However, its novelty and unprecedented capabilities made it one of the fastest-growing products ever. 50 | 51 | It doesn't have to happen on such a dramatic scale, though. And it's achievable even without "big tech" resources. Smaller technical advancements can provide a competitive edge, too: make processes faster for the user, reduce their costs, make the product more capable. 52 | 53 | ### How can a company achieve it? 54 | 55 | * **Reap the benefits of being an early adopter, not an inventor.** Understand how to still stay ahead of its competition without bearing the costs of developing the solution yourself. 56 | 57 | * **Keep up with the latest trends.** Be on the constant lookout for new and upcoming technological advancements, even outside of its direct niche. 58 | 59 | * **Know how to capitalize on these advancements.** Understand how to repurpose and adapt them to its specific business niche. 60 | 61 | * **Understand which trends are worth investing in.** Develop a strong intuition for distinguishing potential breakthroughs from fads. 62 | 63 | * **Excel at incorporating new technologies quickly.** Become proficient in researching, prototyping, learning, and integrating new solutions. 64 | 65 | ## Competitive advantage: Process 66 | 67 | The next way of gaining a competitive advantage is through better processes. In other words, the ability to build stuff faster than the competition without sacrificing quality. In the short term, it will give your company the first-to-market advantage. In the long term, it will allow you to experiment more rapidly, which will impact also the first two advantages: better product and technical innovation. 68 | 69 | An important part of a good process is also the ability to continuously refine the process itself, to stay ahead of the competition in the long run. 70 | 71 | ### How can a company achieve it? 72 | 73 | * **Prioritize developer productivity.** Invest in tooling, reducing technical debt, modular architecture, and an infrastructure that enables fast and frequent deployments. 74 | 75 | * **Maintain high code quality.** Don't get bogged down by bug fixes and hard-to-understand code. 76 | 77 | * **Adopt modern product discovery and development processes.** Implement lean and agile methodologies, continuous integration/continuous deployment, feature-flag-based development, and similar. 78 | 79 | * **Implement a solid continuous improvement process.** Ensure it has a system in place to consistently refine and optimize its processes. 80 | 81 | * **Strike the right balance between going fast now and maintaining speed over the long term.** Navigate the fine line between cutting too many corners and over-engineering, as well as between building things fast and building the right things. 82 | 83 | ## Competitive advantage: Operations 84 | 85 | The last type of competitive advantage is more efficient operations. Depending on your company's profile you may have different teams involved in acquiring, onboarding, and supporting users: sales, call center, customer success, customer support, implementation, operations, invoicing, and so on. Making these teams faster, cheaper, and more user-friendly is another way to win over the competition. 86 | 87 | ### How can a company achieve it? 88 | 89 | * **Equip "operations" teams with high-quality tools.** Make them as good as customer-facing features, not just an afterthought. 90 | 91 | * **Provide "operations" teams with outstanding tech support.** Ensure it's responsive, timely, and proficient. 92 | 93 | * **Ensure that "operations" teams have access to necessary expertise.** Provide them with robust documentation, technical training, and direct access to engineering teams. 94 | 95 | ## Growth 96 | 97 | To become successful, companies need to constantly grow their revenue. It almost always means also growing the team. This, in turn, means more recruitment effort (including onboarding and mentoring), a bigger codebase, more complicated architecture, and increased complexity of organizational structure. It also makes communication, teamwork, and management more challenging - usually to the point where top-down micro-management doesn't cut it anymore. 98 | 99 | The ability to cope with these complexities is a necessary ingredient to become a successful company. 100 | 101 | ### How can a company achieve it? 102 | 103 | * **Develop the capability to rapidly grow the team.** Become proficient at recruitment, onboarding, and training new hires. 104 | 105 | * **Effectively scale the organizational and management structure.** Build a network of autonomous, self-organizing teams that don't need to be micro-managed. 106 | 107 | * **Make architecture and codebase modular.** Enable multiple teams to work concurrently without conflicts. 108 | 109 | * **Make it easy to share, discover, and reuse existing code.** Empower teams to go fast without duplicating work. 110 | 111 | * **Ensure effective coordination between teams.** Foster top-notch communication, goal-setting, planning, documentation, and cross-team collaboration. 112 | 113 | ## Sustainability 114 | 115 | Companies are long-living entities. Gaining a competitive advantage and achieving initial success is only the start of the game. A company needs to sustain its success over decades. 116 | 117 | But when a company is under constant pressure, fighting off new challengers and chasing ever-changing market conditions, it's often necessary to cut corners. Which may put the company at risk further down the road. 118 | 119 | To thrive over a long time, a company needs to strike a fine balance between aggressive and sustainable. 120 | 121 | ### How can a company achieve it? 122 | 123 | * **Keep technical debt under control.** Consciously manage it, keeping it in check without compromising business value or getting bogged down in massive, risky refactoring projects. 124 | 125 | * **Make deliberate architectural, vendor, and technology choices.** Be aware of their consequences: vendor lock-in, maintainability, long-term support, ease of learning, ease of recruitment, the robustness of the ecosystem, and ease of future replacement. 126 | 127 | * **Be aware of the business impact of technical decisions.** Understand which opportunities these decisions may enable or hinder. 128 | 129 | * **Balance functional and non-functional concerns.** Never stop delivering value to customers but don't neglect the non-functional requirements of its product. 130 | 131 | * **Avoid ad-hoc decisions.** Develop and follow a deliberate, long-term technical strategy. 132 | 133 | ## Adaptability 134 | 135 | To stay successful for a long time, sustainability alone is not enough. Companies also have to continuously adapt (or even reinvent themselves). 136 | 137 | A company has to adapt to the macro-scale events (changing market conditions, changing customer tastes, new technologies, economic situation, fashion, and social trends) and to the micro-scale events (finishing and starting projects, people leaving and joining, reorganizing teams or departments, adopting new methodologies and processes). 138 | 139 | ### How can a company achieve it? 140 | 141 | * **Be able to swiftly pivot market strategies.** Cultivate agility to adapt to changing market conditions. 142 | 143 | * **Build the capability to efficiently assimilate new technologies.** Maintain the platform and train the team in a way that makes this possible. 144 | 145 | * **Develop the ability to reorganize quickly.** Excel at adopting new processes and adjusting the organizational structure. 146 | 147 | * **Effectively implement radical changes.** Be able to accomplish this without causing chaos, slowing down, compromising quality, freezing projects, or requiring massive retraining or rehiring. 148 | 149 | ## Do you really need to know all of this? 150 | 151 | If you want to be a true professional - the "proactive chef" from the previous chapter - then yes. 152 | 153 | The purpose of a professional developer is to make the product and company successful. That's why we're hired. That's why we exist. And modern software is so complex that this process can't be micromanaged. We must proactively contribute - become the experts on the topic. 154 | 155 | If you understand the holistic view - what makes companies successful, how the software fits into this puzzle, and how you can influence it as a developer - you'll be invaluable. (And it also opens the door to a future leadership career.) 156 | 157 | Plus, it's far more satisfying to understand the whole picture than just blindly follow what you're told. 158 | 159 | And, what's most important, while many of the points discussed above might appear to be management problems, beyond the reach of an individual developer, you have much more influence over them than you think. 160 | 161 | --- 162 | 163 | * [NEXT: How we, developers, can influence a company's success?](chapter_03.md) 164 | * [PREV: What does it mean to be a professional?](chapter_01.md) 165 | * [Table of contents](https://github.com/FromTheTrenches/DevGuide#-chapter-2-what-makes-companies-successful) 166 | -------------------------------------------------------------------------------- /pages/chapter_03.md: -------------------------------------------------------------------------------- 1 | # How we, developers, can influence a company's success? 2 | 3 | To achieve and maintain success, a company has to overcome numerous challenges: gain a competitive advantage (through product, technology, processes, or operations), endure the rapid growth that success inevitably brings, sustain competitive advantage over the long term, and continuously evolve and adapt to do so. 4 | 5 | They may seem like problems for the company's management, not for an individual developer. Yet, even as a developer, you can have far more influence over these concerns than you think. 6 | 7 | And it's not only that you can. You *have* to. Given the size and complexity of modern software-based products, even "regular" developers must proactively contribute to solving these challenges. It's just impossible for a small group of managers, architects, and tech leads to micromanage it all. 8 | 9 | So, how can you, as a developer, influence different facets of a company's success? 10 | 11 | ## Competitive advantage: Product 12 | 13 | * **Improve your communication skills.** Be able to collaborate effectively across functions, with designers, product managers, business stakeholders, and users. Especially, learn how to talk to non-programmers (explain technical concepts simply, abstain from jargon, be patient with less tech-savvy people, etc.). 14 | 15 | * **Learn the principles of experimentally discovering user needs.** Familiarize yourself with Agile methodologies, empiricism, iterative development, Lean Startup concepts, and product discovery. 16 | 17 | * **Aid product managers in validating ideas faster.** Master working in short iterations, building small MVPs (Minimal Viable Products), and rapid prototyping. 18 | 19 | * **Resist the urge to solve every problem with new code.** Get comfortable utilizing third-party integrations and no-code solutions, and rapid idea validation techniques such as the "fake door", "Wizard of Oz", or "concierge". 20 | 21 | * **Learn the fundamentals of user behavior tracking.** Familiarize yourself with key product metrics, analytics approaches (page views tracking, event tracking, backend API requests tracking, heatmaps, etc.), and the analytics tooling ecosystem (Google Analytics, Pendo, Segment, HotJar, and so on). 22 | 23 | * **Understand the basics of usability and user experience (UX).** Gain enough UX fluency to collaborate effectively with designers and product managers, and to accommodate their needs. 24 | 25 | ## Competitive advantage: Technology 26 | 27 | * **Stay up to date with the newest trends and technological advancements.** Especially with the emerging, not yet widely adopted ones. Cultivate your ability to identify and leverage opportunities to gain a technical advantage, and to distinguish promising solutions from fads. 28 | 29 | * **Maintain a good overview of the existing ecosystem.** Stay informed about both open-source and commercial solutions: languages, frameworks, libraries, cloud and SaaS platforms, APIs, tooling, and so on. Often, the advanced capability you need is already available as a third-party library or service - you just need to know it exists and understand how it can be used. 30 | 31 | * **Learn about your company's business domain, its product, and its competition.** Build enough context to be able to suggest innovative technical solutions that effectively address the business problem at hand. 32 | 33 | * **Stay up-to-date with what's happening beyond your company's domain.** Track what other popular apps are doing - what's the current state of the art in the broader industry - so you can "steal" and adapt the best ideas to your company's needs. 34 | 35 | * **Experiment with new stuff regularly.** Get a good enough grasp of what it is about to be able to quickly learn more about it when needed. 36 | 37 | * **Become proficient at integrating new technologies into the existing architecture.** Hone your skills in researching, rapidly learning new tech when needed, and creating quick proofs-of-concept and prototypes. 38 | 39 | ## Competitive advantage: Process 40 | 41 | * **Become a fast, efficient coder.** Learn your IDE in-depth. Get good at debugging. Use tools that speed you up: auto-formatters, code generators, code intelligence, hot reloading, AI assistants, etc. Understand how to organize the codebase to navigate around faster. 42 | 43 | * **Understand how application architecture impacts developer productivity.** Learn how it affects not only scalability and performance but also efficient teamwork, code navigation, and debugging. 44 | 45 | * **Develop a robust toolbox of techniques to minimize and efficiently fix bugs.** Deepen your knowledge of unit testing, error handling, application monitoring, and logging. 46 | 47 | * **Understand technical debt.** Know how to strike the right balance between speed and maintainability. Become good at making the right compromises between delivering business value and maintaining necessary non-functional features (reliability, performance, security, scalability, maintainability, quality). 48 | 49 | * **Familiarize yourself with modern software development and delivery processes.** Gain a comprehensive understanding of continuous integration/continuous deployment, Git branching strategies, and feature-flag-based development. At a minimum, acquaint yourself with the basics of Scrum, Kanban, and Lean methodologies. 50 | 51 | * **Acquaint yourself with process improvement techniques.** Understand the practices of retrospectives, project post-mortems, root-cause analysis, and similar methods. 52 | 53 | * **Be open to experimenting, to trying new processes and techniques.** Be proactive in proposing and championing improvement ideas. But also know how to balance implementing improvements with generating business value. 54 | 55 | ## Competitive advantage: Operations 56 | 57 | * **Learn how your various "operations" teams work.** Understand what they do day-to-day, what metrics they use to measure their success, what makes them efficient and what slows them down, and how they interact with customers. 58 | 59 | * **Maintain a good overview of resources to accelerate the creation of internal tools.** For example, automatic admin panel generators, CMS frameworks, UI component libraries, and so forth. 60 | 61 | * **Understand the trade-offs between buying, building, and integrating.** Be equipped to assist your company in deciding the best approach for internal tools such as admin panels, invoicing systems, CRM platforms, inventory management, order tracking systems, etc. 62 | 63 | * **Know how to communicate effectively with customer-facing teams.** Learn how to most efficiently keep these teams updated about the status and expected completion time of your work, such as bug fixes, so they can easily obtain and relay this information to customers. 64 | 65 | * **Understand personal data privacy and security considerations.** Learn how to enhance the efficiency of your "operations" teams by providing them with tools such as user-impersonation or granting them access to user data for tech support purposes, without compromising user privacy. 66 | 67 | ## Growth 68 | 69 | * **Learn how to modularize the codebase and architecture.** Understand what allows multiple teams to collaborate without collisions. Familiarize yourself with Domain Driven Design, micro-services, micro-frontends, API design principles, git repository topologies, and similar. Understand how to evolve the architecture over time, to accommodate the growing size of the platform and the growing number of teams, without over-engineering it early on. 70 | 71 | * **Learn how to make code easy to read, understand, debug, navigate, and modify for other people.** Understand the concept of cognitive load. Get a good grasp of clean code principles. 72 | 73 | * **Understand what makes the whole engineering organization go faster.** Learn how design systems, component libraries, coding conventions, and UI guidelines can facilitate this. Understand compromises between what to standardize and what can be different per team. 74 | 75 | * **Master effective communication and collaboration.** Ensure your verbal and written communication is clear, understandable, concise, and on-point. Learn how to effectively brainstorm, make decisions together, and navigate disagreement or conflict. Understand how to effectively sync and cooperate with the other teams. 76 | 77 | * **Find opportunities to help with recruitment.** If not by directly participating in the interviews, then by reviewing CVs, preparing and evaluating coding and system design challenges, and promoting your company (through blogging, social media, conferences, or by directly recommending your colleagues). 78 | 79 | * **Make onboarding easier.** Understand and use industry-wide standards to lower the entry point for new hires. Know how to document and explain architecture and logic. Be responsive, non-condescending, and open to answering all questions. 80 | 81 | * **Help with mentoring.** Understand what tasks to assign to someone new or more junior and how frequently to sync with them to not overwhelm them but also not leave them hanging. Be supportive and patient. 82 | 83 | * **Take ownership of projects, initiatives, and modules.** This will reduce the burden on management, eliminating the need for micro-managing everything. 84 | 85 | ## Sustainability 86 | 87 | * **Get a good understanding of the concept of technical debt and the ways of managing it.** Develop a keen eye for both under and over-engineering. Learn the patterns and principles of code maintainability and evolving complex legacy codebases over time. 88 | 89 | * **Understand the balance between robustness and speed.** Be aware of the short- and long-term trade-offs between the development speed and the concerns like reliability, performance, scalability, security, privacy, usability, or maintainability. 90 | 91 | * **Understand short- and long-term implications of various architectural decisions.** For example, monolith vs microservices, native vs hybrid mobile, REST vs GraphQL, single-page app vs server-side rendering, or monorepo vs multiple repos. 92 | 93 | * **Know how to evaluate new technologies not only by their "cool" factor.** Be conscious also of the aspects like the learning curve, maintenance cost, ease of recruitment, vendor lock-in, or long-term support. Understand the trade-offs between building, buying, and using open source. 94 | 95 | * **Understand how technology choices impact business and UX capabilities.** Recognize how they can expand or limit what the company will be able to solve for its users. 96 | 97 | * **Participate in setting technical vision and direction.** Don't just passively follow business requests. Provide guidance and counsel to the rest of the organization. 98 | 99 | ## Adaptability 100 | 101 | * **Familiarize yourself with the principles of adaptation.** Learn about the empirical, experimental, and Agile approaches. 102 | 103 | * **Be able to quickly pivot and adapt to new trends, tech, and methodologies.** Become an eager learner. Know how to learn fast, how to research, and how to efficiently find information. 104 | 105 | * **Learn how to build adaptable systems.** Understand how to architect systems to make it easy to gradually migrate parts of them to new tech in the future and how to effectively carry out such migrations. 106 | 107 | * **Make yourself open to change.** Most people dislike and avoid it. Train yourself to become comfortable with it - to thrive in a high-change environment. Get good at adapting to new tech, processes, projects, teams, and roles. 108 | 109 | * **Learn how to quickly build rapport with new people.** Make it smooth and frictionless to join a new team, project, or initiative. 110 | 111 | * **Be open to new points of view.** Don't hesitate to revise yours when confronted with compelling evidence. 112 | 113 | ## Isn't this list too ambitious? 114 | 115 | The above list of skills - many of them soft or process-oriented rather than code-related - may feel overwhelming, if not intimidating. It's a massive paradigm shift and a huge amount of knowledge, much of it outside of a typical developer's comfort zone. 116 | 117 | Do you have to master it all? No. But it's also not completely impossible. And if you want to be a true professional, you must at least understand the big picture and be open to developing skills beyond coding. Plus, be willing to step out of your comfort zone to proactively *use* those new skills when the opportunity arises. 118 | 119 | This will set your career on a rapid-growth trajectory, to senior and beyond - even principal or senior management roles. 120 | 121 | However, skills alone won't automatically land you a promotion. You also need to understand how to utilize them for maximum impact and how to ensure your contributions are noticed. 122 | 123 | --- 124 | 125 | * [NEXT: What's the one (and only) thing that will get you promoted?](chapter_04.md) 126 | * [PREV: What makes companies successful?](chapter_02.md) 127 | * [Table of contents](https://github.com/FromTheTrenches/DevGuide#-chapter-3-how-we-developers-can-influence-a-companys-success) 128 | -------------------------------------------------------------------------------- /pages/chapter_04.md: -------------------------------------------------------------------------------- 1 | # What's the one (and only) thing that will get you promoted? 2 | 3 | Understanding what makes companies successful - and how you can influence it as a developer - is a necessary first step towards swiftly advancing your career. 4 | 5 | But, by itself, it is not enough. 6 | 7 | While no manager can ensure the company's success single-handedly — that's why, as we discussed earlier, even "regular" developers must contribute to the company's success — it still makes a substantial difference *how much* you contribute to it. 8 | 9 | The bigger your contribution - the bigger "chunk" of a company's success depends on you - the more valuable you become. And the higher your chances of getting noticed and promoted. 10 | 11 | So how do you generate more value? 12 | 13 | ## The common misconception of a "10x dev" 14 | 15 | There's a common belief that the value you generate as a developer depends on your output. 16 | 17 | If you google the term "10x developer", you'll get a lot of results related to individual performance. Check out the quotes from a few of the topmost results that I've got: 18 | 19 | * _"A ten times developer is the developer who is ten times more efficient than the average developer on a team."_ 20 | * _"These are the people you want to solve your problems; they’ll do it in 1/10th of the time, with 1/10th of the number of lines of code."_ 21 | * _"I am accustomed to being on teams where I am doing 60% of the work with 7-8 developers on the team."_ 22 | 23 | Statements like these make me cringe. 24 | 25 | This. Is. Not. How. We. Build. Modern. Software. 26 | 27 | Software development is a team game. Or even a team of teams game. And the game is scored by business outcomes, not raw outputs. By being *effective* as a team and organization, not *efficient* as an individual. 28 | 29 | As a VP of engineering, I'm not looking for competitive coders. I don't care how many lines of code you crank in what time. And a single developer doing 60% of the team's work is not something I'd brag about but a dysfunction I'd consider my priority to fix. 30 | 31 | So who I *am* looking for, then? Let's consider the following math: 32 | 33 | ## The simple math of working in a team 34 | 35 | If you improve only your own output, you *ADD* to the output of your team. 36 | 37 | But if you improve every team member's output, you *MULTIPLY* the output of your team. 38 | 39 | And multiplication beats addition pretty quickly. 40 | 41 | Even if you truly are a mythical 10x dev, you'll only increase your team's output by 10 "units", no matter the size of the team. But if you improve the whole team's output by just 2x, you'll increase it by 10 "units" for a team of only 10 people. And by 100 "units" for a team of 100 people. 42 | 43 | And we're talking about an extreme situation when you are 10 times more efficient than *EVERY* other developer on the team. In reality, multiplication will beat addition for teams much smaller than 10 people. 44 | 45 | Plus, we're talking only about the raw output: how hard do you push, but not in which direction do you push (or if you even push the right object to begin with). And the direction *the whole team pushes in* is critical. 46 | 47 | ## Your team's and your individual performance are connected 48 | 49 | It doesn't matter if a motorboat has a 100 or 1000-horsepower engine if this engine propels the boat sideways or backward, not forward. If you push in the wrong direction, you may not only waste your own output - you may undermine the work of your whole team. You can become a _-10x_ developer. 50 | 51 | And this relationship is mutual. 52 | 53 | Even if *you* push in the right direction, your god-mode 10x productivity can be negated if the rest of your team is pushing in the opposite direction. 54 | 55 | You need to help them, so they can help you. Cancel the weaknesses of your team so they don't cancel your performance. 56 | 57 | It may sound counter-intuitive, but focusing on making your whole team more effective is often a better way to boost also your individual performance than focusing only on your own output, as the team's capabilities set the limits for the individual performance of its members. 58 | 59 | That's why I and other managers aren't looking for individual efficiency as much as for the capability to positively impact your team. And the broader impact you make - the more people you help push the right object in the right direction with a maximum force - the more value you generate for your company. 60 | 61 | ## The impact is everything 62 | 63 | Some companies explicitly recognize (and even measure) the concept of impact, while others may not be aware of it. But even in those that aren't, your impact will still be noticed, even if not consciously. Ultimately, **the impact you make is the one and only thing that will get you promoted**. 64 | 65 | Don't get me wrong - it doesn't mean that direct contributions don't matter. After all, you were hired to develop software. Plus, unless you are a full-time manager, it's hard to positively impact your team without making any direct contributions. And you surely *can* make an impact by being a 10x dev - as long as you are a 10x dev who sets an example for the team, not the one who brags about doing most of the work and belittles other team members. 66 | 67 | The key point is, being an outstanding individual contributor is not the only way, nor even the best way. 68 | 69 | Continuing the "pushing" analogy - maybe a bit too far but I want this concept to sink - there are many ways in which you can help your team as much or even more than just by being the strongest pusher. To list just a few: 70 | 71 | * Identifying the right object to push. 72 | * Knowing in which direction to push. 73 | * Creating more leverage by building and utilizing the right tools. 74 | * Smoothing the surface you're pushing on. 75 | * Helping the team coordinate to push more in unison. 76 | * Training your teammates so everyone gains more strength. 77 | * Showing them how to push with better technique. 78 | 79 | And as your seniority (and thus the sphere of your influence) increases, these less direct contributions become more powerful, while the impact of directly pushing diminishes. 80 | 81 | This may seem too abstract for now. We'll explore how this translates to software development in one of the next chapters. However, let's first examine how the concept of impact is viewed across the industry and how it affects formal career ladders at many top companies. 82 | 83 | --- 84 | 85 | * [NEXT: How do career ladders (levels) work across the industry?](chapter_05.md) 86 | * [PREV: How we, developers, can influence a company's success?](chapter_03.md) 87 | * [Table of contents](https://github.com/FromTheTrenches/DevGuide#-chapter-4-whats-the-one-and-only-thing-that-will-get-you-promoted) 88 | -------------------------------------------------------------------------------- /pages/chapter_05.md: -------------------------------------------------------------------------------- 1 | # How do career ladders (levels) work across the industry? 2 | 3 | The most important thing for a company is its long-term success. In other words, the *outcomes* produced by the whole organization, not the individual *output* of a single employee. 4 | 5 | By amplifying the outcomes of your entire team or department - by becoming a *multiplier* - you can influence your company's success much more than as an individual contributor, even a mythical "10x" one. 6 | 7 | And the more people you influence, the larger share of your company's success you impact, and the more valued and rewarded you become. 8 | 9 | Which is reflected in how most top companies structure their career ladders. 10 | 11 | ## What gets you promoted at most software companies? 12 | 13 | Let's take a look at engineering career ladders at a couple of well-known companies: CircleCI, Carta, Spotify, and Dropbox. 14 | 15 | I have chosen these four companies because they describe their ladders most succinctly and thus can be quoted almost directly. But a similar pattern repeats widely across the whole industry. 16 | 17 | *(The [Progression.fyi](https://progression.fyi) site is a great starting point for exploring career ladders at a broader scale.)* 18 | 19 | So what gets you promoted in all these companies? What do they reward the most? 20 | 21 | ### CircleCI 22 | 23 | CircleCI uses a 6-level ladder (E1-E6): Associate Engineer, Engineer, Senior Engineer, Staff Engineer, Senior Staff Engineer, and Principal Engineer. 24 | 25 | Levels E1-E3 focus on the execution of work. E1 within task, E2 within epic/project, E3 within team. 26 | 27 | Levels E4-E6 utilize skills to scale and generate leverage. They facilitate, guide, and mentor others. E4 within team and with team's business stakeholders, E5 across several teams, E6 across organization. 28 | 29 | *Source: [CircleCI Engineering Competency Matrix](https://docs.google.com/spreadsheets/d/131XZCEb8LoXqy79WWrhCX4sBnGhCM1nAIz4feFZJsEo/edit#gid=0)* 30 | 31 | ### Carta 32 | 33 | Carta uses a 7-level ladder (L2-L8). In their own words: 34 | 35 | > It’s easy to articulate the single most important thing for leveling: your impact on the company. We can sum up the entire system by describing the (rough) impact we expect employees to have as they progress: on tasks (L2), on features (L3), on problems (L4), on teams (L5), on the organization (L6), on the company (L7), and on the industry (L8). 36 | 37 | *Source: [Engineering levels at Carta](https://medium.com/building-carta/engineering-levels-at-carta-d33db2a55a20)* 38 | 39 | ### Spotify 40 | 41 | Spotify doesn't care that much about external titles like senior, staff, or principal developer. They are very flexible about them and let employees choose what makes the most sense for them. But internally, they use a 4-level ladder organized by what they call "scopes of impact". And they describe these 4 levels ("steps") like this: 42 | 43 | > We have identified four Steps in your career path at Spotify. Each Step is marked not only by increased responsibility, but also by your increased impact within tech: Individual Step, Squad/Chapter Step, Tribe/Guild Step, Technology/Company Step. 44 | 45 | *Source: [Spotify Technology Career Steps](https://engineering.atspotify.com/2016/02/spotify-technology-career-steps/)* 46 | 47 | ### Dropbox 48 | 49 | Dropbox uses a 7-level ladder (IC1-IC7): Software Engineer 1-4, Staff Software Engineer, Principal Software Engineer, and Senior Principal Software Engineer. 50 | 51 | This is how they describe the "extent of influence" for each level: 52 | 53 | * IC1: I work within the scope of my team with *specific* guidance from my manager. 54 | * IC2: I work primarily within the scope of my team with *high level* guidance from my manager. 55 | * IC3: I work primarily with my direct team and cross-functional partners while driving cross-team collaboration for my project. 56 | * IC4: I am a strong leader for my team with my impact beginning to extend outside my team. 57 | * IC5: I am increasingly influencing the roadmaps of other Dropbox teams to achieve business impacting goals. 58 | * IC6: I typically influence the technical strategy of a group. 59 | * IC7: I typically influence the department and company-wide strategy to achieve business-impacting goals. 60 | 61 | *Source: [Dropbox Engineering Career Framework](https://dropbox.github.io/dbx-career-framework/)* 62 | 63 | As you can see, career ladders vary quite a bit between different companies. However, there's one very obvious and critically important commonality they all share. 64 | 65 | ## It's all about impact 66 | 67 | It doesn't matter if a given company frames it in terms of task complexity, mentoring, leverage, size of the affected team, or more strategic decisions. Going up the career ladder always means making more impact. Which usually boils down to becoming a multiplier for more people. (However, as we'll discuss in the next chapter, this isn't the same as managing them.) 68 | 69 | This is true even for companies that don’t explicitly frame impact or don't have formally defined career ladders. Your position in such a company – your salary, autonomy, decision-making power, and so on – will still depend on the extent of the impact you make. It will just be judged more intuitively. 70 | 71 | So, how does this translate into practice? 72 | 73 | ## A simplified career ladder framework 74 | 75 | Some companies have just a single position, "Developer". Others have multi-tiered ladders, with positions like "Senior Developer III" or "Developer Level 7". 76 | 77 | But when you look at it through the lens of how focus, tasks, autonomy, ownership, influence, and responsibilities evolve throughout one's career, you can identify four or five pivotal stages: 78 | 79 | ### 1. Beginner, still learning 80 | 81 | ***Common titles:** junior, associate.* 82 | 83 | * You still need guidance and mentoring and don't yet work fully independently. 84 | * Your tasks are small and well-defined. 85 | * You focus mostly on your individual contributions. 86 | * You're primarily responsible for execution (as opposed to decision-making, strategy, or vision). 87 | * You operate mostly within your direct team. 88 | * While you already bring value and contribute to your team's success, you still require a lot of "maintenance" - so you're still more of an investment than an asset for your team. 89 | 90 | ### 2. Solid, autonomous individual contributor 91 | 92 | ***Common titles:** mid, regular, or just "developer" or "engineer".* 93 | 94 | * You work fully autonomously, without much guidance. 95 | * You can independently manage and execute complete feature-sized tasks. 96 | * You are still primarily responsible for execution, but also fully contribute to team processes, standards, and planning. 97 | * You're no longer just an investment but a fully valuable asset to your team. However, you are more of adding to your team's performance rather than significantly multiplying it. 98 | * Your area of influence still remains within your team, but it expands to the whole team due to regular participation in team-sized initiatives, code reviews, and discussions. 99 | 100 | ### 3. Expert individual contributor, displaying aspects of leadership and mentoring 101 | 102 | ***Common titles:** senior, sometimes tech lead or lead dev at the higher end of the range.* 103 | 104 | * You are top-class in your area of expertise. 105 | * You plan and lead complete projects end-to-end. 106 | * You become a leading voice in your team's standards, processes, and often even direction. 107 | * You frequently mentor more junior team members and set an example for them to follow. 108 | * You start to use your expertise also outside of your team, through collaboration, sharing knowledge, mentoring, and participating in guilds and other cross-team initiatives. However, your area of influence is still more within your team rather than outside. 109 | * Although it's not your official responsibility, because of the above interactions, you increasingly multiply other team members' work and even influence other teams. 110 | 111 | ### 4. A dedicated leader and enabler 112 | 113 | ***Common titles:** sometimes tech lead or lead developer at the lower end of the range, staff or principal at the higher end; or team lead, engineering manager, director, or VP if you are on the management track.* 114 | 115 | * You are fully accountable for team-sized or even larger initiatives or concerns. These are often long-living, as opposed to more discrete, one-time projects or epics at previous levels. 116 | * Your direct contributions are no longer your main focus - it becomes enabling and multiplying other people's work. (But not necessarily by directly managing them). 117 | * The scope of your influence starts at a whole team level (or a comparably-sized group) and, as your seniority grows, it gradually expands: first to multiple teams, then to the whole sub-organization or department, and eventually to the entire company. 118 | * You are responsible for the vision, key decisions, and strategy for a group, concern, capability, or area you lead more than for the low-level execution or technical details. 119 | 120 | This level is much broader and fuzzier than the previous three. Depending on the company's size, structure, and reach, it can span only a single "team lead" or "lead dev" stage or several gradual stages: a team, a group of several teams, a department, the entire organization, or sometimes even the whole industry. 121 | 122 | I intentionally crammed it all into a single level, as the underlying responsibility of boosting other people's performance remains the same, regardless of the size of the group or the area of influence. However, it could be further divided into two key stages: 123 | 124 | * **4.1. A leader to direct contributors.** Focused on more tactical concerns and boosting individual performance, usually within a single team-sized group. 125 | 126 | * **4.2. A leader to other leaders.** Focused on more strategic decisions, vision, and boosting organizational performance. 127 | 128 | This particular distinction is critical because transitioning from direct to indirect leadership requires a huge mental shift, as well as a very different skillset and approach. 129 | 130 | ## Simplifying it even further 131 | 132 | There are several dimensions to one's professional growth: Progressing from learning to autonomy, and then to mentoring. From tasks to features, then projects, and eventually to strategic concerns. From focusing on yourself to a team, and ultimately the entire organization. And so on. A similar progression can be observed across multiple other dimensions. 133 | 134 | But the central axis, fundamental to advancing your career, is impact: 135 | 136 | 1. Initially, you are learning and require attention. You don't add much to your team's performance - you may even slightly subtract from it. 137 | 138 | 2. Next, you become an independent contributor - an addition to your team's performance. 139 | 140 | 3. Then, as an expert, you max out how much you add, and - through mentoring and leading by example - gradually start to multiply other people's performance. 141 | 142 | 4. Finally, you become a leader, officially responsible for being a full-time multiplier - first directly, for a team-sized group, and later indirectly, for an entire organization. 143 | 144 | ## Why is this so important? 145 | 146 | As the saying goes: "What got you here won't get you there." Advancing further to each subsequent level requires different skills, mindset, and approach at each stage. 147 | 148 | Understanding this simplified framework will help you decide what to focus on at your current stage. For example, as a junior, you should strive to stop being an investment as quickly as possible, whereas, as a senior, you should aim your efforts towards becoming noticed as a leader, mentor, and influencer - especially outside your direct team. 149 | 150 | *(I'll discuss the detailed advice for each level in the later chapters of the guide.)* 151 | 152 | This framework will also help you better understand where you stand right now, particularly if your company doesn't have an official, detailed career ladder. 153 | 154 | Ok, this all sounds very cool. But it's quite theoretical and high-level. How do you really, in practice, make an impact and boost people's performance - especially if you aren't a manager, responsible for their performance directly? Let's explore this in more detail in the next chapter. 155 | 156 | --- 157 | 158 | * [NEXT: How to make a far-reaching impact?](TBD.md) 159 | * [PREV: What's the one (and only) thing that will get you promoted?](chapter_04.md) 160 | * [Table of contents](https://github.com/FromTheTrenches/DevGuide#-chapter-5-how-do-career-ladders-levels-work-across-the-industry) 161 | -------------------------------------------------------------------------------- /pages/who_is_it_for.md: -------------------------------------------------------------------------------- 1 | # Who is this guide for? 2 | 3 | In short: **`everyone`**. 4 | 5 | The same principles helped me advance from junior to senior as well as from lead to VP. They will help you, too, no matter if you are: 6 | 7 | * **A fresh coding bootcamp graduate**, not sure how to kickstart your career. 8 | * **A junior**, looking to build a solid foundation and "level up" for the first time. 9 | * **A mid-level or early senior**, with ambitions to become a well-rounded expert. 10 | * **A seasoned senior**, ready to take your career even further, to the staff or management level. 11 | * **A staff or principal-level veteran**, struggling to keep your skills fresh, stay relevant, and avoid a plateau. 12 | * ...or just curious where you stand and how complete is your skillset. 13 | 14 | No matter what's your next step, this guide will help you get there _faster_. 15 | 16 | --- 17 | 18 | * [NEXT: What does it mean to be a professional?](chapter_01.md) 19 | * [PREV: Why I'm writing this guide?](why_this_guide.md) 20 | * [Table of contents](https://github.com/FromTheTrenches/DevGuide#intro) 21 | -------------------------------------------------------------------------------- /pages/why_this_guide.md: -------------------------------------------------------------------------------- 1 | # Why I'm writing this guide? 2 | 3 | Over 20+ years of working with, leading, mentoring, and hiring developers, I've seen many brilliant hackers. But so often these coding "ninjas" and "wizards" went unnoticed, while much less "rockstar" developers made a splash and rose through the ranks. 4 | 5 | It's not magic. And it's not luck. 6 | 7 | It's because being a great software developer is not about coding skills. It's about helping your team, product, and company succeed. 8 | 9 | Understanding this let me grow to senior, lead, and finally VP. And, along the way, help many other developers advance their careers. But developing the necessary skills and applying them in practice is hard. It took me years of trial and error, of rabbit holes and dead ends. 10 | 11 | I want your journey to senior and beyond to go smoother, without wasting so much time as I did. 12 | 13 | --- 14 | 15 | * [NEXT: Who is this guide for?](who_is_it_for.md) 16 | * [Table of contents](https://github.com/FromTheTrenches/DevGuide#intro) 17 | --------------------------------------------------------------------------------