How to know if you’re standing in front of a pro Python developerIf you're planning a project that requires expertise in Python and are now looking for developers to help you out, don't worry – we've got you covered. In this article, we share everything you need to know about recruiting Python experts: what skills to expect, what knowledge they should have and how to tell they're a good match for your project. Here's our guide to recruiting Python experts.
What to look for in a resumeDevelopers usually include plenty of technical details in their resumes, and it's smart to pay attention to them. First, make sure that you understand which version of Python the developer uses – some of the most popular versions are 2.6, 2.7, 3.4, and 3.5. Note that Python 2 and 3 are very different, but a skilled developer will be able to switch from one to the other. Python 2.7 is the latest version of Python 2, and 3.7 is the newest version of Python 3. If you're planning a web development project, make sure that the developer is well-versed in Python web frameworks such as Django (the most popular one), Flask, Bottle, Tornado, and Pyramid. For more information about these frameworks, check out these posts:
- What is Django and how to get started?
- Django, Flask, or Pyramid? How to choose the right Python framework for your project?
What to ask during the interviewOnce a candidate's resume checks out all the boxes you need, it's time for an interview. In general, you're looking for someone who has strong problem-solving skills, can to create, analyze and implement algorithms, and organize code effectively. If you ask the right questions, you can get the idea about these skills. Here are some goals for your interview that indicate which questions you need to ask:
- Find out more about the candidate's current Python experience, achievements, and responsibilities. Ask with which technologies listed in their resume they had commercial experience during the last 2-3 years. Ask them to share their core responsibilities and achievements.
- Allow the candidate to demonstrate their knowledge about the Python ecosystem. You can do that by asking which open source libraries they consider valuable and why. Ask what they take into account when choosing a particular technology for the project. Don't hesitate to follow up with questions about their opinion regarding commercial vs. open source solutions. That way you'll learn how the candidate approaches projects and what is their level of experience with these technologies.
- Ask about particular technologies listed in their resume to learn their rationale for using them over others. Ask: Why not use framework X for that task? You'll learn how the candidate chose the technology and check whether their opinion is in line with your goals and the team you're building. Answers should be understandable and carefully formulated. You’ll see if candidate is familiar with the topic and not just throwing a bunch of technical terms at you to sound smart.
- Learn whether the candidate was a decision-maker in previous projects. You can do that by asking at what stage they joined these recent projects. Ask whether the candidate was involved in the choice of project setup or technology and whether they would do something different. That way you'll learn whether the candidate can draw conclusions from past mistakes and learn from their experience. If you're looking someone experienced in building systems from scratch, this question is fundamental.
- Search for right mindset. An exceptional programmer can solve problems quickly and with a high awareness of the inner workings of a given environment. Look for people with natural curiosity: such candidates are always tinkering with code, browsing through open source applications, and are enthusiastic about new things he/she just learned.
- Avoid following any preconceived notions about the candidate. The fact that a candidate has graduated from a prestigious university and has PhD should not lead you into thinking that they are smart. It works the other way round: a seemingly weak curriculum isn’t a reason for throwing the candidate into the lowest bin. Try to judge each person equally based on fair criteria (knowledge, skills, etc.).
Hiring Python experts can be challengingIt's not easy to recruit Python experts to create a coherent and well-integrated team where each member's skill set adds to the overall value of the team. It also might turn out to be very expensive if you hire in your home market. That's why hiring a dedicated team is a viable solution. You get to benefit from the expertise of a team that has all the skills you need and follows processes that support collaboration and timely delivery. Most importantly, by hiring a dedicated team you won't have to go through the time-consuming process of screening candidates – all it takes is stating your requirements and your tech partner will assemble a team that meets them all. At Sunscrapers, we have partnered with organizations that wanted to scale their teams quickly but didn't want to waste time and money on requirements. In some of these collaborations, our partners stopped to grow their internal teams and instead asked us to scale the team responsible for delivering work to them. That's a clear sign that the dedicated team model works to their advantage. If you'd like to learn more about hiring a dedicated Python team, reach out to us; we help organizations build and scale teams without losing the momentum of their business.
Tech talk: PostgreSQL and JSON with PythonThis presentation is a part of our weekly talks. This week, our CTO Przemek talked to us about the use of PostgreSQL and JSON in combination with Python. Check out the content of the presentation below or watch the video (in Polish). Przemek’s presentation slides are available here.
Why use JSON in our databases at all?Database experts want order in their databases. JSON comes in handy for managing data that has no schema but we still want to include it in our database for later organization. Sometimes we might have data where the schema is unknown - for example, when we download undocumented data from API. That’s also where JSON can help. It’s also a good solution for storing documents we need in a single place to avoid expensive joins later on. In some applications, the user establishes their own schema - for example, the ecommerce context the user may want to define product characteristics. There exist solutions for making that work in a relational database, but doing it in JSON simply makes our lives easier.
PostgreSQL typesPostgreSQL has been introducing novel solutions on a regular basis. Since version 8.2, it introduced the possibility of storing XML and HStore documents in databases. XML: PostgreSQL just checks whether XML documents are correct and validates them. Users can also search through XML. HStore: it’s a simple key value storage, both keys and values that end up in HStore become strings. JSON: available since version 9.2, JSON ended up being quite similar to XML - JSON type is a string and the only thing users can do is validate whether its syntax is correct. JSONB: available since version 9.4, full implementation of JSON, data is recorded binarily.
HStore vs JSON vs JSONBEssentially, these 3 data types are continuous steps of the evolution of PostgreSQL’s ability to store unstructured data. There are several thing you should consider when using either of these options. HStore:
- Accepts only simple key/value pairs,
- Includes only strings,
- Doesn’t allow nesting (at least not directly, but you can always use another key as value since they’re all strings),
- Allows GiST index which is suitable for traversing hierarchical data.
- Behaves like a text type that validates whether the text has an adequate structure.
- Retains the exact structure of input document, including unsorted and duplicated keys.
- The most sophisticated option out of these three,
- Operates on all JSON data types,
- Allows nesting,
- Allows GIN indexing, suitable for traversing key/value documents.
JSONBJSONB is a full JSON implementation that offers a binary data storage. Note that it doesn't provide developers with a key order or duplicate preservation. There’s also no date type. On the other hand, JSONB allows quick access operations and easy indexing.
SQLAlchemySQLAlchemy is a Python library for database service that allows using the three types of data mentioned above. It supports developers in writing JSON/JSONB queries with the help of Python. Have a look at this documentation to learn more about SQLAlchemy.
Django ORMSo how does the situton look like in Django? For a long time, developers had no support for PostgreSQL. There were some libraries available like Django HStore that were external applications. The community created support for PostgreSQL and these data types. At some point, the Django community decided to create something similar to SQLAlchemy. In Django 1.8, we had HStoreField and since 1.9, JSONField which uses JSONB. Have you got any questions about making PostgreSQL and JSON work with Python? Leave us a comment; we’re always happy to share our knowledge and start a conversation about best practices in the community.
Why is clean data so important for analytics and business intelligence?Small businesses can get away with a few Excel spreadsheets for tracking their operations. However, as organizations continue to grow, they can no longer keep up with that simple method. At one point or another, data begins to pour in, and a single-page spreadsheet transforms into a database that later grows into a data warehouse. Organizations that want to win on their markets need to know where to find the data they need and how it all ties together. But before setting out to analyze data, they need to make sure that their dataset is clean. Read on to find out what data clean cleaning is and why it's so crucial for analytics and business intelligence.
What is data cleaning and why should you care?Datasets usually contain large volumes of data that may be stored in formats that are not easy to use. That's why data scientists need first to make sure that data is correctly formatted and conforms to the set of rules. Moreover, combining data from different sources can be tricky, and another job of data scientists is making sure that the resulting combination of information makes sense. Data sparseness and formatting inconsistencies are the biggest challenges – and that's what data cleaning is all about. Data cleaning is a task that identifies incorrect, incomplete, inaccurate, or irrelevant data, fixes the problems, and makes sure that all such issues will be fixed automatically in the future. According to CrowdFlower, data scientists spend 60% of the time organizing and cleaning data!
Here's why data cleaning is so importantData quality is of central importance to enterprises that rely on data for maintaining their operations. To give you an example, businesses need to make sure that accurate invoices are emailed to the right customers. To make the most of customer data and to boost the value of the brand businesses need to focus on data quality. Here are some more benefits data cleaning brings to enterprises. Avoid costly errors Data cleaning is the single best solution for steering clear of the costs that crop up when organizations are busy processing errors, correcting incorrect data, or troubleshooting. Boost customer acquisition Organizations that maintain their databases in shape can develop lists of prospects using accurate and updated data. As a result, they increase the efficiency of their customer acquisition and reduce its cost. Make sense of data across different channels Data cleaning clears the way to managing multichannel customer data seamlessly, allowing organizations to find opportunities for successful marketing campaigns and new ways for reaching their target audiences. Improve the decision-making process Nothing helps to boost a decision-making process like clean data. Accurate and updated data supports analytics and business intelligence that in turn provide organizations with resources for better decision-making and execution. Increase employee productivity Clean and well-maintained databases ensure high productivity of employees who can take advantage of that information in a broad range of areas, starting from customer acquisition to resource planning. Businesses that actively improve their data consistency and accuracy also improve their response rate and boost revenue.
Does outsourcing data cleaning make sense?Organizations that are busy growing their operations often struggle to keep their databases in shape. Outsourcing database cleaning and management is a smart move. That way organizations can take advantage of extra resources in a low-cost and low-risk way, without adding new data scientists to their team. Outsourcing data cleaning is a flexible solution – the resources are available right when organizations need them. Moreover, they can also experiment with new ideas without having to invest a lost up front.
Cleaning your data is a mustBusinesses that take proper care of their databases are rewarded with these and many more benefits. Organizations that keep business critical information at a high-quality gain a significant competitive advantage in their markets because they're able to adjust their operations to the changing circumstances quickly. At Sunscrapers, we know that clean data is the starting point for any successful data science project and always include it to make sure that our projects bring maximum benefits to our partners.
4 business challenges Machine Learning solvesDuring the last few years, machine learning became a key industry buzzword and practically the Holy Grail people believe would solve every kind of business problem. Let's get one thing clear: machine learning isn't going to answer all of your business problems. However, the models and algorithms that are part of machine learning can be applied very successfully to address specific issues. In fact, sometimes machine learning is the best solution to a given problem. When deciding to invest in machine learning, the first step is making sure that your problem actually requires that type of expertise. But how do you know which problems can be tackled with machine learning technologies? According to Harvard Business Review, organizations should start by distinguishing between automation problems and learning problems. “Machine learning can help automate your processes, but not all automation problems require learning.” In general, you can apply automation to a problem without learning, if the problem in question is relatively simple. If you're dealing with a task that has a predefined sequence of steps that are currently executed by a human, you can quickly arrange for a machine to do it instead without having to employ any machine learning algorithms. To help you decide whether your problem requires machine learning expertise, here is a short guide to top 4 business challenges we believe machine learning helps to solve best.
1. Problems that require analytics of massive dataA well-trained machine learning algorithm is able to make a decision way faster than it takes a human to process input, analyze it, and come up with the conclusion. Moreover, a human analyst can only interpret so many data points a day. Algorithms, on the other hand, can try their analysis, evaluate it, and then adapt it to come up with better results several times per second! That type of analytics comes in handy in the finance industry, for example in credit card fraud detection. Since criminals are coming up with new fraud methods all the time, systems need to quickly adapt in order to detect these patterns in real time and understand the common signals that point to fraud. The same holds true for product recommendations. Every consumer has different preferences which additionally change over time. Amazon and Netflix use engagement and ratings that make up huge data volumes to predict what a given user might want to watch or buy next. That type of analytics is simply way too complex and time-consuming for human brains.
2. Problems that are affected by the human biasAlgorithms don't approach data sets in the same way as their makers. In fact, they continuously iterate their decision-making process and refine the way in which they work on data sets. Moreover, machine learning algorithms will try approaches humans never would, just because they know the world while the machine is learning from scratch. Naturally, since humans create algorithms, these algorithms might – and in fact do – carry some of our biases. However, in situations where you need a data set to be analyzed as objectively as possible, it's smarter to rely on the machine rather than a human. For example, machine learning algorithms will be able to pick up patterns in user behavior and determine which advertisements should be displayed to individual users on the basis of data about these behaviors, not some preconceived beliefs about who that type of user is and what they might like.
3. Problems that require precisionEven if they do their best, human analysts are only human, and they might suffer from inconsistencies in their work. They might not perceive the difference between 89% and 89,1%. The machine will see that difference and adjust its behavior every single time. That type of precision is especially valuable in areas that rely on accuracy inaccessible to the human eye. Computer vision systems are a great example here. It's a breakthrough area in machine learning that allows medical professionals to take advantage of algorithms for image analysis and pick up information that serves diagnostic purposes. Other experts also predict that machine learning will play an increasingly important role in diagnostic applications as it becomes more accessible - and medical professionals become more willing to share their data with algorithms.
4. Problems that are too expensive to be solved by humansDeveloping and training a machine learning algorithm includes upfront costs, but it's an excellent decision in the long run. To put it simply, sometimes putting human analysts to a problem is too expensive. Smart organizations often give their algorithms tasks that are related to issues that aren't worth it for humans to solve. For example, if an algorithm can pick up ways to optimize a process and help a team gain an extra 10% of improvement, that's a definite win. However, that same improvement isn't enough to justify the comparatively high cost of hours spent on the problem. Human employees need training, management, and all types of associated expenses like insurance, vacations, and salary. There is also the risk that they get sick or quit right in the middle of a key crunch. An example of this is manual data entry. Some of the significant business problems arise from inaccuracy or duplication of data. Organizations that rely on data for their business operations tend to employ machine learning and predictive modeling algorithms that perform time-intensive data entry and documentation tasks. That way organizations can delegate higher value problem-solving tasks to their human workers.
When machine learning comes in handyWe hope this short list of problems that lend themselves to machine learning helps you in deciding whether your business can benefit from this technology. There's no denying that machine learning can bring in a lot of value to an organization, but before bringing algorithms on board it's a good idea to make sure that you actually need their help – or could do with simple automation software. Do you know any other problems that machine learning solves? Or perhaps you use machine learning algorithms successfully to solve your business problems? Share your thoughts in comments and be sure to check our blog for more updates about the art and science of machine learning.
8 resources to help you become a better developerAre you looking for sources to fine-tune your development skills or learn a new language? We've got you covered. At Sunscrapers, we always encourage our team members to broaden their horizons using our in-house library, participating in industry events and conferences, and taking advantage of online resources. https://www.instagram.com/p/Bd0AxEPHqDP/?hl=en&taken-by=sunscrapers We decided to line up our favorite books, online courses, and platforms that have supported our professional development in the past.
Here are 8 resources to help you boost your developer skills and expand your knowledge.
Clean Code by Robert C. MartinHave you ever heard of Uncle Bob? That's right, the author of this book is the revered Uncle Bob. He's admired by the developer community for his conference speeches and online contributions where he shares tips on how to develop an organized and maintainable code. Reading this book will help you consider your practices – why you code in a particular way and what your style says about your approach to the craft. Uncle Bob presents a number of principles that help to identify code smells and offers a range of processes we can all use to clean up and refactor code to make it more readable and maintainable. A must-read.
The Art of UNIX Programming by Eric S. RaymondUnix is considered as one of the engineering accomplishments of the second half of the 20th century for a reason. The book argues that the excellence of Unix comes from the community effort because over the years it has gathered so many smart people to design and build it. Eric Raymond is, in fact, the author of the famous open-source manifesto the Cathedral and the Bazaar. In this book, he primarily aims to show Unix programmers why it's smart to follow principles of good software design and code sharing. You will also find plenty of valuable practical information in the form of case studies that discuss various aspects of Unix in action.
We hope these resources help you in crafting your skills as a developer and deepening your knowledge about the art of developing software.Do you know any other resources that are really helpful for developers? Please share them in comments to help the community learn best practices for delivering quality software.
How to build great development teams
Every fantastic product started with a great team.Smart managers no longer see team members as mere cogs in a machine and hire exclusively with the right skills in mind. Building a great team means that you will be focusing on finding individuals who fit your team culture and balance the rest of the team. As a manager building the team, it might seem convenient to pick team members and stick them to any position where you think they will do best.
But that's just not how teams work.Here are 5 tips to help you build a fantastic team of developers that will get your project off the ground.
1. Mind the senior/junior proportionWhen building a developer team, you will choose from three different kinds of developers: senior, mid-level, and junior coders. Your team needs all of them to deliver optimal productivity – but in the right proportion. Senior developers can mentor other team members and bring in a deep understanding of application architecture. They will also help keep your team productive and teach that skill to others. Junior and mid-level developers, on the other hand, will be the ones to develop features, fix bugs, and perform other duties under the guidance of senior mentors. Since junior developers have limited vision, they rarely understand how the choices they make today may impact the entire team productivity in the future. Even if they close a lot of the tickets, they may be creating a drag on the team productivity by applying quick fixes, missing root causes, and leaving technical debt behind them. Avoid hiring only junior developers. The right proportion of senior to junior team members will ensure that your team has a defined direction and delivers code at optimal speed.
2. Invest in mentorshipOnce you've got senior developers on board, it's time to think about how you can use their expertise to improve the learning performance of other developers. At Sunscrapers, we practice pair programming because we believe that's the most efficient way for developers to boost their skills quickly. Code reviews serve the same purpose because they help us understand what works and what doesn't.
If you want your team to improve quickly, encourage mentorship practices.Identify the team members who can serve as outliers of best practices and set an excellent example for the rest of the team. Senior developers with a lot of experience on their back will be able to lift up the productivity of the entire team, serving as force multipliers by mentoring junior developers. Senior developers are able to come up with simple solutions to complex problems, but also teach that skill to other developers in your team. By equipping your team with a strong mentorship culture where pair programming and code reviews are performed regularly, even newbies will quickly become productive contributors.
3. Empower your teamDeveloper teams often clash with other teams in projects. That happens because developers are often treated like a group of people who merely take orders from other teams rather than real collaborators. To take full advantage of your developer team, you need to empower team members and let them be heard.
Allow developers to set out their professional roadmap and choose technologies that are best suited for specific tasks.Being held accountable for their decisions will boost their motivation and give them a sense of ownership in the project. Organize regular meetings where management and development teams can meet to plan and work out problems. Let developers create their priorities, share their successes and respond to management teams to make sure that everyone is moving in the right direction for the company.
4. Know when specialization brings most benefitsSome teams can benefit a lot from cross-training. Cross-training means that you shake out the roles in your team once in a while to make sure that team members are better equipped to handle unexpected issues.
However, at some point cross-training will no longer bring returns that justify pulling your specialists off their primary domain to boost the versatility of your team.It's important to cross-train your team but don't let it go too far. Specialization in a developer team brings amazing productivity gains. That's why you should be hiring with specialization in mind rather than building a team of general developers. It's great when multiple developers can work on the same area of your product, but keep in mind that each developer should have their deep specialization.
5. Build a motivating culture and celebrate successKeeping your team's morale high is essential to reducing stress associated with the work and avoiding burnout. It's smart to celebrate your successes right after they happen. For example, you can host a shipping party that marks a significant release.
If you end up working on a tight deadline over the holidays, take your team out on a day of fun to blow off the steam and turn that project experience into a positive memory.Building a productive developer team can be challenging, but these 5 steps should help you when hiring developers for your project.
Have you got any questions about building developer teams? Reach out to us a email@example.com or leave a comment below, we're always happy to share the experience we acquired from building teams for different projects.