SlideShare a Scribd company logo
1 of 80
Download to read offline
From Renamer
Plugin to
Polyglot IDE
Dmitry Jemerov
CTO, JetBrains
Monday, September 9, 13
IntelliJ IDEA: 2000-2013
• Started as a plugin for JBuilder
• Currently a product line of 8 IDEs, a
compiler, a DSL workbench and a server-
side code browser
• $xxK initial investment, $yyyM total
revenue
• HEAD is a usable IDE every single day
Monday, September 9, 13
Agenda
• IntelliJ IDEA over the years
• IntelliJ IDEA development practices
Monday, September 9, 13
IntelliJ IDEA:
Over the Years
Monday, September 9, 13
2000
• February 1st - company birthday
• Founded by Sergey Dmitriev, Eugene
Belyaev and Valentin Kipiatkov from
TogetherSoft
• IntelliJ Renamer, IntelliJ CodeSearch
Monday, September 9, 13
Monday, September 9, 13
Vista
1.0, Jan 2001
• PSI, VFS, commands
• Saved 2 months by not having plugin API
• Mentioned by Martin Fowler on
http://refactoring.com/
Monday, September 9, 13
Stella
2.0, June 2001
• First external developers
• JSP, CVS, Ant, formatter, live templates
Monday, September 9, 13
Pandora
2.5, Dec 2001
• 13 new refactorings
• JUnit integration, one unit test in code
• Released 1 month after Eclipse 1.0
Monday, September 9, 13
IDEA 2.6
June 2002
• Company renamed to JetBrains
• JOLT Award in April 2002
Monday, September 9, 13
Ariadna
3.0, Nov 2002
• OpenAPI,
• 2 plugins (open-source): Starteam,
Tomcat
• XML
• Real tests
• Oldest version available for download
Monday, September 9, 13
Fabrique
Monday, September 9, 13
Fabrique
• Framework and set of components for
developing Web applications
Monday, September 9, 13
Fabrique
• Framework and set of components for
developing Web applications
• Visual IDE based on top of IntelliJ IDEA
Monday, September 9, 13
Fabrique
• Framework and set of components for
developing Web applications
• Visual IDE based on top of IntelliJ IDEA
• Drove a lot of platform API changes
Monday, September 9, 13
Fabrique
• Framework and set of components for
developing Web applications
• Visual IDE based on top of IntelliJ IDEA
• Drove a lot of platform API changes
• Project view, structure view, extensions
Monday, September 9, 13
Fabrique
• Framework and set of components for
developing Web applications
• Visual IDE based on top of IntelliJ IDEA
• Drove a lot of platform API changes
• Project view, structure view, extensions
• Canceled in 2005 before reaching 1.0
Monday, September 9, 13
Monday, September 9, 13
ReSharper
• Started in mid-2003
• Implemented in C#, different architecture
• Initially used some parser/PSI technology
from IntelliJ IDEA
Monday, September 9, 13
Aurora
4.0, Feb 2004
• Multiple-module projects
• On-the-fly inspections
• UI Designer
Monday, September 9, 13
Pallada
4.5, July 2004
• J2EE
• First two community-developed plugins
• Inspection Gadgets
• Intention PowerPack
Monday, September 9, 13
Irida
5.0, Aug 2005
• Custom language API
• JavaScript, Python
• Perforce + Subversion, open-source
plugins
• 1M LOC
• 10 developers, no QA engineers
Monday, September 9, 13
Monday, September 9, 13
Demetra
6.0, Oct 2006
• Core and Enterprise subteams
• TeamCity 1.0
• First plugin contest
Monday, September 9, 13
Selena
7.0, Oct 2007
• New caching VFS implementation
• Facets
• Ruby, Groovy
Monday, September 9, 13
Diana
8.0, Nov 2008
• Java-independent IntelliJ Platform
extracted
• RubyMine 1.0 in April 2009
• Language-independent indices
• Language-independent debugger
Monday, September 9, 13
Community Edition
Oct 2009
• Moved to git
• ~ 60% of codebase open-sourced
• Expected 30% drop in sales, got small
gain
• Couple dozen external contributors
Monday, September 9, 13
Maia
9.0, Dec 2009
• Background indexing
• Artifacts
• PHP
Monday, September 9, 13
Idea X, Xena
10.0, Dec 2010; 10.5; Feb 2011
• Autopopup completion
• Android in Community Edition
• PhpStorm (May 2010), PyCharm (Oct 2010)
Monday, September 9, 13
Nika
11.0, Dec 2011
• UI redesign
• "core" package for Kotlin compiler
• AppCode (Oct 2011)
Monday, September 9, 13
Leda
12.0, Dec 2012
• Darcula
• External make
• UpSource, headless indexing framework
Monday, September 9, 13
Android Studio
May 2013
Monday, September 9, 13
Android Studio
May 2013
• Built by Google with support by JetBrains
Monday, September 9, 13
Android Studio
May 2013
• Built by Google with support by JetBrains
• Apache 2.0 licensed, no contracts and no
money involved
Monday, September 9, 13
Android Studio
May 2013
• Built by Google with support by JetBrains
• Apache 2.0 licensed, no contracts and no
money involved
• 500K downloads in first 3 weeks
Monday, September 9, 13
Cardea
Version 13, in development
Monday, September 9, 13
Cardea
Version 13, in development
• ~ 25 developers
Monday, September 9, 13
Cardea
Version 13, in development
• ~ 25 developers
• ~ 5.6M LOC, ~3M LOC open-source
Monday, September 9, 13
Cardea
Version 13, in development
• ~ 25 developers
• ~ 5.6M LOC, ~3M LOC open-source
• ~ 100K daily active users, 72% Ultimate
Monday, September 9, 13
Cardea
Version 13, in development
• ~ 25 developers
• ~ 5.6M LOC, ~3M LOC open-source
• ~ 100K daily active users, 72% Ultimate
• 50% Windows, 30% Mac, 20% Linux
Monday, September 9, 13
IntelliJ IDEA:
Development Practices
Monday, September 9, 13
Break the Rules
• No detailed planning
• No unit tests
• No QA
• No code comments or internal docs
• No API compatibility
• Many wheels reinvented
Monday, September 9, 13
Release Planning
Monday, September 9, 13
Release Planning
• Management sets only high-level goals
and target date
Monday, September 9, 13
Release Planning
• Management sets only high-level goals
and target date
• Each developer responsible for detailed
planning of their subsystem(s)
Monday, September 9, 13
Release Planning
• Management sets only high-level goals
and target date
• Each developer responsible for detailed
planning of their subsystem(s)
• No iteration planning
Monday, September 9, 13
Release Planning
• Management sets only high-level goals
and target date
• Each developer responsible for detailed
planning of their subsystem(s)
• No iteration planning
• No feature specifications
Monday, September 9, 13
Standup Meetings
• Daily, broken into sub-teams
• Over video conference between
St.Petersburg, Munich and Prague
• Allow management, QA and writers to
stay on top of dev activity
Monday, September 9, 13
Development Flow
• Everything done in master
• Almost no long-lived feature branches
• Branches used only for releases
• Refactorings in incremental steps
• New features side by side with existing
code, turned on by system property
Monday, September 9, 13
Automated Testing
• Mostly data-driven acceptance tests
• Code before, action to perform, code
after
• Few pure unit tests, little usage of mocks
• Test framework agnostic (JUnit, TestNG,
Cucumber)
Monday, September 9, 13
Continuous Integration
• Used TeamCity since day 0, CruiseControl
before that
• Remote run not mandatory but
recommended
Monday, September 9, 13
Testing: Upsides
• Easy to write
• Often just copy code example from bug
report
• Very little fragility when impl changes
• Tests written 8 years ago still valuable
Monday, September 9, 13
Testing: Downsides
• Whole test suite (37K tests) takes 7 hours
to run
• Multiple commits per test run
• Failures difficult to debug
• Especially async code (indexing, UI)
• Tests stay red for weeks
Monday, September 9, 13
Testers
• Had no testers until 2006
• Focus on manual testing and usability
• No "quality assurance" as such, relying
more on CI tests and user feedback
Monday, September 9, 13
update.bat
• Every developer starts their day with
building IntelliJ IDEA from latest sources
• "Do not update" emails if something
badly broken
• Core Java stuff always works
Monday, September 9, 13
Early Access Preview
• Public free-to-use builds released every
1-2 weeks
• Broad community testing for features we
don't use internally
• A few thousand active EAP users
• Licenses for most helpful participants
Monday, September 9, 13
Public Issue Tracker
• Initially ITN, then JIRA, then YouTrack
• ~ 50 new issues per day
• Low noise but many duplicates
• Triaging incoming issues – almost full-
time job
• Imbalance between developers
Monday, September 9, 13
Exception Analyzer
• Separate from issue tracker
• Reports grouped into problems
• Semiautomatic merging of duplicates
• Exception duty rotated between
developers, takes a few hours per day
Monday, September 9, 13
Code Review
• Previously used manual review (mostly
face-to-face) for merging into release
branches
• Now reviewing all platform changes
• Using Crucible and hating it
• Need tools to see context of change
Monday, September 9, 13
Support
Monday, September 9, 13
Support
• Until recently one support engineer
(Serge Baranov) was covering all IntelliJ
Platform-based IDEs
Monday, September 9, 13
Support
• Until recently one support engineer
(Serge Baranov) was covering all IntelliJ
Platform-based IDEs
• Best Technical Support (small to medium-sized
business, SD Magazine Reader's Choice 2005)
Monday, September 9, 13
Support
• Until recently one support engineer
(Serge Baranov) was covering all IntelliJ
Platform-based IDEs
• Best Technical Support (small to medium-sized
business, SD Magazine Reader's Choice 2005)
• Developers actively involved
Monday, September 9, 13
Internal Docs
Monday, September 9, 13
Internal Docs
• XP's belief: comments are a code smell
Monday, September 9, 13
Internal Docs
• XP's belief: comments are a code smell
• Most 3rd party plugins are open-source,
good examples
Monday, September 9, 13
Internal Docs
• XP's belief: comments are a code smell
• Most 3rd party plugins are open-source,
good examples
• Improving docs does not increase average
plugin quality
Monday, September 9, 13
Internal Docs
• XP's belief: comments are a code smell
• Most 3rd party plugins are open-source,
good examples
• Improving docs does not increase average
plugin quality
• Investing into docs to promote IntelliJ
Platform to companies
Monday, September 9, 13
Plugin API
Monday, September 9, 13
Plugin API
• No separate facade, plugins access
internal IDE classes directly
Monday, September 9, 13
Plugin API
• No separate facade, plugins access
internal IDE classes directly
• No way to repurpose IDE the way we did
without breaking API compatibility
Monday, September 9, 13
Community Plugins
• Large part of feature set
• Always by agreement with author
• Usually reworked at JetBrains
• Usually kept open-source
• Rewards through plugin contest
• Sometimes hiring authors
Monday, September 9, 13
Build System
• Not using Maven or Gradle
• Still storing dependency .jar files in VCS
• JPS: tool that builds IntelliJ IDEA project
from command line
• Same as external make in IDE
• Gant scripts to generate distribution
Monday, September 9, 13
Extensibility
• Not using OSGi, Guice or Spring
• PicoContainer for dependency injection
• Home-grown extension point system
• Components and extensions to load
specified in .xml files
Monday, September 9, 13
Non-Java Languages
• Some Groovy for tests
• Live Edit's Chrome extension written in
Kotlin and translated to JavaScript
• Scala plugin written in Scala
• Clojure plugin uses some Clojure
Monday, September 9, 13
Summary
Monday, September 9, 13
Summary
• Codebase repurposed far beyond original
goals through relentless refactoring
Monday, September 9, 13
Summary
• Codebase repurposed far beyond original
goals through relentless refactoring
• Full-time dogfooding is essential for
maintaining quality and usability
Monday, September 9, 13
Summary
• Codebase repurposed far beyond original
goals through relentless refactoring
• Full-time dogfooding is essential for
maintaining quality and usability
• Lightweight process is enough for
product development with no external
stakeholders
Monday, September 9, 13
Q&A
yole@jetbrains.com
@intelliyole
Develop with Pleasure!
Monday, September 9, 13

More Related Content

What's hot

Embracing Observability in CI/CD with OpenTelemetry
Embracing Observability in CI/CD with OpenTelemetryEmbracing Observability in CI/CD with OpenTelemetry
Embracing Observability in CI/CD with OpenTelemetryCyrille Le Clerc
 
IT and Transportation Systems
IT and Transportation SystemsIT and Transportation Systems
IT and Transportation SystemsJeffrey Funk
 
Selenium with Cucumber
Selenium  with Cucumber Selenium  with Cucumber
Selenium with Cucumber Knoldus Inc.
 
Robot Framework Dos And Don'ts
Robot Framework Dos And Don'tsRobot Framework Dos And Don'ts
Robot Framework Dos And Don'tsPekka Klärck
 
Postman. From simple API test to end to end scenario
Postman. From simple API test to end to end scenarioPostman. From simple API test to end to end scenario
Postman. From simple API test to end to end scenarioHYS Enterprise
 
Testing Your APIs: Postman, Newman, and Beyond
Testing Your APIs: Postman, Newman, and BeyondTesting Your APIs: Postman, Newman, and Beyond
Testing Your APIs: Postman, Newman, and BeyondPostman
 
Consolidation of Instrument Cluster and In Vehicle Infotainment
Consolidation of Instrument Cluster and In Vehicle InfotainmentConsolidation of Instrument Cluster and In Vehicle Infotainment
Consolidation of Instrument Cluster and In Vehicle InfotainmentKarolina Janowicz
 
Distributed Load Testing with k6 - DevOps Barcelona
Distributed Load Testing with k6 - DevOps BarcelonaDistributed Load Testing with k6 - DevOps Barcelona
Distributed Load Testing with k6 - DevOps BarcelonaThijs Feryn
 
Modern Tools for API Testing, Debugging and Monitoring
Modern Tools for API Testing, Debugging and MonitoringModern Tools for API Testing, Debugging and Monitoring
Modern Tools for API Testing, Debugging and MonitoringNeil Mansilla
 
Cross browser testing with browser stack
Cross browser testing with browser stackCross browser testing with browser stack
Cross browser testing with browser stackDenys Poloka
 
Securing APIs with Open Policy Agent
Securing APIs with Open Policy AgentSecuring APIs with Open Policy Agent
Securing APIs with Open Policy AgentNordic APIs
 
Performance Testing using LoadRunner
Performance Testing using LoadRunnerPerformance Testing using LoadRunner
Performance Testing using LoadRunnerKumar Gupta
 
Open Source Software
Open Source Software Open Source Software
Open Source Software Ali Yavari
 
A brief history of automation in Software Engineering
A brief history of automation in Software EngineeringA brief history of automation in Software Engineering
A brief history of automation in Software EngineeringGeorg Buske
 
Test data management
Test data managementTest data management
Test data managementOnur Erdogan
 
NIRNAYA SAGAR PANCHANG.pdf
NIRNAYA SAGAR PANCHANG.pdfNIRNAYA SAGAR PANCHANG.pdf
NIRNAYA SAGAR PANCHANG.pdfSHRIBALAJI18
 

What's hot (20)

Contract based testing
Contract based testingContract based testing
Contract based testing
 
Embracing Observability in CI/CD with OpenTelemetry
Embracing Observability in CI/CD with OpenTelemetryEmbracing Observability in CI/CD with OpenTelemetry
Embracing Observability in CI/CD with OpenTelemetry
 
Introduction to robot framework
Introduction to robot frameworkIntroduction to robot framework
Introduction to robot framework
 
IT and Transportation Systems
IT and Transportation SystemsIT and Transportation Systems
IT and Transportation Systems
 
Selenium with Cucumber
Selenium  with Cucumber Selenium  with Cucumber
Selenium with Cucumber
 
Robot Framework Dos And Don'ts
Robot Framework Dos And Don'tsRobot Framework Dos And Don'ts
Robot Framework Dos And Don'ts
 
Postman. From simple API test to end to end scenario
Postman. From simple API test to end to end scenarioPostman. From simple API test to end to end scenario
Postman. From simple API test to end to end scenario
 
Selenium ppt
Selenium pptSelenium ppt
Selenium ppt
 
Testing Your APIs: Postman, Newman, and Beyond
Testing Your APIs: Postman, Newman, and BeyondTesting Your APIs: Postman, Newman, and Beyond
Testing Your APIs: Postman, Newman, and Beyond
 
Consolidation of Instrument Cluster and In Vehicle Infotainment
Consolidation of Instrument Cluster and In Vehicle InfotainmentConsolidation of Instrument Cluster and In Vehicle Infotainment
Consolidation of Instrument Cluster and In Vehicle Infotainment
 
Distributed Load Testing with k6 - DevOps Barcelona
Distributed Load Testing with k6 - DevOps BarcelonaDistributed Load Testing with k6 - DevOps Barcelona
Distributed Load Testing with k6 - DevOps Barcelona
 
Netflix conductor
Netflix conductorNetflix conductor
Netflix conductor
 
Modern Tools for API Testing, Debugging and Monitoring
Modern Tools for API Testing, Debugging and MonitoringModern Tools for API Testing, Debugging and Monitoring
Modern Tools for API Testing, Debugging and Monitoring
 
Cross browser testing with browser stack
Cross browser testing with browser stackCross browser testing with browser stack
Cross browser testing with browser stack
 
Securing APIs with Open Policy Agent
Securing APIs with Open Policy AgentSecuring APIs with Open Policy Agent
Securing APIs with Open Policy Agent
 
Performance Testing using LoadRunner
Performance Testing using LoadRunnerPerformance Testing using LoadRunner
Performance Testing using LoadRunner
 
Open Source Software
Open Source Software Open Source Software
Open Source Software
 
A brief history of automation in Software Engineering
A brief history of automation in Software EngineeringA brief history of automation in Software Engineering
A brief history of automation in Software Engineering
 
Test data management
Test data managementTest data management
Test data management
 
NIRNAYA SAGAR PANCHANG.pdf
NIRNAYA SAGAR PANCHANG.pdfNIRNAYA SAGAR PANCHANG.pdf
NIRNAYA SAGAR PANCHANG.pdf
 

Similar to From Renamer Plugin to Polyglot IDE

Modern Web-site Development Pipeline
Modern Web-site Development PipelineModern Web-site Development Pipeline
Modern Web-site Development PipelineGlobalLogic Ukraine
 
Cloud stack design camp on jun 15
Cloud stack design camp on jun 15Cloud stack design camp on jun 15
Cloud stack design camp on jun 15Isaac Chiang
 
Eclipse Orion: The IDE in the Clouds (JavaOne 2013)
Eclipse Orion: The IDE in the Clouds (JavaOne 2013)Eclipse Orion: The IDE in the Clouds (JavaOne 2013)
Eclipse Orion: The IDE in the Clouds (JavaOne 2013)Murat Yener
 
DevOps / Agile Tools Seminar 2013
DevOps / Agile Tools Seminar 2013DevOps / Agile Tools Seminar 2013
DevOps / Agile Tools Seminar 2013Ethan Ram
 
Language Matters: JavaScript 
from IoT Product Concept 
to Production
Language Matters: JavaScript 
from IoT Product Concept 
to ProductionLanguage Matters: JavaScript 
from IoT Product Concept 
to Production
Language Matters: JavaScript 
from IoT Product Concept 
to ProductionKinoma
 
PhoneGap in 60 Minutes or Less
PhoneGap in 60 Minutes or LessPhoneGap in 60 Minutes or Less
PhoneGap in 60 Minutes or LessTroy Miles
 
Development Processes and Tooling
Development Processes and ToolingDevelopment Processes and Tooling
Development Processes and ToolingBora Bilgin
 
Effective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperEffective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperMike Melusky
 
Introduction Into Android
Introduction Into AndroidIntroduction Into Android
Introduction Into AndroidYoza Aprilio
 
Hadoop Summit 2013 : Continuous Integration on top of hadoop
Hadoop Summit 2013 : Continuous Integration on top of hadoopHadoop Summit 2013 : Continuous Integration on top of hadoop
Hadoop Summit 2013 : Continuous Integration on top of hadoopWisely chen
 
Building a Distributed & Automated Open Source Program at Netflix
Building a Distributed & Automated Open Source Program at NetflixBuilding a Distributed & Automated Open Source Program at Netflix
Building a Distributed & Automated Open Source Program at NetflixAll Things Open
 
Netflix Open Source: Building a Distributed and Automated Open Source Program
Netflix Open Source:  Building a Distributed and Automated Open Source ProgramNetflix Open Source:  Building a Distributed and Automated Open Source Program
Netflix Open Source: Building a Distributed and Automated Open Source Programaspyker
 
Effective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperEffective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperMike Melusky
 
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...Theo Jungeblut
 
Appcelerator Titanium Intro
Appcelerator Titanium IntroAppcelerator Titanium Intro
Appcelerator Titanium IntroNicholas Jansma
 
Continuous integration by Rémy Virin
Continuous integration by Rémy VirinContinuous integration by Rémy Virin
Continuous integration by Rémy VirinCocoaHeads France
 
How to build a JavaScript toolkit
How to build a JavaScript toolkitHow to build a JavaScript toolkit
How to build a JavaScript toolkitMichael Nelson
 
Java uk road tour - sep 06
Java uk road tour - sep 06Java uk road tour - sep 06
Java uk road tour - sep 06scoobeesnac
 
Intro to PHP Testing
Intro to PHP TestingIntro to PHP Testing
Intro to PHP TestingRan Mizrahi
 

Similar to From Renamer Plugin to Polyglot IDE (20)

Modern Web-site Development Pipeline
Modern Web-site Development PipelineModern Web-site Development Pipeline
Modern Web-site Development Pipeline
 
Cloud stack design camp on jun 15
Cloud stack design camp on jun 15Cloud stack design camp on jun 15
Cloud stack design camp on jun 15
 
Android introduccion2
Android introduccion2Android introduccion2
Android introduccion2
 
Eclipse Orion: The IDE in the Clouds (JavaOne 2013)
Eclipse Orion: The IDE in the Clouds (JavaOne 2013)Eclipse Orion: The IDE in the Clouds (JavaOne 2013)
Eclipse Orion: The IDE in the Clouds (JavaOne 2013)
 
DevOps / Agile Tools Seminar 2013
DevOps / Agile Tools Seminar 2013DevOps / Agile Tools Seminar 2013
DevOps / Agile Tools Seminar 2013
 
Language Matters: JavaScript 
from IoT Product Concept 
to Production
Language Matters: JavaScript 
from IoT Product Concept 
to ProductionLanguage Matters: JavaScript 
from IoT Product Concept 
to Production
Language Matters: JavaScript 
from IoT Product Concept 
to Production
 
PhoneGap in 60 Minutes or Less
PhoneGap in 60 Minutes or LessPhoneGap in 60 Minutes or Less
PhoneGap in 60 Minutes or Less
 
Development Processes and Tooling
Development Processes and ToolingDevelopment Processes and Tooling
Development Processes and Tooling
 
Effective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperEffective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and Dapper
 
Introduction Into Android
Introduction Into AndroidIntroduction Into Android
Introduction Into Android
 
Hadoop Summit 2013 : Continuous Integration on top of hadoop
Hadoop Summit 2013 : Continuous Integration on top of hadoopHadoop Summit 2013 : Continuous Integration on top of hadoop
Hadoop Summit 2013 : Continuous Integration on top of hadoop
 
Building a Distributed & Automated Open Source Program at Netflix
Building a Distributed & Automated Open Source Program at NetflixBuilding a Distributed & Automated Open Source Program at Netflix
Building a Distributed & Automated Open Source Program at Netflix
 
Netflix Open Source: Building a Distributed and Automated Open Source Program
Netflix Open Source:  Building a Distributed and Automated Open Source ProgramNetflix Open Source:  Building a Distributed and Automated Open Source Program
Netflix Open Source: Building a Distributed and Automated Open Source Program
 
Effective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperEffective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and Dapper
 
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...
Debugging,Troubleshooting & Monitoring Distributed Web & Cloud Applications a...
 
Appcelerator Titanium Intro
Appcelerator Titanium IntroAppcelerator Titanium Intro
Appcelerator Titanium Intro
 
Continuous integration by Rémy Virin
Continuous integration by Rémy VirinContinuous integration by Rémy Virin
Continuous integration by Rémy Virin
 
How to build a JavaScript toolkit
How to build a JavaScript toolkitHow to build a JavaScript toolkit
How to build a JavaScript toolkit
 
Java uk road tour - sep 06
Java uk road tour - sep 06Java uk road tour - sep 06
Java uk road tour - sep 06
 
Intro to PHP Testing
Intro to PHP TestingIntro to PHP Testing
Intro to PHP Testing
 

More from intelliyole

Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlinintelliyole
 
Kotlin Bytecode Generation and Runtime Performance
Kotlin Bytecode Generation and Runtime PerformanceKotlin Bytecode Generation and Runtime Performance
Kotlin Bytecode Generation and Runtime Performanceintelliyole
 
Kotlin: Why Do You Care?
Kotlin: Why Do You Care?Kotlin: Why Do You Care?
Kotlin: Why Do You Care?intelliyole
 
Feel of Kotlin (Berlin JUG 16 Apr 2015)
Feel of Kotlin (Berlin JUG 16 Apr 2015)Feel of Kotlin (Berlin JUG 16 Apr 2015)
Feel of Kotlin (Berlin JUG 16 Apr 2015)intelliyole
 
How to Build Developer Tools on Top of IntelliJ Platform
How to Build Developer Tools on Top of IntelliJ PlatformHow to Build Developer Tools on Top of IntelliJ Platform
How to Build Developer Tools on Top of IntelliJ Platformintelliyole
 
The Kotlin Programming Language
The Kotlin Programming LanguageThe Kotlin Programming Language
The Kotlin Programming Languageintelliyole
 
IntelliJ IDEA: Life after Open Source
IntelliJ IDEA: Life after Open SourceIntelliJ IDEA: Life after Open Source
IntelliJ IDEA: Life after Open Sourceintelliyole
 
Smoothing Your Java with DSLs
Smoothing Your Java with DSLsSmoothing Your Java with DSLs
Smoothing Your Java with DSLsintelliyole
 
Implementing Refactorings in IntelliJ IDEA
Implementing Refactorings in IntelliJ IDEAImplementing Refactorings in IntelliJ IDEA
Implementing Refactorings in IntelliJ IDEAintelliyole
 
IntelliJ IDEA Architecture and Performance
IntelliJ IDEA Architecture and PerformanceIntelliJ IDEA Architecture and Performance
IntelliJ IDEA Architecture and Performanceintelliyole
 

More from intelliyole (10)

Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlin
 
Kotlin Bytecode Generation and Runtime Performance
Kotlin Bytecode Generation and Runtime PerformanceKotlin Bytecode Generation and Runtime Performance
Kotlin Bytecode Generation and Runtime Performance
 
Kotlin: Why Do You Care?
Kotlin: Why Do You Care?Kotlin: Why Do You Care?
Kotlin: Why Do You Care?
 
Feel of Kotlin (Berlin JUG 16 Apr 2015)
Feel of Kotlin (Berlin JUG 16 Apr 2015)Feel of Kotlin (Berlin JUG 16 Apr 2015)
Feel of Kotlin (Berlin JUG 16 Apr 2015)
 
How to Build Developer Tools on Top of IntelliJ Platform
How to Build Developer Tools on Top of IntelliJ PlatformHow to Build Developer Tools on Top of IntelliJ Platform
How to Build Developer Tools on Top of IntelliJ Platform
 
The Kotlin Programming Language
The Kotlin Programming LanguageThe Kotlin Programming Language
The Kotlin Programming Language
 
IntelliJ IDEA: Life after Open Source
IntelliJ IDEA: Life after Open SourceIntelliJ IDEA: Life after Open Source
IntelliJ IDEA: Life after Open Source
 
Smoothing Your Java with DSLs
Smoothing Your Java with DSLsSmoothing Your Java with DSLs
Smoothing Your Java with DSLs
 
Implementing Refactorings in IntelliJ IDEA
Implementing Refactorings in IntelliJ IDEAImplementing Refactorings in IntelliJ IDEA
Implementing Refactorings in IntelliJ IDEA
 
IntelliJ IDEA Architecture and Performance
IntelliJ IDEA Architecture and PerformanceIntelliJ IDEA Architecture and Performance
IntelliJ IDEA Architecture and Performance
 

Recently uploaded

A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Mark Simos
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Jeffrey Haguewood
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentMahmoud Rabie
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFMichael Gough
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...BookNet Canada
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxAna-Maria Mihalceanu
 
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sectoritnewsafrica
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...itnewsafrica
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructureitnewsafrica
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialJoão Esperancinha
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...amber724300
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessWSO2
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesManik S Magar
 

Recently uploaded (20)

A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
Tampa BSides - The No BS SOC (slides from April 6, 2024 talk)
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career Development
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDF
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance Toolbox
 
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
4. Cobus Valentine- Cybersecurity Threats and Solutions for the Public Sector
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
Irene Moetsana-Moeng: Stakeholders in Cybersecurity: Collaborative Defence fo...
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorial
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with Platformless
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
 

From Renamer Plugin to Polyglot IDE

  • 1. From Renamer Plugin to Polyglot IDE Dmitry Jemerov CTO, JetBrains Monday, September 9, 13
  • 2. IntelliJ IDEA: 2000-2013 • Started as a plugin for JBuilder • Currently a product line of 8 IDEs, a compiler, a DSL workbench and a server- side code browser • $xxK initial investment, $yyyM total revenue • HEAD is a usable IDE every single day Monday, September 9, 13
  • 3. Agenda • IntelliJ IDEA over the years • IntelliJ IDEA development practices Monday, September 9, 13
  • 4. IntelliJ IDEA: Over the Years Monday, September 9, 13
  • 5. 2000 • February 1st - company birthday • Founded by Sergey Dmitriev, Eugene Belyaev and Valentin Kipiatkov from TogetherSoft • IntelliJ Renamer, IntelliJ CodeSearch Monday, September 9, 13
  • 7. Vista 1.0, Jan 2001 • PSI, VFS, commands • Saved 2 months by not having plugin API • Mentioned by Martin Fowler on http://refactoring.com/ Monday, September 9, 13
  • 8. Stella 2.0, June 2001 • First external developers • JSP, CVS, Ant, formatter, live templates Monday, September 9, 13
  • 9. Pandora 2.5, Dec 2001 • 13 new refactorings • JUnit integration, one unit test in code • Released 1 month after Eclipse 1.0 Monday, September 9, 13
  • 10. IDEA 2.6 June 2002 • Company renamed to JetBrains • JOLT Award in April 2002 Monday, September 9, 13
  • 11. Ariadna 3.0, Nov 2002 • OpenAPI, • 2 plugins (open-source): Starteam, Tomcat • XML • Real tests • Oldest version available for download Monday, September 9, 13
  • 13. Fabrique • Framework and set of components for developing Web applications Monday, September 9, 13
  • 14. Fabrique • Framework and set of components for developing Web applications • Visual IDE based on top of IntelliJ IDEA Monday, September 9, 13
  • 15. Fabrique • Framework and set of components for developing Web applications • Visual IDE based on top of IntelliJ IDEA • Drove a lot of platform API changes Monday, September 9, 13
  • 16. Fabrique • Framework and set of components for developing Web applications • Visual IDE based on top of IntelliJ IDEA • Drove a lot of platform API changes • Project view, structure view, extensions Monday, September 9, 13
  • 17. Fabrique • Framework and set of components for developing Web applications • Visual IDE based on top of IntelliJ IDEA • Drove a lot of platform API changes • Project view, structure view, extensions • Canceled in 2005 before reaching 1.0 Monday, September 9, 13
  • 19. ReSharper • Started in mid-2003 • Implemented in C#, different architecture • Initially used some parser/PSI technology from IntelliJ IDEA Monday, September 9, 13
  • 20. Aurora 4.0, Feb 2004 • Multiple-module projects • On-the-fly inspections • UI Designer Monday, September 9, 13
  • 21. Pallada 4.5, July 2004 • J2EE • First two community-developed plugins • Inspection Gadgets • Intention PowerPack Monday, September 9, 13
  • 22. Irida 5.0, Aug 2005 • Custom language API • JavaScript, Python • Perforce + Subversion, open-source plugins • 1M LOC • 10 developers, no QA engineers Monday, September 9, 13
  • 24. Demetra 6.0, Oct 2006 • Core and Enterprise subteams • TeamCity 1.0 • First plugin contest Monday, September 9, 13
  • 25. Selena 7.0, Oct 2007 • New caching VFS implementation • Facets • Ruby, Groovy Monday, September 9, 13
  • 26. Diana 8.0, Nov 2008 • Java-independent IntelliJ Platform extracted • RubyMine 1.0 in April 2009 • Language-independent indices • Language-independent debugger Monday, September 9, 13
  • 27. Community Edition Oct 2009 • Moved to git • ~ 60% of codebase open-sourced • Expected 30% drop in sales, got small gain • Couple dozen external contributors Monday, September 9, 13
  • 28. Maia 9.0, Dec 2009 • Background indexing • Artifacts • PHP Monday, September 9, 13
  • 29. Idea X, Xena 10.0, Dec 2010; 10.5; Feb 2011 • Autopopup completion • Android in Community Edition • PhpStorm (May 2010), PyCharm (Oct 2010) Monday, September 9, 13
  • 30. Nika 11.0, Dec 2011 • UI redesign • "core" package for Kotlin compiler • AppCode (Oct 2011) Monday, September 9, 13
  • 31. Leda 12.0, Dec 2012 • Darcula • External make • UpSource, headless indexing framework Monday, September 9, 13
  • 33. Android Studio May 2013 • Built by Google with support by JetBrains Monday, September 9, 13
  • 34. Android Studio May 2013 • Built by Google with support by JetBrains • Apache 2.0 licensed, no contracts and no money involved Monday, September 9, 13
  • 35. Android Studio May 2013 • Built by Google with support by JetBrains • Apache 2.0 licensed, no contracts and no money involved • 500K downloads in first 3 weeks Monday, September 9, 13
  • 36. Cardea Version 13, in development Monday, September 9, 13
  • 37. Cardea Version 13, in development • ~ 25 developers Monday, September 9, 13
  • 38. Cardea Version 13, in development • ~ 25 developers • ~ 5.6M LOC, ~3M LOC open-source Monday, September 9, 13
  • 39. Cardea Version 13, in development • ~ 25 developers • ~ 5.6M LOC, ~3M LOC open-source • ~ 100K daily active users, 72% Ultimate Monday, September 9, 13
  • 40. Cardea Version 13, in development • ~ 25 developers • ~ 5.6M LOC, ~3M LOC open-source • ~ 100K daily active users, 72% Ultimate • 50% Windows, 30% Mac, 20% Linux Monday, September 9, 13
  • 42. Break the Rules • No detailed planning • No unit tests • No QA • No code comments or internal docs • No API compatibility • Many wheels reinvented Monday, September 9, 13
  • 44. Release Planning • Management sets only high-level goals and target date Monday, September 9, 13
  • 45. Release Planning • Management sets only high-level goals and target date • Each developer responsible for detailed planning of their subsystem(s) Monday, September 9, 13
  • 46. Release Planning • Management sets only high-level goals and target date • Each developer responsible for detailed planning of their subsystem(s) • No iteration planning Monday, September 9, 13
  • 47. Release Planning • Management sets only high-level goals and target date • Each developer responsible for detailed planning of their subsystem(s) • No iteration planning • No feature specifications Monday, September 9, 13
  • 48. Standup Meetings • Daily, broken into sub-teams • Over video conference between St.Petersburg, Munich and Prague • Allow management, QA and writers to stay on top of dev activity Monday, September 9, 13
  • 49. Development Flow • Everything done in master • Almost no long-lived feature branches • Branches used only for releases • Refactorings in incremental steps • New features side by side with existing code, turned on by system property Monday, September 9, 13
  • 50. Automated Testing • Mostly data-driven acceptance tests • Code before, action to perform, code after • Few pure unit tests, little usage of mocks • Test framework agnostic (JUnit, TestNG, Cucumber) Monday, September 9, 13
  • 51. Continuous Integration • Used TeamCity since day 0, CruiseControl before that • Remote run not mandatory but recommended Monday, September 9, 13
  • 52. Testing: Upsides • Easy to write • Often just copy code example from bug report • Very little fragility when impl changes • Tests written 8 years ago still valuable Monday, September 9, 13
  • 53. Testing: Downsides • Whole test suite (37K tests) takes 7 hours to run • Multiple commits per test run • Failures difficult to debug • Especially async code (indexing, UI) • Tests stay red for weeks Monday, September 9, 13
  • 54. Testers • Had no testers until 2006 • Focus on manual testing and usability • No "quality assurance" as such, relying more on CI tests and user feedback Monday, September 9, 13
  • 55. update.bat • Every developer starts their day with building IntelliJ IDEA from latest sources • "Do not update" emails if something badly broken • Core Java stuff always works Monday, September 9, 13
  • 56. Early Access Preview • Public free-to-use builds released every 1-2 weeks • Broad community testing for features we don't use internally • A few thousand active EAP users • Licenses for most helpful participants Monday, September 9, 13
  • 57. Public Issue Tracker • Initially ITN, then JIRA, then YouTrack • ~ 50 new issues per day • Low noise but many duplicates • Triaging incoming issues – almost full- time job • Imbalance between developers Monday, September 9, 13
  • 58. Exception Analyzer • Separate from issue tracker • Reports grouped into problems • Semiautomatic merging of duplicates • Exception duty rotated between developers, takes a few hours per day Monday, September 9, 13
  • 59. Code Review • Previously used manual review (mostly face-to-face) for merging into release branches • Now reviewing all platform changes • Using Crucible and hating it • Need tools to see context of change Monday, September 9, 13
  • 61. Support • Until recently one support engineer (Serge Baranov) was covering all IntelliJ Platform-based IDEs Monday, September 9, 13
  • 62. Support • Until recently one support engineer (Serge Baranov) was covering all IntelliJ Platform-based IDEs • Best Technical Support (small to medium-sized business, SD Magazine Reader's Choice 2005) Monday, September 9, 13
  • 63. Support • Until recently one support engineer (Serge Baranov) was covering all IntelliJ Platform-based IDEs • Best Technical Support (small to medium-sized business, SD Magazine Reader's Choice 2005) • Developers actively involved Monday, September 9, 13
  • 65. Internal Docs • XP's belief: comments are a code smell Monday, September 9, 13
  • 66. Internal Docs • XP's belief: comments are a code smell • Most 3rd party plugins are open-source, good examples Monday, September 9, 13
  • 67. Internal Docs • XP's belief: comments are a code smell • Most 3rd party plugins are open-source, good examples • Improving docs does not increase average plugin quality Monday, September 9, 13
  • 68. Internal Docs • XP's belief: comments are a code smell • Most 3rd party plugins are open-source, good examples • Improving docs does not increase average plugin quality • Investing into docs to promote IntelliJ Platform to companies Monday, September 9, 13
  • 70. Plugin API • No separate facade, plugins access internal IDE classes directly Monday, September 9, 13
  • 71. Plugin API • No separate facade, plugins access internal IDE classes directly • No way to repurpose IDE the way we did without breaking API compatibility Monday, September 9, 13
  • 72. Community Plugins • Large part of feature set • Always by agreement with author • Usually reworked at JetBrains • Usually kept open-source • Rewards through plugin contest • Sometimes hiring authors Monday, September 9, 13
  • 73. Build System • Not using Maven or Gradle • Still storing dependency .jar files in VCS • JPS: tool that builds IntelliJ IDEA project from command line • Same as external make in IDE • Gant scripts to generate distribution Monday, September 9, 13
  • 74. Extensibility • Not using OSGi, Guice or Spring • PicoContainer for dependency injection • Home-grown extension point system • Components and extensions to load specified in .xml files Monday, September 9, 13
  • 75. Non-Java Languages • Some Groovy for tests • Live Edit's Chrome extension written in Kotlin and translated to JavaScript • Scala plugin written in Scala • Clojure plugin uses some Clojure Monday, September 9, 13
  • 77. Summary • Codebase repurposed far beyond original goals through relentless refactoring Monday, September 9, 13
  • 78. Summary • Codebase repurposed far beyond original goals through relentless refactoring • Full-time dogfooding is essential for maintaining quality and usability Monday, September 9, 13
  • 79. Summary • Codebase repurposed far beyond original goals through relentless refactoring • Full-time dogfooding is essential for maintaining quality and usability • Lightweight process is enough for product development with no external stakeholders Monday, September 9, 13