The makers of WebStorm and IntelliJ have zero intentions of being left behind in the race for the ultimate coding AI IDE…
Enter Junie — an incredible upcoming coding agent (that word again) from JetBrains that could make you regret ever paying for Windsurf or Cursor (or Copilot, ha ha).
The agent will understand your code on a deep level and make high-level changes — seriously line-by-line coding is becoming a thing of the past guys…
And of course this will directly compete with the incredible Windsurf Cascade feature — and Cursor Composer.
But it looks like Junie will go even further with deep understanding of context and learning your unique coding style to keep things consistent.
It’ll even be able to automatically create and run tests for your code in a structured way.
Similar to all those testing extensions for VS Code.
But even better cause this would work for several languages.
Any time you tell it to make a change it would run the tests automatically and ensure that the changes it made are correct — something you can also verify yourself of course.
Looks like it could even create its own tests for the specific changes it makes to your code…
You see with tools like this, the developer role will shift a lot from typing and code monkey-ing, to very high-level direction and monitoring.
You may still need to learn programming languages, but mainly for keeping the AI in check and avoiding errors.
And eventually even this could be done by the AI itself.
JetBrains certainly has a key advantage here with their years of experience creating coding tools.
They also have a strong user base of over 11 million people so there’ll be instant adoption once Junie goes live.
People already familiar with the Jetbrains IDE experience would have no reason to switch to VS Code forks like Cursor and Windsurf.
I also wonder whether they’ll use their custom model or they’ll let devs switch between the big names.
All the current players have gone the latter route, so it’ll be interesting to see how that goes.
Of course this isn’t their first time jumping on the AI bandwagon.. they’ve already released an AI coding assistant before… but looks like it failed miserably.
Junie is clearly a rebrand to distance themselves from the flop, especially with the fresh new agentic abilities it’s gonna have.
What if we see coding as a delicate act of nurturing, a digital development brought about by our creativity and the intricate logical reasoning of our minds?
There’s a reason we’re called software *developers*. Developers develop; developers build and grow.
If we can get ourselves to view a software project as a unit of its own, with all its capabilities, potential, and goals, we instantly start to observe numerous interesting connections between programming and other nurturing acts like parenting, gardening, and self-improvement.
From the onset: a freshly scaffolded project, a file, or a folder. There is always a beginning, a birth.
With every single line of code added, deleted, and refactored, the software grows into greatness. With every additional library, package, and API fastened into place, low-level combines into high-level; the big picture unfolds; a fully formed digital creation emerges.
Goal in sight: Plan
Similar to nurturing a budding sapling, the coding process begins with the seed of an idea. You envision the type of product you hope your software will become.
You and your team are to carefully plan and design the structure, algorithms, and flow of the code, much like parents are to create a loving and supportive home by providing the necessary resources, values, and guidance to foster their child’s development.
This thoughtful approach lays the foundation for the entire coding project and boosts the chances of a bright future.
From here to there: Grow
Your codebase needs to grow and improve, but growth on its own is a very vague and generic word. It’s just… an increase.
For any type of growth of any entity to be meaningful, it has to be in the direction of *something*. Something valuable and important.
What’s the first thing I get right now when I search for the meaning of “personal” growth on Google?
This definition prefers to remain vague and makes it clear that personal growth isn’t the same for everyone. You choose your values, set goals based on them, and develop yourself and your environment according to those goals.
But this doesn’t mean you can pick just any goal you want for a happy life; Certain goals are way more beneficial for your well-being than others. A target of progressively gobbling up to 10,000 calories of ice cream every day can never be put in the same league as running a marathon or building solid muscle at the gym.
So the same thing applies to coding. Consciously hoping to write 10,000 lines of code or add 1,000 random features to your software is a terrible aspiration, and will never guarantee high-quality software.
Apart from the explicitly defined requirements, here are some important growth metrics to measure your software project by:
On a lower level, all about the code:
Readability: How easy is it for a stranger to understand your code, even if they know nothing about programming?
Efficiency: How many units of a task can your program complete in X amount of time?
Modularity: Is your code organized into separate modules for different responsibilities? Can one module be swapped out without the entire project crashing into ruins?
Testability and test quality & quantity: How easy is it to test these modules? Do you keep side-effects and mutation to a minimum? And yes, how many actual tests have you written? Are these tests even useful and deliberate? Do you apply the 80/20 rule during testing?
On a higher level closer to the user:
Effective, goal-focused communication: with copy, shape, icons, and more.
Perceived performance: Including immediate responses to user actions, loading bars for long-running actions, buffering, etc.
Number of cohesive features: Are the features enough, and relevant to the overall goal of the software?
Sensual pleasure: Lovely aesthetics, stunning animations, sound effects, and more.
Was working on some open-source download manager a few years back.
This delightful growth process is one of the things that transforms coding from a cold logical activity into a creative, empowering, addictive pursuit. You continually strive, with the ultimate desired outcome in sight, line after line, commit after commit, feature after feature; everlasting progress in an energizing purposeful atmosphere.
What man actually needs is not a tensionless state but rather the striving and struggling for some goal worthy of him. What he needs is not the discharge of tension at any cost, but the call of a potential meaning waiting to be fulfilled by him.
Viktor E. Frankl (1966). “Man’s Search for Meaning”
And yes, just like raising a responsible, well-rounded individual, we may never actually reach a definite, final destination. But it gave us a strong sense of direction. We are going *somewhere* and we have the map.
Have you heard the popular estimates of devs spending on average as much as 75% of their time debugging software?
Yes, it would be nothing but a pipe dream to expect this journey to be easy.
Indeed, as a loving parent does all they can to shield their dearest child from harm’s way, programmers must safeguard their code from bugs and vulnerabilities to produce robust and reliable software. We’ve already talked about testing, and these precautions drastically reduce the chances of nasty errors and mistakes.
But just like with building good personal habits and social skills, you are still going to make mistakes along the way.
With any serious complex codebase, there are still going to be loud, frustrating bugs that bring you to the point of despair and hopelessness. But you simply cannot quit. You are responsible; you are the architect of this virtual world, the builder of digital solutions and innovations. You possess the power to overcome obstacles and transform difficulties into opportunities for growth — your growth, your software’s growth.
And what of when the path toward the goal changes dramatically? Close-mindedness won’t take you far.
Parents need to be adaptable and flexible in adjusting to the child’s changing unique needs and development stages: Software requirements are hardly set in stone. You must be able to incorporate new features into your codebase — and destroy them as time goes on.
Pro-active scalability is nice to have in every software system, but this isn’t always feasible; in the real world you have time and cost constraints and you need to move fast. What was a great algorithm at 1 thousand users could quickly become a huge performance bottleneck at 1 million users. You may need to migrate to a whole new database for increasingly complex datasets needing speedy retrieval.
Takeaway: What coding should be
Like tending to a seedling or guiding a child’s development, coding requires careful planning, thoughtful design, and continuous adaptation. It’s an everlasting process of meaningful growth, measured not only by lines of code but by metrics such as readability, efficiency, beauty, and user-focused features. With each line added, bugs debugged, and obstacles overcome, the software and its creator thrive together on a path filled with purpose, determination, and endless possibilities.