Tejas GK

I Treat Myself Like a Product in Permanent Beta

Tejas GK| (16d ago)

11 min read

Software is never really finished.

You build version one.

People use it.

Something breaks.

You fix it.

You notice the interface is confusing.

You redesign it.

Performance becomes a problem.

You optimize it.

Requirements change.

You adapt.

Then six months later you look at the first version and wonder how you ever thought it was good.

I've started thinking about myself in roughly the same way.

I'm a product in permanent beta.

Not because I'm incomplete and one day I'll finally become a finished human being.

Quite the opposite.

I don't think there is a finished version.

There is just the current build.

Version 23.0

I'm 23.

The current version of me has certain capabilities.

I can build software.

I can run a business.

I can speak several languages to wildly different degrees of competence.

I can drive.

I can swim.

I can lift more weight than an older version of myself could.

There are also plenty of bugs.

Things I don't understand.

Things I'm bad at.

Things I know theoretically but can't reliably execute.

Habits that should probably be deprecated.

Features that have been sitting on the roadmap for far too long.

That's okay.

Nobody looks at the beta version of software and complains that version 7's features aren't implemented yet.

The question is:

Is the product improving?

Bugs Aren't Identity

Imagine discovering a memory leak in your application.

You wouldn't say:

This application is fundamentally a memory-leaking application. That's simply who it is.

You'd say:

There's a memory leak. Find it.

That's a much more useful way of thinking.

Yet we describe ourselves differently.

I'm bad at public speaking.
I'm lazy.
I'm terrible at algorithms.
I'm socially awkward.
I can't cook.

We've converted bugs into identity.

I'd rather describe them as current behavior.

Instead of:

I'm bad at interviews.

I can say:

The current version performs poorly under interview pressure.

Now there's something to investigate.

Why?

Knowledge gaps?

Insufficient practice?

Anxiety?

Poor communication?

Trying to answer too quickly?

Once I know the cause, I can work on a patch.

The difference seems linguistic, but it changes the entire problem.

One says:

this is me.

The other says:

this is the current implementation.

Ship, Observe, Iterate

I've learned far more from building actual things than from endlessly preparing to build them.

There's a reason.

Reality gives feedback.

You can spend three months studying how businesses work.

Or try selling something.

Suddenly you discover problems no course felt important enough to mention.

Nobody replies.

Pricing is difficult.

Clients misunderstand things you thought were obvious.

People say they're interested and disappear.

Projects take longer than expected.

Cash flow matters.

Communication matters almost as much as technical ability.

The same thing happens with programming.

You can watch twenty hours of system-design videos.

Then you build something that receives real traffic and suddenly caching, queues, retries, database indexes and observability stop being abstract vocabulary.

Shipping creates feedback.

And feedback makes iteration possible.

So I increasingly prefer:

build → fail → understand → improve

over:

learn → learn → learn → someday begin.

I Have a Backlog

Every product has one.

Mine is enormous.

Things I'd like to understand better.

Algorithms.

Distributed systems.

AI.

Mathematics.

Finance.

Biology.

History.

Languages.

Communication.

Things I'd like to become better at.

Writing.

Speaking.

Selling.

Negotiating.

Cooking.

Drawing.

Driving.

Building businesses.

There are physical features too.

Strength.

Muscle.

Cardiovascular fitness.

Mobility.

There are character features.

Patience.

Discipline.

Reliability.

Confidence.

Calmness under pressure.

The backlog can become overwhelming if I stare at all of it simultaneously.

But that's also a product-management problem.

You don't build every feature in one sprint.

You prioritize.

Not Every Feature Has Equal ROI

Suppose I have 100 hours.

I could spend those 100 hours becoming marginally better at something I'm already reasonably good at.

Or I could fix a bottleneck.

The second can produce dramatically greater results.

If I'm technically capable but terrible at communicating what I know, another framework probably isn't the highest-value upgrade.

If I'm constantly exhausted, optimizing productivity software isn't going to fix the underlying problem.

If my business can deliver projects but can't consistently acquire customers, improving delivery by another 5% doesn't solve the bottleneck.

This is exactly how we'd diagnose a system.

Find the constraint.

Fix the constraint.

Measure again.

Your biggest weakness isn't always the thing you should work on, either.

The question is:

What improvement would unlock the most capability elsewhere?

That's a much better roadmap.

Dependencies Matter

You can't implement every feature immediately because features depend on other features.

You can't become good at advanced mathematics without enough basic mathematics.

You can't design distributed systems well without understanding databases, networking and concurrency.

You can't become strong without first learning movements safely and then training consistently.

You can't become fluent in a language by memorizing advanced vocabulary while being unable to form basic sentences naturally.

Skills form dependency graphs.

Sometimes I become frustrated because I want the output without having installed the dependencies.

Software wouldn't tolerate that.

Neither does reality.

Technical Debt Exists in Humans Too

Sometimes shortcuts work.

Sleep four hours and finish the project.

Skip exercise because you're busy.

Ignore a difficult conversation.

Eat terribly for a week.

Avoid learning the fundamentals because a library already solves the problem.

The application still runs.

Nothing immediately explodes.

That's what makes technical debt dangerous.

The cost appears later.

Do it occasionally and it's probably irrelevant.

Make it the architecture and eventually everything becomes harder to change.

Humans accumulate their own version of technical debt.

Bad sleep.

Poor health.

Weak fundamentals.

Financial obligations.

Disorganized environments.

Avoided conversations.

Dependencies we no longer need.

Habits created as temporary solutions that somehow became permanent infrastructure.

Sometimes improvement isn't adding another feature.

It's refactoring.

Refactoring Yourself

In software, refactoring means improving the internal structure without necessarily changing what the system does externally.

Humans need this too.

Maybe I already work eight hours.

The goal isn't necessarily working ten.

Maybe those eight hours contain:

constant context switching,

notifications,

random browsing,

poor prioritization,

and repeated interruptions.

Adding another two hours simply scales a bad architecture.

Better:

refactor the eight.

The same applies elsewhere.

Don't immediately add more exercises.

Fix the training program.

Don't consume more information.

Organize what you already know.

Don't add another productivity application.

Fix how you decide what matters.

Don't add complexity before understanding why the existing system isn't producing the desired output.

Metrics Help, but Metrics Can Become Stupid

Software teams measure everything.

Latency.

Revenue.

Retention.

Errors.

Conversion.

Users.

Humans do this too.

Weight.

Salary.

Net worth.

Hours studied.

Books read.

Steps.

Calories.

Followers.

These numbers can be useful.

But metrics become dangerous when the metric replaces the objective.

Imagine optimizing a website entirely for time-on-site.

You might discover that making navigation confusing increases the metric.

Congratulations.

The dashboard improved.

The product became worse.

Personal metrics have the same problem.

Reading 100 books isn't necessarily better than deeply understanding ten.

Working twelve hours isn't necessarily better than producing excellent work in four.

Being lighter doesn't necessarily mean being healthier.

Having more followers doesn't necessarily mean having more meaningful relationships.

A metric is a proxy.

Never confuse the proxy with the thing you're actually trying to build.

Run Experiments

One thing I like about software is that uncertainty doesn't always require philosophy.

Sometimes you can test it.

Which homepage converts better?

Run an experiment.

Which database query is faster?

Benchmark it.

Which interface do users understand?

Watch them use it.

I think personal development benefits from the same mentality.

Instead of declaring:

I'm not a morning person.

Try waking early consistently for two weeks and measure what happens.

Instead of:

I can't concentrate for three hours.

Remove the phone, block distractions, choose one concrete task and test it.

Instead of:

This diet works best for me.

Track energy, performance, hunger and body-weight trends.

Treat beliefs as hypotheses when possible.

Experiment → observe → update.

That's much more interesting than defending an assumption because you've believed it for years.

Don't Deploy Everything to Production

Experimentation has limits.

If I'm testing a new button color, failure costs almost nothing.

If I'm modifying a production database containing millions of records, I'm considerably more careful.

Life has the same distinction.

Some decisions are reversible.

Try a hairstyle.

Learn Python.

Start writing.

Build a side project.

Change your workout.

Most failures are cheap.

Other decisions can have large, lasting consequences.

Debt.

Health decisions.

Legal commitments.

Marriage.

Dangerous physical risks.

Major financial bets.

The amount of analysis should roughly correspond to the cost of being wrong.

I don't want to spend six months deciding which note-taking application to use and six minutes deciding something irreversible.

Version Control

One useful property of version control is being able to look backwards.

You can see exactly how the project changed.

Humans are terrible at this.

We adapt to our current state surprisingly quickly.

Something that once seemed impossible becomes normal, and then we immediately become dissatisfied with the next problem.

Writing helps.

Photos help.

Measurements help.

Old projects help.

GitHub helps.

Old messages help.

Sometimes the easiest way to notice progress is to inspect an older commit of yourself.

What confused me two years ago?

What scared me?

What couldn't I build?

What did I think was difficult?

What problems consumed my attention?

The difference between those answers and today's answers is the changelog.

Don't Compare Different Products by One Metric

This is something I'm still learning.

It's extremely easy to look at another person and think:

They're younger and richer.

They're stronger.

They're more technically skilled.

They have a better social life.

They're more confident.

They've built something bigger.

The comparison might even be factually correct.

But people are complicated products with completely different histories, environments, advantages, constraints and objectives.

Comparisons can still be useful.

If someone is significantly better than me at something I value, I want to understand why.

What are they doing differently?

What did they learn?

What decisions compounded?

What can I copy?

That's benchmarking.

But:

"Their metric is higher, therefore my entire product is worse"

is terrible analysis.

Features Need Maintenance

Learning something once doesn't permanently install it.

Skills decay.

Fitness decays.

Relationships decay.

Languages decay.

Knowledge becomes outdated.

Businesses lose customers.

Software dependencies become obsolete.

Everything requires maintenance.

This means life can't consist entirely of adding things.

Some capacity must go toward maintaining what already works.

Training.

Practicing.

Calling people.

Revisiting fundamentals.

Updating knowledge.

Cleaning.

Sleeping.

Doing boring things repeatedly.

Maintenance isn't glamorous.

Neither is maintaining production infrastructure.

But systems that ignore maintenance eventually become unreliable.

Uptime Matters More Than Peak Performance

Imagine two servers.

Server A can process 10,000 requests per second but crashes every few hours.

Server B processes 8,000 but runs reliably for months.

Depending on the application, I might prefer B.

Humans obsess over peak performance.

The insane twelve-hour study day.

The brutal workout.

The all-nighter.

The week where we completely transform ourselves.

Then we crash.

I'd rather build a system capable of operating for decades.

That means recovery isn't laziness.

Sleep isn't wasted time.

Rest isn't necessarily lost productivity.

They're uptime infrastructure.

Security Matters

Software systems protect themselves from malicious inputs.

Humans receive inputs constantly too.

News.

Advertising.

Social media.

Other people's opinions.

Comparison.

Algorithms designed to capture attention.

Not every input deserves access to the system.

If I allow anyone to modify my beliefs, priorities or emotional state whenever they want, that's basically an authorization vulnerability.

Attention needs permissions.

Eventually, Remove Features

Products become bloated because teams love adding things and hate removing them.

Humans do too.

We accumulate:

commitments,

possessions,

subscriptions,

projects,

goals,

relationships,

habits,

information,

and expectations.

Eventually the system becomes difficult to operate.

Sometimes the best release note is:

Removed something.

Fewer goals.

Fewer distractions.

Fewer unnecessary obligations.

More resources for the things that remain.

There Is No Stable Release

The strange part is that I don't think I'll ever reach:

Tejas v1.0 — Production Ready

There will always be another thing I don't understand.

Another weakness.

Another project.

Another skill.

Another assumption that turns out to be wrong.

And I actually like that.

A finished product eventually becomes legacy software.

A living person shouldn't.

At 23, I don't need to already be everything I want to become.

I need a good development process.

Ship.

Observe.

Measure.

Break things occasionally.

Fix bugs.

Refactor.

Remove technical debt.

Install dependencies.

Protect the system.

Keep the useful features.

Delete the useless ones.

And keep releasing better versions.

There is no final build.

I'm a product in permanent beta.