Basecamp CEO: The best way to solve business problems is to avoid them

Basecamp CEO: The best way to solve business problems is to avoid them

It is difficult to call Jason Fried, CEO of Basecamp, a workaholic. He works no more than 40 hours a week, and the same requires from the members of his team. Less is better, but with more quality. And he is not the most ambitious person in the world. He does not want to build a «new Google» or make Basecamp a unicorn. He does not need unnecessary problems, which are often associated with global goals. Jason avoids the problems and prevents them from arising.

Many business problems arise from themselves. Many wounds we inflict ourselves. You can win in the competition, but even more often the competitors lose to themselves.

Entrepreneurs are good at making things difficult. I communicate with many people and constantly come across this. If they were to devote more time to avoid future problems than to solving real ones that they had previously created themselves, they would have done better in less time.

We built our business to avoid problems. This is the main reason why we were able to do what we are doing and continue to do it profitably for 18 years. Whatever decisions we take, we proceed from their future value. In simple words, how messy it will be tomorrow, if we do something today.

We see no reason for pride in meeting big problems. We prefer to avoid problems that can be foreseen. Below are a few things that help us in this.

Avoid company growth

We specifically restrain Basecamp in growth. We serve more than 100,000 paying customers and several million individual users with a team of 50 people. Small companies avoid the problems of large ones. Less management, fewer lawyers, fewer difficulties in translation, much less bureaucracy and formalities, because of which people are forced to wait for permission before moving forward in some business.

In small companies, everyone is closer to customers. Of course, there are some things that small companies can not do, while large ones can, but it seems to be very good.

Avoid staff growth

We intend to keep our company from growing, and our team as well. Almost every project in Basecamp is performed by no more than three people — two programmers, one designer. Many projects involve only two people — one programmer, one designer. And some involve only one person — either a programmer or a designer.

Perhaps, if we had a bigger team, we could solve the problems more seriously. But with a large team, we would have created more serious problems. It’s not worth it. We are happy with small projects and small teams. We can still do everything we want — just in pieces. This makes it much easier for us to stick to the right direction in our path. And, frankly, it is in all cases the best version of the approach to solving problems.

Avoid large horizons

There are some very demoralizing things in business, and one of them is a long-term project when you do not see the light at the end of the tunnel. Irregular infrastructural projects, as a rule, have no end. For us, all fits in cycles for six weeks. Many projects are small enough to manage to close them in a couple of weeks or even days.

But even if we do a project for which we allocate six weeks, we are not afraid that something will go wrong, because the worst that can happen is that we will lose six weeks. We avoid any difficulties associated with the desire to continue what we see is not worth continuing. Compare this with the projects «too big to fail» or «will be ready when finished», which takes 6, 8, 12 or more months. Hardly you will give up such a project after all the work done.

Long projects are a very demoralizing.

Avoid plans and promises

We rarely look forward further than six weeks. We have a common big picture of where we are going, but we keep it in mind, not on paper. This is an unofficial rule.

And we rarely make plans for the future. Promises are an inexhaustible source of headaches and conflicts. It’s easy to say «yes» to something that will happen later because now you can not do it. But when the time comes, you probably will not want to do what you promised long ago.

Past promises are a generator of business problems. We avoid such promises like the plague.

Avoid scaling

Scale up! Scale up! Everyone wants to scale! But we are not. We try to avoid everything, in which the key to success is scaling. We are interested in things that work without scaling — large or small.

For most companies, scaling is synonymous with «now we are unprofitable, but one day we will start earning money.» Do not run ahead of the locomotive — grow within your capabilities. Become profitable as soon as possible with as few users as possible, and not with an unimaginable multitude.

Avoid dreadlines

We have deadlines. And we avoid dreadlines. Dreadlines are deadlines that nobody cares about. They force you to run and rush, teasing the ephemeral finish line. This is not what you want. It’s bad not to see the end, but it’s even worse to see it and do not believe in it. «Something will go wrong again», «Impossible to do it on time». Thinking process becomes negative. The quality is sacrificed. All the fun is lost when you are regularly behind schedule.

Avoid misunderstandings

Companies do not have problems with communication, but there are problems with mutual understanding. And every additional person, who participates in the dialogue, increases the risk of misunderstanding at times. Communications, as a rule, result in failures with rare exceptions.

Small companies and small teams essentially have the advantage over large ones. Of course, two people can also misunderstand each other, but small teams, groups, and companies have more chances that the information will be correctly interpreted by all parties involved.

Avoid partnerships

We are constantly called by large companies. They want to become our partners. We used to do this before, and everything always ended in a dead end. Just wasted time. Especially often this happens in unbalanced situations when a large company wants to work with a small one. Usually, this means a lot of work for a small company and very little for one of the many business developer employees who does not even need to do something on their own. Avoid!

Avoid bureaucracy

We avoid everything that hinders the free flow of information and the flow of processes. We do not establish a hierarchy in which someone needs someone’s permission for something. If what you are about to do will not destroy the company, just take it and do it. There is no need to bureaucratize processes and people. Let everything go smoothly, do not stop and confirm each step. Of course, sometimes mistakes happen, but only sometimes. After all, much more often everything goes right and without irritation.

The metaphor may seem strange, but I still say: it’s like washing dishes after you eat. If you do this, you will never have to wash the dishes afterward. You have avoided the hassle and unnecessary work in the future. If you ate and left dirty dishes in the sink to wash it later, you created yourself or others much more work. It will be harder to wash over time. You have increased the complexity of the work, which sooner or later you still have to do. Over time, a bunch of dirty dishes grows, and you less and less want to communicate with it. Oh, one more dirty plate — just leave it here.

If you wash dishes at once, as part of dinner, you will never have to return to this later – everything is already done. The future is free and clear.

Do not leave dirty dishes at work.

Senior Developer Formula

Senior Developer Formula

What do you need to become a senior developer?

Write the code. A lot of code: some things only come with experience. The big plus is diversity, and the more different projects will be your strength. It will be useful to participate in large projects. You will get invaluable experience working with heavily loaded systems. So try to take different tasks, learn new technologies and be up-to-date.

Work in a strong team. You can grow professionally only when you are working with someone who is smarter and more experienced, and much better. The motivation is not to fail those who appreciate you. It is necessary to communicate within the team. If you are only in your thoughts, you can not get new ideas and points of view, quickly find the most effective solutions. It is necessary to discuss problems, to ask, and to study.

Save ready-made solutions. The more ready solutions for different problems and tasks, the more valuable you are as an expert, and the faster you work.

Always see the challenge in the tasks you solve. A professional is not someone who does only an interesting job, but someone who can make any work interesting for them.

Teach. Teaching perfectly helps to put the material in your head, to find gaps in your knowledge. By answering the questions of the students, you get to the thoughts that hardly would have come to your mind. The need to argue their position also very well develops the communication skills that are so necessary for effective teamwork.

Have a set of helpful resources. If you have a set of reference resources, then you do not have to immediately search for information anywhere. It is impossible to know and remember absolutely everything, but it is not required if you know where to find the information you need. By accumulating a stack of resources (books, sites, forums) with good materials on various technologies, you can accelerate your work at times.

Be aware of developments in the IT world. Languages ​​and technologies are constantly changing. New versions are coming out. New approaches are emerging. A good developer must know all improvements and be aware of all the latest developments. There are different ways to do this — participate in conferences, pass certifications and master classes, communicate with people, read thematic forums. Each of them has advantages and disadvantages, but the essence does not change: you should know all the latest changes.

And few more things to have for a developer

Experiment. You should test new ideas and approaches need in practice. This is the only way to understand whether they worth something.

Know the hotkeys and do the maximum with the keyboard. In general, it helps you optimize your workflow.

It’s good to understand the tools. IDE, debugger, and command line work will be a great help for increasing efficiency.

Learn English. This is useful for any developer, but it is necessary for a senior one. Therefore, there are many reasons: from the fact that most of the interesting articles, conferences, and books are published in English to the point that letters and specifications on your project can only be in this language.

Be flexible. The senior developer should remember that everything is changing, and be ready to change their opinion. «If you were right a year ago — it does not mean that you are right now.» We must acknowledge our mistakes. Often people do not do this because of conceit and fear of losing their credibility, and this is wrong. You need to be able not only to correct the consequences of your mistake but also to admit that you were wrong.

Relax. If you always do something with one thing, you quickly burn out. Conversely, if you are distracted, then after returning you work more efficiently. This applies in general to any programmer. It is very useful to travel: it not only broadens the horizon but also helps to look at the usual things and questions from a different angle. It’s very cool to go in for sports. In general, any hobby is useful.

Not only to take but also to give. It can be an account with open source-code on GitHub or answers and recommendations on thematic sites like Stack Overflow.

Why study the basics in IT

Why study the basics in IT

The modern IT industry is changing and evolving so quickly that you simply can not physically keep up with it. Limited in their capabilities, static web pages were replaced by Rich UI with functionality similar to operating systems. JavaScript, along with CSS, has become ubiquitous. Less and less people use stationary computers and prefer mobile solutions — applications and websites responding to the needs of users. If earlier the sites could be launched on the local machine, now everything is migrating to the cloud. There are legends about waterfall already, and everyone uses Agile-development. And so is everywhere.

So everyone felt like a squirrel in a wheel.

You learn and learn new technologies, and they all emerge like mushrooms after the rain. And with what rate they arise, with the same and leave for the majority forever.

This wheel is spinning so fast that if you stop breathing for a couple of minutes, you can not catch up with it. If you constantly run — burn out or start to get drunk from overdosing of IT technologies, concepts, and approaches.

You start to look more closely at this whole zoo and ask yourself even more questions.

How new are the approaches in these technologies?

Did I see this technology before?

Why are the problems in this technology solved by introducing a new level of abstraction?

Why do these abstractions drive us into a framework that is so difficult to expand to change something?

Is it impossible to find an answer on Stack Overflow (do not just say that you are not looking for an answer there in the first place). Thus, you will have to spend hours, and even days, to understand how this new wheel, consisting of dozens of old wheels, goes ahead?

It seems that these questions are rhetorical. Technologies are becoming more complex and evolving to meet the demands of the times. However, since technologies do not make a conceptual step forward, then it is absolutely to be in time for this.

So what about the foundation?

It is fundamental knowledge. It is easy to forget the API of the next technology, but the principles and the basics — no. Just like learning to swim with one style, you can master any style of swimming with proper physical preparation and desire.

Do not spend 100% of your time on new frameworks and features. A small part will be enough with the head. The main thing is to comprehend the basics.

Just want to say that the foundations are very many. You can not limit yourself only to those things you need now: your server programming language, OOP, HTTP, SQL, JavaScript, HTML, CSS, IDE, etc. You need to learn what is taught only in universities: higher mathematics, algorithms, automation, probability theory, statistics, etc.

The employers are concerned not with your ability to remember the answers to questions that with each interview it becomes much easier. They are interested in your «flexible brains»: how flexible it is; whether you can learn new technology quickly, etc.

What will you get from the basics?

Here is a short and handful list:

Mathematics. Algebra and geometry are the first steps in logical thinking. Aristotle also described the foundations of logic, which later influenced many Greek philosophers/mathematicians. This seems wild, but it is not always easy to understand what caused this or that bug, or problems with the system. And the logic of mathematics can help in the development of such skills.

Physics expands our general knowledge of the universe. Most nerds have heard of the Schrodinger cat and the fact that a particle can be at any time in any part of the universe, but few people understand what it means. Physics teaches us critical thinking.

Theory of probability and statistics. It is difficult to imagine modern systems without a huge number of events. Big data are everywhere now. Therefore, we have to analyze that information.

Data structures. The data is everywhere, and they need to be stored somewhere. But we already have standard structures like list and map! You need to know the alternatives.

Algorithms. This is the next step in logic. And if the mathematical theorems did not envision special variants, the algorithms introduce the concept of complexity, the problem of choice, optimal for your task. This will help you learn how to compare alternatives, weighing the pros and cons.

Databases. You can quickly learn to write queries, but to design them is another level. To do this, you need to be able to analyze the subject area, properly link the entities and create links between them. Maybe, in practice, such a chance simply will not fall out, if you have not been familiar with this before and have not heard about normal forms.

Computer networks. We are no longer surprised by the fact that even the most simple program requires an Internet connection, and, in general, most of our life flows there. But in most cases, we can not explain how our browser finds a specific site, how the computer connects to another, and why we need other protocols besides http / https.

Electrical engineering. We used to take new technology for granted, but did anyone even think how it works? What are the interesting things that NPN and PNP transitions give us and what transistors bring to our civilization?

Designing systems. Everyone has ever heard about GRASP patterns, that Coupling should be low, and Cohesion — high. But to hear is one thing, and to understand and even to do is quite another.

Patterns / anti-patterns. Like any dentist should know all the typical methods of dentistry and also mistakes in this process, so you should know the vast majority of patterns and anti-patterns.

And then the next time, when there will be a need to understand the novelty, you look not only at the API but also in the very essence of technology. And then you can tell yourself that you have a better option than spending your time on it.

 

Dark Mode of the Smartphone. How To Turn It On at Night?

Dark Mode of the Smartphone. How To Turn It On at Night?

Dark mode is the best way for late night browsing on your cell phone. It will be easier for you to watch your favorite movie or to chat with your friends.

Have you ever suffered from insomnia? I think that happened to you once or twice in your life. Then you took your Smartphone to watch a video or movie or scroll Twitter feed. And your roommate asked you to turn off the light of your cell phone.

Today, the dark mode feature in the settings has many video players and applications. But most developers don’t advertise it, few know about this function. Typically, the colors of the dark mode invert the colors of the interface. The main goal of the night mode is to reduce the brightness of the screen that you can get with default settings. Let’s consider in detail how to enable this mode for late night browsing on your Smartphone.

Twitter and Reddit

The first thing that you can do is go to Twitter where you can find outright messages, especially at night. However, flipping the news feed and reading it isn’t very convenient because of the bright light of the cell phone. Moreover, it negatively affects your vision.

Twitter developers such as Android app designers have developed a dark mode for you. If you want to enable it, you need to enter the settings and under Display and Sound choose Night Mode. After that, your white background will become black, and it will be easier for you to scroll and read the news feed not only late night.

Reddit also has a dark mode feature. Its advantage is that it automatically converts the interface to black at night. You should to go to the settings and find the Auto Night Theme and switch it on. On a dark background, you can easily read the information that interests you.

Google Maps

If you use Google Maps moving through the city, you should turn on the night color scheme. It will help you not to get into a night accident. Night driving and bright lights are not the best companions.

You should touch the three dots in the upper right corner to access the interface. They appear just as you drive a car. Then you have to select the Navigation Options and tap on the Night option under Color Scheme.

Android Video Player

The Android development company also provided its users with the convenience in late night browsing. Android developers have created a dark mode of the Android Video Player. However, there is one condition; you should have the latest version of the VLC app. Just launch the application in your settings, select Interface and turn on black theme.

Android developers say that we can apply a dark theme in the night mode to the Android system. It doesn’t change the theme in third-party applications or even in Google apps. When you turn on night mode, you can run it automatically. But it depends on your location and time. You can also manually switch it to the settings menu or on the quick settings page if you wish.

Designers pay much attention to the colors in the Android app development. Some Android designers say that blue hues can interfere with sleep cycles. So many night-time programs use a red or yellow tone to counteract this.

iPhone

Android and iOS app developers have created a «dark mode» of sorts. You can go into Settings > General > Accessibility > Display Accommodations and enable Invert Colors on your iPhone. After you make it, white interface become black, but other colors will be very bright. It isn’t the best option when you are viewing a photo in social networks, e.g. in Instagram. The pictures will look saturated. However, both the developers of iOS and Android are going to improve it. The new software update comes with the new Smart Invert Colors feature, which only surpasses the color of the interface, but leaves content such as photos and graphics in its original format and color.

You can use the night shift as an alternative to dim bright lights if you haven’t installed iOS 11. You can turn it on by going to the home screen and clicking on Night Shift. The good thing about this feature is that you can still view videos and photos in the original color.

Android developers will give users a brand new level of choice, by providing support for dark and light themes at the system level, as well as the end-level for each application. For those who like to be blind every time they look at the cell phone, they already have a white day theme.

How to find a mentor – part 2

How to find a mentor – part 2

Read our 1 part about benefits of having a mentor :)

How do you find the right mentor for yourself?

There are two options that depend on the current experience.

Among colleagues

If you already work as a programmer, the most obvious way is to look for mentors among more experienced colleagues.You will get a review of your code, which in itself is already an invaluable source of information.

In many great companies, top management is passionate about the development of employees. Everyone has a manager, with whom you can discuss different issues. The managers are interested to make sure that you still enjoy working.

You can learn from colleagues of your level because the set of skills and knowledge is always different. Intra-corporate exchange of experience can be very useful.

In the Internet

This is perhaps the most difficult option. Its advantage is that you have more control.

First of all, of course, you can climb on any thematic forums: Quora, Stack Overflow. There are already full questions in the spirit of «where to start», «what to teach». And you can ask your question and even get an answer. And then, armed with the instruction received, you should try to learn everything on your own, periodically peering with a new set of questions on the resources mentioned above.

But this, of course, does not compare with the presence of a real mentor. After all, the mentor, as we know, not only sets the direction but constantly adjusts the path. Who, if not a mentor, will tell you that you are engaged in the total garbage?

Therefore, to achieve the maximum effect of learning, you need to search the Internet for a more interested and permanent mentor, rather than an occasional adviser on forums.

Often, experienced developers have their small projects on the side, pet projects, which they may hope to once turn into a good source of income. However, they rarely have enough time for those projects. You can focus on finding exactly such a developer, creating the appropriate topics on the forums and resources announced above. And then ask to work on her/his project for experience. You might agree to the condition that in exchange for work you will receive mentoring.

Often mentors are looking for students or assistants. A good developer understands that through the training of a less experienced programmer, she/he improves their skills. Also, it is much more effective in the long run to independently grow an assistant, than to look for a ready one. It is worth using. Pay attention to the public profiles of developers in communities, forums, social networks. Often it appears that they are mentors. If you do not follow the life of the community, then it is time to start. Subscribe to blogs, mailings, personal pages of developers.

Nothing complicated. Go to the Facebook groups, themed chats in Slack and Telegram, Google Groups, Issues on Github and write: «I am small and stupid. Please, I beg you, take me as a helper, I will help you, 24 hours a day, in exchange for your invaluable experience, instruction, and control of my skills». Exaggerated, of course. The more you tell about yourself, the more likely that somebody notices you. So do not limit yourself to dry «looking mentors for Java». Mentors are also people, and the basis of mentoring is first and foremost human communication.

Conclusion

Such a search for a mentor can take time, and most likely, you will have several unsuccessful attempts. The task is not simple, with a large number of variables and, in general, depends largely on luck. However, it is possible that, as a result, you will find a mentor for many months or even years ahead.

The main thing is not to confuse mentoring with courses. Courses, articles, and books on the Internet are already plenty. I would even say too much. But the mentor, who will help you find a link between all of them and build a clear route in this labyrinth to the ultimate goal, is not so easy to find.