sunscrapersblog
sunscrapersblog
Sunscrapers Blog
33 posts
We are Sunscrapers
Don't wanna be here? Send us removal request.
sunscrapersblog · 8 years ago
Text
Weekly Tech Talks: Fundamental Introduction to Git
Tumblr media
This presentation is a brief introduction into Git distributed version control system (DVCS). We will start from configuring the Git CLI and then we discuss how Git works and what are its frequently used features.
Git is called Distributed Version Control System, which means that in contrast to the Centralized Version Control Systems (CVCS), each user receives a complete copy of the repository. Every customer can also, if necessary, act as a server, and if the server has a breakdown, it is possible to restore it without any problems, using the client’s copy. The good side effect of such architecture is that the majority of operations in Git is based on local resources. This way, operations are made faster and are not dependent on the server, from which we obtained a repository. This also allows us to work without an active connection to network - offline.
Configuration of GIT CLI
GUI tools to handle Git, despite their friendly interface and ease of use, are useful only in simple cases and they are not always helping us to solve a problem - sometimes they may even hinder solving it. For this reason, you should be familiar with the CLI.
There is a very useful command if you don’t have an internet connection and you’ve forgotten something important: git help. It accepts Git’s command as a parameter, for example: git help init. When used without a parameter, it displays a list of the most frequently used Git commands.
The basic configuration of Git’s CLI consists of setting a few variables. The easiest way to do this is through git config command, which allows to both read and modify variables. Essentially git has three config 'levels' you can use - system, user and repository, but most of us stick to the user (global) configuration level.
It’s good to give at last your username (usually your name and surname) and e-mail address, to use Git properly:
$ git config --global user.name "John Doe"
$ git config --global user.email "[email protected]"
--global flag means that we use a global (user) configuration file.
Three files’ spaces
In Git there are three areas where files can be found at a given moment:
Working directory - a place of work where we make changes to files
Staging area - files which changes have been accepted and which are ready to add to be committed into repository
Git directory - the place where Git stores the metadata of the project and files that have been accepted to the repository (committed)
Usually the workflow in the Git’s ecosystem looks like this:
adding / modifying / removing files,
confirming desired changes to the staging area,
(optional) performing more operations on files, 
after making sure that all desired changes are in staging, committing them to the repository with an adequate description of modifications.
Files management in Git
We can create a new, empty repository (which is often the first step when starting a new project) using git init command.
$ git init
We can also get a copy of an existing repository via git clone command.
$ git clone https://example.net/user/repo.git (using https protocol)
$ git clone [email protected]:user/repo.git (using ssh protocol)
One of the basic commands is git status, which is used to check the files’ status.
Example:
$ git status
On branch master nothing to commit, working tree clean
With git add command, we can add a file or files to staging.
$ git add README.md - adds README.md file to staging
$ git add. - adds all files in the current directory to staging
$ git add '* .py'- adds all files with the extension .py to staging
$ git add -A - adds all files from the working directory to staging
To delete a particular file or files from staging, we can use the command
git rm --cached .
$ git add README.md
$ git rm --cached README.md
rm README.md '
If we skip --cached flag, then file is also deleted from the working directory.
We can delete all files from the staging using:
$ git rm -r --cached .
Four states of file
At any given time, each file may be in one of four states:
Untracked - file exists only in the working directory
Unmodified - file is in the repository and is the same as one in the repository version
Modified - file is in the repository and has been modified in the working directory
Staged - file has been added to the staging area and is awaiting approval to the repository
Ignoring files
Sometimes we don’t want Git to add some files to the repository (e.g. for security reasons). We can create a file .gitignore that contains a list of filenames’ patterns and directories we wish to ignore.
$ cat .gitignore
# python
__pycache __ /
* .py [Cod]
Preview of file changes
You can use the git diff if you need to check what changes have occurred in files in the workspace. It takes an optional parameter --cached to compare with staging. Keep in mind that git diff doesn’t compare untracked files.
$ echo "test"> README.md
$ git add README.md
$ git diff --cached
+++ B / README.md
@@ @@ -0,0 +1
+ test123
Approving changes
Changes set out in staging may be committed to the repository by git commit, which requires determining a description of changes - commit message. We can select a text editor, which Git will use through the environment variable $EDITOR. You can also override the default value before executing the command:
$ EDITOR=vim git commit
git commit also allows to enter the commit message as a parameter to the command:
$ git commit -m "Add README.md"
It is also possible to completely omit the staging step by using a shortcut:
$ git commit -a -m "Add README.md"
Note that the parameter -a takes into account only those files that are already tracked.
We can also overwrite the last commit to correct it or add more changes by using --amend flag:
$ git commit -m "Add README.md"
$ git add README.md --amend
$ git commit -m "Add README.md"
Undoing changes
You can also undo the staged changes by using the git checkout command if you have modified a file, which is already being tracked by Git in the working directory.
$ git checkout -- README.md
If in doubt, git status reminds the syntax if it detects changes.
(Use "git checkout -- ..." to discard changes in working directory)
History check
With at least one commit, we can see the history of the repository through git log.
$ git log
commit 900d87e0d958ad186d9266e1e469d7e23ab8bbf9
author: John Doe <[email protected]>
date: Thu Dec 8 2016 0100 4:39:31 p.m.
    Add README.md
Shortly about branches
Branch in Git repository is a separated part with its own commits history.
To see a list of branches in the repository, we can use the git branch command.
$ git branch
* master
An asterisk next to the branch name means that it is currently active.
To create a new branch we use the same command with the name of the branch as a parameter.
$ git branch example-branch
We can switch between different branches using git checkout.
$ git checkout example-branch
Switched to a new branch 'example-branch'
It is also possible to use a shortcut to create a new branch and immediately activate it.
$ git checkout -b unicorn-branch
Switched to a new branch 'unicorn-branch'
To copy changes from one branch to the other, we can use merge or rebase command. The most obvious difference between them is that merge creates merge commit every time except when fast forward is being used. It may add some unwanted noise into the branch. That's why in case of a need to copy changes from master to other branch it's a good idea to use git rebase.
$ git merge example-branch
$ git rebase unicorn-branch
To remove unnecessary branches use a git branch command again.
$ git branch -d example-branch
Deleted branch example-branch (you 900d87e).
If the branch has not passed through merge or rebase we can still remove it.
$ git branch -D some-branch
>Deleted branch example-branch (you e873b87).
Remote work
Using git remote command we can see currently configured servers. Additional -v parameter displays URL assigned to the shortcut.
$ git remote -v
origin [email protected]: user/repo.git (fetch)
origin [email protected]: user/repo.git (push)
If we want to send our commits to the world and we have created a repository using git init command, we have to add remote repositories.
$ git remote add origin [email protected]:user/repo.git (ssh)
We can also give remote repositories different shortcuts (not only origin)
$ git remote add backup [email protected]:user / repo.git (ssh)
Finally, to send your changes to the remote repository use git push command.
$ git push origin master
To download other people's changes or changes on other device we use git pull.
$ git pull
To be continued… :)
* Presentation was prepared by Piotrek Szpetkowski, our Junior Backend Engineer. 
0 notes
sunscrapersblog · 8 years ago
Text
6 Simple Tips to be More Productive Every Day
Tumblr media
Time management and productivity are always trendy subjects. Why? All of us experienced those stressful situations in life, where we struggled to do all planned things during the day and we failed. Usually we were either too annoyed at ourselves about our poor time management or too exhausted to worry about it. But if you’ve reached your critical point and decided to do something about your productivity, read our favourite choices from plenty available techniques.
Social media detox
We know that those funny cats videos, friends’ photos from exotic places or emotional discussions about air pollution are addictive. You want to quickly check your Facebook wall, but magically you get hooked by it for 30 minutes. And we’re not mentioning Twitter, Instagram, Snapchat, et cetera, et cetera… which take your precious time as well. If you don’t want to delete your social media accounts or you find it hard to use them less frequently, install one magical app: QualityTime (for Android users only). It will analyse how often do you unlock your phone and which apps steal the most of your precious time. Statistics can be overwhelming, but they might help you to take a break from social media. There is also one really useful plug in Chrome - News Feed Eradicator for Facebook. Great thing for everyone that are distracted by the bottomless pit of Facebook!
The 2-minute rule
You have something to do, right? Think fast - can you make it in two minutes? If the answer is “yes”, just do it now! Don’t plan it for later. You won’t get distracted and you won’t have to remember that you have a small task to do. It’s the simplest and easiest time management advice you can get, believe us.
Change the way you think about your goals
The easiest way to improve your productivity and say no to procrastination is to set your goals differently. For example: not to finish this enormous essay, but to work few minutes on it. You’ll quickly notice that those few minutes can change into one hour of a hard work (ever heard of a flow state?). It can work both ways though, so you need to be careful about your good and bad habits.
Pomodoro technique
If you can’t easily enter the flow state, try the Pomodoro technique. It’s a time management method, where you divide your work into intervals, traditionally 25 minutes long with short breaks in between. After few intervals you can make a longer break to clear your mind. And what to do with the short time off? You can always check out your Facebook feed! If you haven’t hidden it yet of course.
Train your brain but… let it rest sometimes
Everyone knows that brain exercises improve our mental agility and we encourage you to stimulate your mind by doing crossword puzzles, playing board games or any other brain challenging games. But when it comes to time management, one of the best ideas is to write down all your tasks to do and get everything out of your head. Even if you’re a master of memory, put your plans in a todo-list app or in a notebook - you will be sure that you won’t forget anything. We recommend Todoist for Android and Clear for iOS users. The only thing you have to remember is that routine always beats tools. No matter how many time managing apps you have - if you don’t stick to your plans, they will be useless!
Prioritizing tasks
When you finally have your tasks planned, prioritize them. You can use the Covey’s time management matrix of Urgent/Important things, which was mentioned in his book we’ve recommended a week ago (Top 4 books you need to read in 2017 (if you haven’t read them yet!)). It’s simple - put all your chores on a proper grid. Thanks to that tool, you will be able to throw away useless tasks and do what really matters. And remember - most of things you usually do, won’t have any useful outcome in few years. Choose wisely.
Tumblr media
These are our few tricks in terms of productivity in everyday life. Some of them might not sound like a rocket science, some of them might be more theoretical than practical. The point is to be consistent and perform a chosen task daily. Supposedly, forming a new habit takes around 21 days, which means we will get back to you in around a month. Good luck!
0 notes
sunscrapersblog · 8 years ago
Text
Looking for developers? These are your best options!
Tumblr media
There is a moment in a company life where existing team of developers is great and successful but there are not enough hands to work on a product. At this point, in-house recruitment starts to be a nightmare and extra support is needed - favourably as soon as possible. What can you do if you find yourself in this position? There are few options available and we will shortly describe you their pros and cons.
Recruitment agency
First option is the recruitment agency that can be the additional support for in-house recruitment. Although the process of hiring can still take more than a month, it’s probably, still,  the fastest option of getting help. The additional advantage is knowing all the associated costs upfront (agencies are transparent with their pricing) which can help in predicting the necessary budget. What’s more, many recruitment agencies work in a “success fee” mode which means that you only pay for the staffed position - that decreases the risk of spending money without hiring anyone.
On the other hand, the remuneration of the agency can be quite high. It depends on a country, but usually a commision that varies around 10-20% of candidate’s annual salary is a standard. You also need to remember that the agency is helpful when it comes to preliminary selection of candidates but after that their job is over. Conducting technical interviews and final responsibility for making the best choice is left to you.
Why cooperate with the recruitment agency?
HR recruitment agency might be the best option when you’re in a desperate need of increasing your recruitment pipeline fast and your budget is quite big. Also, when you’re looking for someone that can join you directly in your office.
Freelancer
Another option is hiring a freelancer that can join your team for a short period of time. There are many ways to find a perfect contractor - you can try networking or searching portals such as toptal.com or upwork.com that are collecting experienced freelancers. The recruitment process of a contractor can be faster than with the in-house recruitment. Also, existing databases of candidates, make checking their backgrounds easier. With in-house recruitment it’s more difficult - every time you have to ask for references from past employers. What is more, freelancers usually have lots of experience and different sets of skills because they change projects quite often.
There are some major cons of hiring freelancers though. Their availability is a big issue - they may work on few projects at the same time or even disappear when they find a full-time job elsewhere. It is also your responsibility to manage such person and do check-ups. You need to be sure that a freelancer is in constant connection with the team and knows what to do. Also, costs of hiring a local contractor are quite high. And yes, remote contractor can be cheaper but disadvantages we’ve mentioned above can grow to really serious issues. Last, but not least - a freelancer’s loyalty is rather low. When the project comes to an end a freelancer disappears from the team together with all meticulously gathered knowledge and know-how. With the next contractor you have to start the onboarding and training again.
So when it’s good to hire a freelancer?
Hiring a freelancer might be a good option when you need support for a short period of time - few weeks up to few months. It’s also easier when your project’s tasks are fully described and new developers don’t need a long training before they become productive.
Local software shop
Cooperation with a local software shop is a great option because of the stability of such partnership. Those companies hire many employees and that lets them be elastic with regards to developers assigned to your project. Usually the quality of their work is high because of their competences and track record. Also, some firms are like one stop shops - they have extra competences, so you can carry out your project only with them. Strategic planning? Market research? Design and UX? They can help you with almost anything you need.
But the biggest and usually the most disqualifying issue with the local software shop is the price of the cooperation. It’s the most expensive option from all mentioned above - agencies in the big US cities can charge even $200 per hour!
OK, when it’s a good option?
If you have a standalone project that can be developed in parallel to your current work (such as systems maintenance, bugs repairs, customer service requests), local software shop might be the way to go. It’s also a good option if you would like to work with a partner with broad competences, not only software development. Finally, this option will also work if you have an IT department within your company (because you don’t need it!) and you can implement a project through external partners.
Remote software shop
Might be the best option if you are looking for a reliable, solid and experienced partner but your budget is not limitless. In addition to the advantages listed in a previous paragraph, you have the access to truly talented people from different parts of the world. There is a huge competition for the best talents on a local market, that’s why extending your search area may help. With a remote dev shop, you have a great opportunity to build a long term cooperation - lower costs allow to set up a sustainable arrangement without the need to worry about optimizing costs in future. At Sunscrapers, for example, we can set up dedicated teams for our clients which, at the end of a day, is very similar to opening up an actual remote office.
The disadvantage of this solution might be the lengthy process of singling out the best software shop from many available options. It’s really important to conduct the process carefully and comprehensively, because there are many companies of questionable quality that are better to be avoided. That’s why you have to be 100% sure that communication with the chosen partner and his workflow will not cause problems. Also, you need to remember that distance might make things more difficult - with remote work everyone has to put in a little bit more effort.
When to cooperate with the remote software shop?
It’s simple - If you’re looking for a long term solution, want to keep your budget on a reasonable level and are not afraid of trying out a remote partnership.
Tumblr media
You know that you need help with the extension of your team of developers and you know what options you have. Now, you should think about your true needs. Do you need support in the short or long term? Does your project require close cooperation or is it standalone? What’s most important to you - time, budget, same location? Answer those questions and if you would like to know more about us and our experience, check out our website www.sunscrapers.com or contact us!
0 notes
sunscrapersblog · 8 years ago
Text
Top 4 books you need to read in 2017 (if you haven’t read them yet!)
Tumblr media
The beginning of the New Year is a great moment to look into ourselves and resolve some changes in our lives. Many people make typical New Year’s resolutions - they promise themselves that they will finally start exercising and lose few pounds or that they won’t be drinking that much coffee. We are not big fans of such promises, because they are easily forgotten around February. What’s a better idea then? Simply read a good book and inspire yourself to take real actions, not in the first months of 2017, but in the long term. Here are our 4 best books in the subject of self-development - if you haven’t read them yet, it might be a great moment to do it!
1. How to Win Friends and Influence People by Dale Carnegie
This all-time classic holds timeless advice about social activities and it is really useful in your family and business life. If you’re thinking about improving your soft skills and becoming a better leader you should definitely read it. Many suggestions mentioned there might seem obvious, but the trick is to extract all this wisdom into our life. You can see the difference and make your friends, colleagues and business partners will feel more appreciated. This book was written in 1936, so it might look a little old-fashioned, but it actually convinced us, that some this didn’t change much.
2. Rework: Change the Way You Work Forever by Jason Fried, David Heinemeier Hansson
Rework turns upside down thinking about business! The approach of this book is, “You need less than you think”. It reveals tricks how to be more productive, not to waste time on paperwork or meetings and how to stop talking and start working. It shows why planning is harmful and why it’s better to simply ignore the competition. It’s written with straightforward language, so you can easily read it in one evening. And we guarantee - you will be stunned by its simplicity!
3. Leadership: The Power of Emotional Intelligence by Daniel Goleman
Goleman is the renowned psychologist in the field of emotional intelligence. He has written many books about the importance of our emotions and this one concentrates on the role of emotions in the workplace. If you would like to inspire your coworkers and employees in the most effective way and you’re looking for innovations in your leadership, this might be a good read for you. Some may say there is nothing new or extraordinary in it, but we think that it has many valuable insights that should be taken into account.
4. 7 Habits of Highly Effective People: Powerful Lessons in Personal Change by Stephen R. Covey
It’s another all-time classic in our list and you’ve probably heard about it. If you didn’t read it yet, you should probably find some time and do it! This book presents an integrated approach into personal and professional issues connected with effectiveness. Multiple tips help to start managing your inner self and time, spent on unimportant activities. Covey reveals how to live happy, honest and productive life step-by-step.
Tumblr media
Books we’ve mentioned here are only few basics from our office bookshelf. We have so much more to read in upcoming months, so we will keep you informed about our next choices! In the meantime you can check out our older blog post about a book “Test-driven development”.
0 notes
sunscrapersblog · 8 years ago
Text
Agile vs. waterfall - what’s better for my business?
Tumblr media
For many years, the IT market was based on waterfall approach to software development projects. Then, more than 15 years ago, the agile methodology entered the scene and quickly dominated and capsized it. Obviously, that is why waterfall (traditional approach) is not that popular anymore. However we all know that when there are two options of doing something, there will be an emotional debate about which way is the best. Now, we will bombard you with information about both waterfall and agile, so you will be able to make an informed decision while choosing a perfect solution.
Waterfall - what is that?
Waterfall is the project management approach, where software development process is sequenced. It usually consists of 8 phases - conception, initiation, analysis, design, coding, testing, implementation and maintenance. When each phase is completed, project team can proceed to the next phase.
Tumblr media
It is a step-by-step, continuous process, that’s why once a step is completed, it is really difficult to go back to the previous step. Also, there is not much support for changes, so the project plan must be extensive and detailed from the beginning and then followed carefully.
When talking about advantages of waterfall approach, the main thing is the simplicity of the process - it’s easy to understand for everyone. Additionally, clients have an idea of what to expect in terms of project’s size, costs and timeline. We also have to mention meticulous record keeping and detailed documentation that follows traditional methodologies. They might be important for any improvements in the future.
There are few risks of using waterfall, where fundamental one is the danger of exceeding time and budget. In software development not everything can be fully planned in advance and some unexpected problems may appear. Very often, initial assumptions or requirements might occur to be incomplete or faulty. For example, integrations with third party software can cause a headache, because we don’t have any control over external services. Throughout a project, we can realise that the documentation is incomplete, the third party API itself doesn’t provide desired functionalities, or worse, the API has changed significantly since we’ve prepared our analysis and estimate. Waterfall doesn’t support changes satisfactorily. Not everyone knows that developers need a formalised procedure before taking action. Every modification consumes a lot of resources, that could otherwise be spent on delivering the agreed scope of the project. Also, testing happens at the end of a project, which means that bugs are discovered really late in the process and the cost of fixing them is much higher. At some point, the budget is fully used, but there are still multitude of tasks left which still need to be delivered under the terms of original agreement. Client pushes to implement all desired functionalities and in the same time software shop wants to finish as soon as possible, without generating more losses. This causes a risk of the lower quality of code and poor morale of a team.
The phenomenon of Agile
Agile came as the solution for traditional waterfall limitations. Its incremental approach completely changed the way of handling IT projects. The main characteristic is the idea of sprints - short iterations that usually last a week, two weeks or a month and consist of planning, coding and summarising, which resembles a tiny waterfall project. At the end of each sprint, project is tested, deployed and future plans and priorities are re-evaluated.
Tumblr media
Agile approach gives a greater value for money because of the tasks prioritisation and incremental delivery. This helps to focus on features that bring the most value to users first. What is more, due to frequent testing and early problem discovery, developers are able to deliver a higher quality product. Also, agile gives a way better support for changes. At the end of each iteration, new knowledge is gained and everything is reviewed. It’s the moment where project plan can be updated, which is more reasonable and practical.
However, agile methodology has some disadvantages. Without a definite plan, the final product can turn out to be different from what was expected in the beginning. That’s not necessarily bad, because client’s needs can change basing on project’s progress and customer’s feedback. Furthermore, documentation can be less detailed, which can sometimes make the onboarding process longer for new team members. Not to mention the fact that the time and cost of a project can’t be predicted with perfect accuracy. They are usually specified as a range of values and that may seem more risky for a client.
The only certain thing in software development projects is change, especially in the IT industry - everything is transforming quicker and quicker, on a scale that has never been seen before. While both waterfall and agile methodologies solve complex issues in different ways, it’s the agile approach that supports all those changes in businesslike and functional manner. We’ve expanded our opinion on this topic in our previous blog post “Are you doomed to fail your IT project? Hourly rate vs. fixed bid discussion”. Though, we have to mention, we are not saying that waterfall is simply the worst option on Earth - it will work, if your project is predictable and simple.
0 notes
sunscrapersblog · 9 years ago
Text
Are you doomed to fail your IT project? Hourly rate vs. fixed bid discussion
Tumblr media
We know that choosing a good process to handle your IT project can be a headache. At first glance the fixed price might seem like the best possibility, but in fact it’s the hourly rate that seems to be the only reasonable option. What is more interesting, it is not even a matter of choice anymore - the software development landscape has changed so much recently that there is a high probability you will fail your project with fixed fee approach. Why? We will tell you now.
Project management models
First of all, both billing options are direct outcome of two different project management models - agile and waterfall.
Waterfall model is a sequential process, where planning, designing, coding, testing, and launch are consecutive phases that you need to complete one after another. This process doesn’t support changes very well - they often result in significant delays and going over the budget. In waterfall methodology, fixed bid is its ensuing characteristic. With agile model on the other hand, developers are able to optimize their workflow, by dividing the project into smaller sprints. Thanks to that, they iteratively plan, design and develop project’s components which results in continuous delivery. Agile methodology allows the team to make changes in the scope, fix bugs as soon as they come up and deliver the product faster. That’s why the other name for the agile contract is “time and material”, where hourly rate is a basic form of billing. 
Statistically, agile model has around 40% project’s success rate, whereas waterfall model only 11%*, so it may seem to be a simple choice for clients.
Money, money, money…
Now, even if the agile approach seems like a great idea, an important question appears: “How much it will cost?”. At this point, not everyone is aware that IT projects evolved so much, that we are no longer talking about building simple websites but rather about building real Internet companies. Most successful applications require constant attention and development support due to user feedback, scalability issues and changes on the market- just have a look at Uber. That’s why when it comes to counting expenses, it’s difficult to predict the exact final costs of the finished process. This might be scary, but it is a new reality, where you’re working on your business, not a small project with a definite ending. Fixed fee doesn’t have any support for this - you are reassured about your budget, but as a matter of fact you must repeatedly renegotiate agreements and there is a very real danger of delays and low quality product.
With billing per hour the situation is completely different - progress is measured on a daily basis so there is a possibility to react quickly when something is going wrong. It’s also easier to make sure you’re making the most of your budget by prioritising the most important features and frequently testing them with the actual user. With simple and transparent billing, you pay only for the time spent on the project and the work that would have to be done anyway, not the artificial buffers and premiums for vendor’s risk.
Cooperation issues
Another important matter is the cooperation between the client and a software shop. It is way easier for the team to understand client’s needs with the agile model. Thanks to frequent meetings, clients have bigger influence over a product and are able to constantly improve their assumptions. Regular insights into timesheets, project stats and team performance data allow them to make the best project decisions.
With the fixed price approach little project information is shared, so you don’t really learn much in the process. It’s not that waterfall is bad to the bone but team morale and work atmosphere is lower than with time and material. It may not seem obvious but there is a hidden conflict of interests in fixed bid billing, when the team hasn’t finished the project but has already depleted the whole budget. In overwhelming number of cases contractor’s mood is going down and client is left frustrated trying to keep the remaining features in the scope. As a result, no one is pleased from the cooperation and both sides want to finish as soon as possible, without caring for the product quality. That is not a good prerequisite for the long term relationship.
Tumblr media
As we’ve mentioned already, fixed fee is not totally bad and unacceptable, because there are some situations, where this approach will work. We are talking about small, predictable projects where everything can be planned in 100% before the start, like a corporate website or building a house.
To sum up, you’re probably doomed to fail your Internet business if you insist on a fixed price option. Surprisingly, you’re going to spend more than planned, even with the “safety buffer” used in the estimate to compensate for risk and uncertainty. Cooperation with the chosen team of developers might be a nightmare after some time and most likely you won’t be satisfied with the quality of a finished product. So if you truly care about your business and you think about the long term success, hourly rate is the way to go.
* The 2015 CHAOS Report by Standish Group
1 note · View note
sunscrapersblog · 9 years ago
Text
Perfect decision: outsourcing to Poland
Tumblr media
Outsourcing to Poland is nothing new - our country has been recently a huge market for foreign investments and it is prepared for a serious expansion in upcoming years. Poland is considered the number one investment location in the CEE region by AHK survey and most attractive location for nearshore outsourcing in Europe, according to recent Raconteur report. But those are economic statistics, and what about some significant real-life assets of Polish developers?
Knowledge
We brag about around 80,000 graduates in IT each year in Poland, although some may say that universities can not keep up with the rapidly changing market’s needs in scope of the new technologies. And yes, our IT market might be less mature than Western markets, but Polish developers are world-known for their proficiency in general technical knowledge. Did you know that Polish IT professionals get the highest ranks in international programming contests (Microsoft Imagine Cup, Google Code Jam, TopCoder, the Central European Programming Contest (CEPC), every year? We aim high in our commercial experience -  Polish development shops cooperate not only with world’s best tech startups located all around the world, but also with bigger players on the field.
Communication
But we all know that knowledge might be nothing without other skills. Fluent English is starting to be a standard among Polish graduates and employees, which places them quite high in the English driven business world and makes every international cooperation easier to handle. Nevertheless poor communication skills, lack of initiative and business understanding are often considered as the weakest points of Polish employees. That’s why at Sunscrapers we look for developers who, apart from technical knowledge, have high level of interpersonal assets. We then inspire them to develop a proactive attitude and improve their soft skills even more. As a result, we are able to successfully communicate, understand our clients and work with them remotely.
Cultural proximity
What also benefits Poland as the outsourcing partner, is the similarity of cultural and social norms. There is a small gap between Polish and Western mindset, which is nothing bad, because every nation can be proud of its specific traits, right? That being said, we are way much comparable to Western professionals and business partners, than for example, Asian developers. Not to mention, that there are strong institutional ties between worldwide partners, which helps in any cooperation and understanding.
Economic issues
If you are wondering about outsourcing projects to Poland, you definitely take economic matters under account. We have to say - Poland is doing just fine. We remained stable after 2008 crisis and even now, after recent elections and Brexit, more and more investors are deciding to invest in Poland - an annual growth rate in the software market reached 10.7%. Poland is also an acknowledged member of EU, NATO, WTO, OECD and ESA and has a transparent legal system.
The high quality of Polish web development services, combined with excellent communication skills and economic factors, are the driving forces, that make outsourcing to Poland interesting and affordable for foreign companies. Software shops like Sunscrapers cooperate with US and Europe based clients, providing them with skilled developers. If you are interested in finding out more about our outsourcing services, just let us know at [email protected].
0 notes
sunscrapersblog · 9 years ago
Text
Python - our language of choice
Tumblr media
Choosing the right programming language for your business
Regardless of whether a large company is introducing a new IT project or a startup is building its first MVP, choosing software engineers is one of the most important decisions any team will make. This decision will determine a project’s success or failure. Today I explain the reasons why we believe Python is the best language of choice for us.
There are many programming languages to choose from, as well as there isn't just one feature to think about during this selection. Each language has different characteristics, communities, ecosystems and support to consider. In this article we want to show you how to analyze the relevant factors when selecting a programming language. What’s more, we explain why our language of choice is Python.  
Let’s think about two kind of circumstances. If it's for a personal project, you may choose a language you know. However, if you have your own company or want to start one, there are more factors to consider before choosing a perfect technology to solve your business problems. A choice of technology determines a second step which is finding the best tech partner.
Which aspects are relevant during a selection process of a programming language? To answer the question you should concentrate on two aspects related to the programming stack. The first one is the popularity of a language. Make sure that there are many well qualified developers on your market who are ready to work at your company. The second one is the problem that you want to solve using a particular technology - check which technology was used in similar business problems and if there are libraries supporting it.
Our language of choice is Python
This post will explain to you why Sunscrapers uses Python and will describe the benefits which our clients get due to that choice. At Sunscrapers, our backend language of choice has been Python for 5+ years.
Our previous post answers to the question: what do we love Python for? There are three main reasons:
Python is developed under an open source license;
its community is open and mature;
its foundations are easy to learn for beginners.
Now we want to go further and explain you why Python is our language of choice.
Let’s take a look at the most relevant aspects of Python
We should start with a brief presentation of Python’s definition and its usage. Python is high-level, general-purpose, interpreted, dynamic programming language. Its design philosophy emphasizes code readability and its syntax allows programmers to express concepts in fewer lines of code than possible in other languages such as C++ or Java.
We can use Python in these fields:
web development
scientific programming
big data and machine learning
computer graphics
scripting
Python responds to the needs of our customers and helps us ensure the best quality of support. Thanks to its fast implementation we can introduce changes in our clients’ projects without additional waste of time. The next valuable aspect is readable code - we can easily involve new person to the development process when our client wants to upbuild his project. Python is good for web development  - it fits nicely with front-end frameworks like Angular.js. It can scale to solve complex problems. Also, it guarantees an intensive focus on the problem because of a simple and elegant syntax. We can easily build MVP in Python to test our client’s business idea.
There are other important benefits that boost the effectiveness of working in Python. Most of all, Python is constantly updated and thanks to that the projects written in it will not stack in an old technology. We should also appreciate its active community which organizes valuable events, promotes Python and is created by many talented developers. The last one is a spectacular amount of open source libraries which gives us additional possibilities of building-up our projects.
As you may have noticed, Python gives us a wide range of possibilities to support our clients through the use of technology. We want to go deeper into this topic and that’s why future posts in this section will compare Python to other languages. Stay tuned!
1 note · View note
sunscrapersblog · 9 years ago
Text
DVCS Workflows for Teams - Bartek Rychlicki
youtube
This presentation is a part of Sunscrapers’ weekly talks.
Slides available here: http://www.slideshare.net/sunscrapers/dvcs-workflows-for-teams-bartek-rychlicki
0 notes
sunscrapersblog · 9 years ago
Text
Our work culture: supporting the Python community
Tumblr media
What do we love Python for?  
Python is the most rapidly growing programming language - it has a huge impact on web development, scientific computing and education. Why so many companies and developers choose Python?
There are three main reasons. First of all, Python is developed under an open source license. Secondly, Python community is open and mature - there are numerous initiatives like conferences, meetups and coding sprints. Finally, Python foundations are easy to learn for beginners.  
Why do we support the Python community?
Our commercial activity is based on Python and we benefit from contributions of the whole Python community e.g. we use open source libraries in the projects we do for our clients. Python, in a sense, enables our company to exist and realize its business goals. That’s why we look for opportunities of supporting and giving back to its community.
What do we do and how?
First of all, we encourage people to start using Python by organizing events that popularize that language. We’ve started by organizing PyWaw - monthly developers’ meetup in Warsaw. There was already more than 50 meetups and over 130 talks. We then took it to the next level by co-organising and volunteering at some of the splendid conferences like PyWaw Summit, DjangoCon, Makerland. We’ve also sponsored or mentored at Django Girls and Django Carrots workshops - a series of events that help beginners make their first steps in Python.
Secondly, we share insights and knowledge that have helped us become successful developers. One way of doing that is through weekly tech talks. Once a week our team gathers in a conference room to participate in a presentation prepared by one of us. The topic of the speech concerns either technology or soft skills. We record those talks and publish them on our YouTube channel so that other people interested in IT can access them. We’ve explained the whole idea in a separate post: Our work culture: weekly tech talks. Another way of sharing knowledge is speaking at industry events - you can find some of those talks on our YouTube channel as well.
Last by not least, we contribute to open source ourselves with djoser and djet being our most popular libraries.
The effects of our activities
We’re glad that over the years we’ve managed to inspire a lot of people to start programming and choose Python as their first language. Our activities seem to have helped a lot of people in making major career choices and we have also noticed how PyWaw, over the years, has contributed to building a solid tech scene in Warsaw. It is very rewarding for us to see such effects and it definitely fuels our future plans.
Let’s talk about our plans
We now plan to organize a second edition of PyWaw Summit in 2017 (read more about the last one!). We’re also considering evolving our weekly presentation routine into a new initiative called #ToTheSun. In addition to a tech presentation we would watch other lectures and have group discussions. We’re planning on inviting all other Python enthusiasts from Warsaw, not only our Sunscrapers teammates. After an educational part there would be time for informal conversations with beer and a foosball!
Scroll through the photo gallery below to see where we took part as organizers, mentors, speakers and participants.
Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media
0 notes
sunscrapersblog · 9 years ago
Text
Swift -  Krzysztof Skarupa
youtube
Here’s Krzysztof’s recent tech talk about an introduction to Swift for Python developers.
This presentation is a part of Sunscrapers’ weekly talks.
Slides available here: http://www.slideshare.net/sunscrapers/swift-krzysztof-skarupa
0 notes
sunscrapersblog · 9 years ago
Text
Django ORM - Marcin Markiewicz
youtube
Marcin familiarized us with Django ORM. Slides available here: http://www.slideshare.net/sunscrapers/django-orm-marcin-markiewicz
This presentation is a part of Sunscrapers’ weekly talks.
0 notes
sunscrapersblog · 9 years ago
Text
How to justify your recommendation? - Łukasz Karwacki
youtube
Łukasz’s presentation explains the subject of justifying our recommendation to people who we work with. It can be applied not only to our clients or coworkers but anyone in our life. 
The general rules that we should follow are:
1. get involved
2. communicate
3. present benefits (from client’s POV)
4. provide options
This presentation is a part of Sunscrapers’ weekly talks.
Slides available here: http://www.slideshare.net/sunscrapers/how-to-justify-your-recommendation-ukasz-karwacki
0 notes
sunscrapersblog · 9 years ago
Text
PostgreSQL and JSON  with Python - Przemek Lewandowski
youtube
This presentation is a part of Sunscrapers’ weekly talks. The main points include: PostgreSQL types,  HStore vs JSON vs JSONB,  SQLAlchemy, Django.
1. Why?
Schema-less data
Schema-unknown data
Document storage
User-defined schema
2. PostgreSQL types:
XML (since 8.2)
HStore (since 8.2)
JSON (since 9.2)
JSONB (since 9.4)
3. HStore vs JSON vs JSONB
Only simple key/value pairs
No nesting
Strings only
Indexing
Many functions and operators
4. SQLAlchemy
Simple validation on input
Stored as text (like XML)
Preserves key order and duplicates
Indexes (only expression index)
5. JSONB
Full JSON implementation
Binary storage
No key order or duplicate preservation
Fast access operations
Indexing
No date type!
6. SQLAlchemy
PostgreSQL dialect
Close to database
HStore, JSON, JSONB data types and much more
7. Django ORM
HStoreField since 1.8
JSONField since 1.9 (uses JSONB)
Support for migrations
Third party libs like: django-hstore
Slides available here: http://www.slideshare.net/sunscrapers/postgresql-and-json-with-python-przemek-lewandowski
0 notes
sunscrapersblog · 9 years ago
Text
Python 2 ⇒ Python 3 migration - Krzysztof Skarupa (pl)
youtube
Here’s Krzysztof’s recent tech talk about Python 2 --> Python 3 migration (in practice).
This presentation is a part of Sunscrapers’ weekly talks.
Slides available here: http://www.slideshare.net/sunscrapers/py2-py3-migration-krzysztof-skarupa
0 notes
sunscrapersblog · 9 years ago
Text
Introduction to ReactJS - Comparison to AngularJS 2 - Robert Piękoś (pl)
youtube
Here's Robert's recent presentation about Angular2 framework and ReactJS library.
This presentation is a part of Sunscrapers’ weekly talks.
Slides available here: http://www.slideshare.net/sunscrapers/introduction-to-reactjs-comparison-to-angularjs-2-robert-piko-pl
0 notes
sunscrapersblog · 9 years ago
Text
The complete list of our tech talks
Tumblr media
See the complete list of available presentations from our weekly tech talks!
Every Thursday at 4:30 p.m. our team gathers in a conference room to participate in a presentation prepared by one of us. The topic of the speech can concern tech (IT, project management) and soft skills (work culture, communication).
We explain our idea in this post: Our work culture: weekly tech talks.
For a video of each talk, please click on the title below: 
1. Reactive programming - Jakub Włodaczyk 
2. Meta catch-ups - Łukasz Karwacki
3. Foundations of Foundation 6 - Jakub Włodaczyk 
4. Our work culture - Łukasz Karwacki
5. Interruptions at the team level - Łukasz Karwacki
6. Creating value for customers - Łukasz Karwacki
7. Design focused development - Przemek Lewandowski  
8. Going remote!
9. Main rules of web design - Dawid Domański 
10. Visitors tracking tools - Konrad Hałas
11. Quick guide to virtualization - Szymon Teżewski
12. Flat Design - Dawid Domański
13. Tmux and screen inception 
14. Aircraft spotting - Konrad Hałas
15. Scrum and XP from the Trenches - Przemek Lewandowski
16. Semantic HTML - Szymon Teżewski
17. The art of writing emails - Łukasz Karwacki 
18. Introduction to ReactJS - Comparison to AngularJS 2 - Robert Piękoś (pl)
19. DVCS Workflows for Teams - Bartek Rychlicki
20. Swift - Krzysztof Skarupa
21. Django ORM - Marcin Markiewicz
22. How to justify your recommendation - Łukasz Karwacki  
0 notes