Tag: business

Less is more

Published on: 01.09.2019

In 2017 I was looking for an alternative to Evernote because in free version syncing is only available across two devices.

Generally, I do pay for software, but because I only use it for sharing plain text an not very often I decided to check alternatives.

Simplenote was free, could be used on the unlimited device and I am still using it.

After some time I have found that Simplenote is a superior product that Evernote for my use-case.

Simplenote superiority, for me, is due to a limitation that only plain text is allowed.

Only recently I have found out that Markdown is also available in Simplenote.

This limitation enables me to be more productive because the focus is on content and not on presentation.

Then an interesting idea came to mind, it is possible to make a successful product just by making cutdown version (without some additional features ) of already existing ones.

The first thing to do before you start to write code

Published on: 01.05.2019

Let me start with a personal true story.

In 2014 I was working on a personal project of making IOS card game called Tablic, I spend more than 200 work hours on did 80% of the original plan and never finished it.

Do you know why?

Because of software scope creep.

Originally I had the idea to make a game with one player vs. computer.

As I was near completing that goal I started adding additional features: I could add 4 players, a user could select AI difficulty.

Each additional features meant more development time: new code and changes to an existing one.

And after all this, I decided to add multiplayer support over local WiFi and over the internet.

This last decision has truly killed the project completely.

In order to implement multiplayer, I had to write a lot of additional code and to change existing architecture, it was at least an additional 300 hours and after more than 200 hours already spend I decided to take a small break (like a week) but later never continued.

The reason why I did not want to release it without multiplayer was that I was thinking it is not good enough, other games had multiplayer, how can I make one without it.

I was always thinking that I will continue and finish it one day, but that day never came, today I am thinking that it is probably better to rewrite it to Unity than to continue in Objective-C (but that is a discussion for another time).

Years later when I was analyzing why I never finished that IOS game, I came to the conclusion that the original problem was because I did not have a specification of the first version.

By specification, I just mean a list of feature, with dependencies between them, basic UI scatch and time estimates.

As I was completing some features I continue adding new ones indefinitely.

I am pretty sure if I did implement multiplayer I would add some other features also.

Today I am wiser or I just think so.

Now I have a process for writing software.

Before I write code I decide what is MVP that I will make, without even thinking about additional features.

The reason why I do not even want to write addition features is that I have learned that even when I make software for myself, software what I make is not software that I need.

Define what kind of minimal features you need to have in your software, make dependencies between them and time estimates how long it will take to make them.

I do time estimates in pomodoros (25 minutes increments) but other time units can be used.

Billable and non-billable hours

Published on: 15.03.2019

This is written by the consultant/freelancer point of view.

Amateurs are focused on billable hours.

What is your hourly rate?
50$ per hours.
That is not bad, 8h time 50$ is 400$ per day.
20 working days per month is 8000$ every month.
96000$ per year, not bad.

There are a lot of problems in real life with this logic.

First, there are no expenses (tax, equipment, rent, etc) mentioned, like they do not exist.

But I do not want to focus on expenses in this analysis.

Also, can you bill for 8h every day for a year?

If on an average day you sell only 2h than calculations are much different (and not in a good way).

What about all the work that you need to do to sell 1h of your time?

If you need to spend one addition 1h in order to sell 1h of your time then your hourly rate is cut in half.

If you work for somebody else and you are not a remote worker, then your commute time is an example of non-billable hours.

Different businesses have different portions of billable and non+billable hours, just be sure to calculate that in your equations.

In coding business, and by coding business I mean if you primarily write code, lots of non-billable hours are spent on keeping with technology (even if you are highly specialized).

If you are self-employed non-billable hours are also needed for finding clients/work, infrastructure maintenance, etc.

If you take all that in the account than 50$ per hour and minus expenses, does not look so go anymore.

And you come to the understanding of why it should be more.

Most programmers are financial morons

Published on: 01.01.2019

Let me start with one true story from the year 2011.

At that time I was working as a software programmer (90% C++) in a team of 5 people.

One morning, a friend from team started showing cool new source code editor called Sublime Text.

He was very happy with it, he used it on the job, for his own pet projects, and for his freelancing side jobs for almost few months.

But for him Sublime Text had one drawback, he had to pay 100$ for it (at time of this writing Sublime Text license is 80$, but I think that at that time it was 100$, but I could be wrong).

At that time I know that my friend is a financial moron.

I tried to explain to him, using same logic like in this blog post, but he just could not get it, he only understood that he has to spend money.

Why most programmers are financial morons

Let say that he was only using Sublime Text every second day (altho, knowing him it was probably every day).

With every second day assumption that is 182 day per year.

He was happy with a new tool, it was better for him, so let us say that he got 10 extra minutes of work every day.

10 minutes times 182 days is 30 hours of work more per year.

To get a break even he would need to make 3,33$ per hour of work.

Even at that time, he was charging his freelance rate at 20$ per hour and he had around 5 hours of billable work hours per week.

He is a smart guy, but he was thinking that toll is expensive.

Economically speaking, he does not know how to do a cost-benefit analysis.

It is strange how logically intelligent programmers (believe me, you do have to be logically intelligent to write computer programs) never invest in tools that basically have ROI in days.

Conclusion

Do cost benefit analysis before saying that something is expensive or cheap.

Disclaimer:
I have no interest do you use or buy Sublime Text or not, I am just using it as an example.

The question of tradeoff in software, business, and life

Published on: 15.11.2018

In software development, it is common to have discussions about what technology is better or the best.

Those discussions look like a wise discussion for beginners, looking for a perfect solution, the holy grail.

But they are useless because there is no perfect solution, the much more important question to answer is what tradeoffs are you making and why?

Why tradeoffs are necessary?

In any system, if you want to increase one aspect of the system that has to come at the expense of some other aspect.

Let us take the car for example.

I am taking the car as an example because I suppose it is easy to understand.

If you want to make a car acceleration faster, you have to make it lighter and fuel consumption will go up.

So, to increase acceleration you have to decrease weight and fuel efficiency.

This is a simplified example, there are many imperfections, but I hope that reader can get the point.

Basically, you have to do tradeoff.

Back to the discussion on tradeoffs in software development

When you add business aspect into considerations, it is even more complicated.

Things that make sense from a technical standpoint, are a disaster for business and vice versa.

The hard thing about a tradeoff between business and technology is it is almost impossible to have one person who can understand just one side completely so what to say about both at the same time.

Today software systems are so complicated that it is common that there is no single person who understands everything.

That is why REST API is popular, but that is the discussion for another day.

Concrete software example

I have one personal program, that I use every day, it is responsible for saving me 1000$ on average per year, so I do have the real monetary use of it.

And SQLite DB is the main part of it, and I do not ever use indexes in it (no cost benefit from it).

I know that SQLite for my use case, from point of speed, is not the best option.

But I took SQLite because it was fast to start, backups are just copying one file and I am running SQL queries once per day while I am sleeping.

Currently, an average time for all SQL queries are around 30 seconds, and as DB file gets larger query time will also increase.

Even if it gets to 1 hour (what I am not expecting even in the next 100 years), that would be fine for my use cases.

My deployment platform is shared hosting with the flat monthly bill so increased CPU time is also not a problem from me, altho if I used platform with serverless billing per CPU time it could be.

Conclusion

Know what tradeoffs are you making and even more important is why.

What programming language should you learn?

Published on: 01.06.2018

This is written for persons that do not know any programing language and they are thinking what programing language they should learn first.

Altho, I think that reasoning behind decisions in this article can help you with choosing your next programing language also.

If you want to do something, first know why you want to do it

What are you trying to accomplish?

Same is with learning programming language.

I have listed few main reasons why persons want to learn a programing language:

  • get a job (on-site or freelance)
  • make some software app/website/web app
  • just to learn to do programming

I want to learn programming to get a job

Programming jobs (and salaries) are location dependent, due to this reason do research which programming languages job are available in your area.

If you plan to move/migrate do same for that area.

Check the local programming jobs listing to get a clue.

It is good to visit local programming meetups, if you plan to be a professional software developer start on your networking also.

Meetups are also a good way to see who is hiring.

If you plan to do freelance then you are not location depended.

What, I would argue, is even making thing more difficult, because you do not have location constraint.

Anyway do cost/benefit analysis and pick some language that makes sense according to your own constraints.

I want to learn programming to make software

You want to make some software (desktop app, website, web app, mobile app, etc).

You could pay profession to do it for you, but for some reason (eg. you are still in high-school, etc) you want to do it by your self.

Do research and find out what programming language is best for software that you plan to build.

I personally optimize for time to market.

If you plan to make a web app, there is no reason for you to learn C++, believe me, there is not.

Currently, in the year 2018, there are already known programming languages (tools) for most of the use cases.

But you also need to be careful, because most software developers will suggest programming languages that they know.

So, do not ask just one person but at least few dozens.

And always ask them what is the reasoning behind their decision.

I want to learn programming just to know how to programme

You do not want a job, you have no idea what to make with programming, you just want to learn programming.

Then you can pick any language, altho my suggestion is to pick something that does have some real-life usage and it is not complicated for beginners.

My humble suggestion is to choose Python “… is easy for beginners, practical for professionals, and exciting for hackers …” from Fluent Python.

Conclusion

Know what are you trying to accomplish and pick programing language for that purpose.

The largest expense for the programmer

Published on: 01.05.2018

I will talk about largest expense from somebody who is developing software (primarily writing code) but from the business owner perspective (not from employe perspective).

I got this idea after starting to develop my own software products, not at the time when I was writing code for others.

The topic could be rephrased as “The largest expense for the business owner who is also the sole developer”.

But, I also think that it is correct for software development in general.

Time is not on your side

After prolong thinking about a subject, I have come to conclusion (of course I can be wrong), that largest expense is time.

By the time I mean how much time you will spend to make some software.

One can argue that this is also the only expense (with some hardware, room, and electricity).

So, next question is on what activity in software development is most of the time spent(or wasted).

Hardware is cheap

Better hardware (SSD, more RAM, faster CPU, etc) will reduce time in development and you should use it.

But hardware price is relatively cheap against other time expenses.

Let’s say that by using SSD you will get 10 more minutes of work per workday (altho I would argue that it is at least double).

Multiplying by 260 workdays per year, that is 2600 minutes or 43h.

1 TB SSD is 400$, so even if you only bill 10$ for your working hour, ROI is one year and this is no brain investment. (the number can change, but you get the point)

Anyway, moral of the story is that hardware is cheap.

The largest expense is learning how to do something new

Most of the time is spent on learning how to do something new.

New programing language, new frameworks, new libraries, new tools, new new new …

The endless supply of new things thing that needs to be learned.

Somebody could come to the conclusion learning how to learn fast is the solution.

Certainly learning fast is useful, but it is not the solution, because there are more things to learn that there is time to do it.

Temporary nature of the knowledge capital

And also, in software development, you have additional problems of “temporary nature of the knowledge capital”.

Basically, what you learn today, probably will not be useful in 5 years.

Maybe it will not even exist anymore.

So far this is nothing new, anybody, who has been programming for more than 5 years have practical experience that technologies (languages, frameworks, libraries, tools, etc) go away, new ones come and now you need to spend the time to learn new ways to do the old things.

What is new, or at least what I am trying to argue in the essay, is that from the business standpoint, we should look at it as an expense.

Especially as the largest expense in software development.

Somebody can say: “Hey douchebag, I like learning new technologies and using them in my job. You are just some old dinosaur who does not like programming and probably was never good at it.”

Well, I can agree that 35 I am certainly not young anymore.

But my age does not change the fact is that learning something is not same as doing something.

If I want to do something, first I must know how to do it, and to know it, you need to learn it.

So, learning is an expense to doing.

And if for everything that you need to do, first, you need to learn, that is a lot of learning (and big expense).

Is programming is young man game?

I would say that part of the problem is that most programmers are young and do not have much life/work experience.

Statistic from StackOverflow 2018 Developer Survey Results support that calim.

30% have only 2 years of professional coding. That is one third.

57.5% have only 5 years of professional coding.

In some work field, even after 5 years, you are still considered just a beginner.

And only 12,7% have more than 15 years of professional coding.

Hobby or business

Also 81% of professional developers code as a hobby.

I do not think that this is a bad thing.

But at the same time, if you consider something a hobby, then you will not treat it as a business.

In business, there is income and expense.

And by subtracting expense from income, you get profit.

And you should have some if you expect for your business to survive.

In the hobby, there is only fun.

That is why it is called the hobby.

And hobby is the expense, from the bookkeeping perspective, but everybody is considering his/her hobby as fun, not as the expense.

These two reasons, probably more the second one, are probably main reasons why most programmes do not see learning as the expense.

At least, until they have burnout and then they switch to something else, like project management (real job title should be: project reporting) or leave software development completely.

Looking from the previously mentioned statistic only 6.9% of developer are older than 45 years.

But it is well known that programming is mostly young man game, probably due to “temporary nature of the knowledge capital”.

How to reduce your largest expense

I think that specialization is the large part of the solution.

Find your niche and stick to it.

Then you can reduce (or even completely eliminate) the expense of time spent on learning how to program something and can acquire domain-specific knowledge.

When to learn new things

I am not saying that you should never learn new things.

Not at all.

Just do cost/benefit analysis before.

I will use my own experience as an example.

I do/did a lot of web scraping.

First I have done it with Beautiful Soup and a lot of custom code.

I wrote my own caching, ORM, etc.

In web scraping, the easiest part is to write XPath selectors, there are a lot of other things and over time I have made my own small framework for all of that.

And with each new website that I scraped I had to and new features or improve old ones.

And this was taking larger and larger percent of my time as I was scraping more and more challenging websites.

After some time I decided to try Scrapy .

To scrape the first website with Scrapy I need around one week, with 90% of the time was spent on learning Scrapy (learning how to do the old thing with the new framework).

If I have used my custom old framework I would be finished it in 3 days.

But I would have to write more code than with Scrapy.

Currently, with Scrapy in one day, I can do scraping that I needed at least 3-4 days with my old custom framework.

This is the example when learning new framework was useful.

Conclusion

In software development business for a software developer, the largest expense is time spent learning new technologies.

Reduce it by finding your niche and specializing.

Use cost/benefit analysis to determine should you use learn some new technology.