Should you become a freelance programmer in 2021? Well, you picked the right video, let me explain. This video was brought to you by Digitalink Academy, your number one source for programming fast and get to that six figure salary you desire. Our Academy have a wide range of courses including our 30 day lunch pad course series which includes SQL, Python and JavaScript. We also have a programming interview course and a mentor membership program and much, much more. When you sign up, you get free access to our community of professional developers who willing to help you take your career to the next level. So let's take the next step and sign up for our free seven step guide so we can help take your career to the next level and start learning programming fast with our free seven step guide. So click the link below and I'll see you guys in the guide. All right guys, the quick answer is yes. You should become a freelance programmer in 2021. It has a ton of benefits and my perspective of freelance development changed over years as far as just my approach and how I recommended to people and I wanted to kind of talk about that process so that we can pick a right solution for you so that you can know to pursue a career as a freelance developer. So as I was saying guys, the quick answer is yes. I even went to the extent of actually changing my seven step guide around this subject so that you guys can know how to approach becoming a developer and find solutions for you.  So I used to go in with all these massive courses trying to teach any and everything about programming and notice that I didn't get the response that I was looking for and over the couple of months and years I quickly determined that a lot of people say they want to do something but they actually their actions speak differently. So we want to make sure before we go way into detail we want to customize a solution, a plan specifically for you guys so that you can become the freelance developers that you want. A lot of people may think, hey, it's just freelance work. I can just do it on the side, which is great by the way but the way I like to explain freelance work you work on your own terms that can be the amount of hours, where you work, all this stuff you have complete control over and if you get fired by some company you can actually just go get a known because you got options guys and you're freelancing you can actually pick and parse the working style that you want. So don't just think of freelancing that you're working on a beach or you're working Silicon Valley on a park bench or something like that. It can go beyond that. It's part of it but it's a lot more guys and I'm going to explain some of these points to you guys. So I have some points here and I want to make sure I go over the core pieces and not just give general fluff like a lot of channels do and I want to make sure I cover this. So at the end of the day guys regardless if you're freelancing or doing regular program work it all starts with business projects.  So you have to make sure the code that you put in place is going to help them make more money so that you can justify these big projects so that you can charge more and more money.  You think it's all about writing code which writing code is a part of it but at the end of the day if you ain't completing projects you ain't making no money either way. We'll talk specifically in a freelance case and we'll talk more about actually getting the clients further in the discussion but I want to make sure we cover the fact that it's still going to be project based guys. Is you think writing code is the end I'll be off is far from the truth.  A lot of you guys too caught up in Fiverr in a lot of these one off platforms which I'm not going to knock them. I use them myself but you got to understand the best clients are going to be the ones that reoccurring, reoccurring, reoccurring. So that was going to be the best freelance clients. So like I always say guys, number three, learn the basics for free. That's a point I wanted to cover here today. A lot of you guys going to boot camps go spend all these money on degrees and don't really haven't really done your due diligence to find out if programming's right for you. That's why I always say learn the basic fundamentals for free before you start investing too much time and too much money in this. Not to say you can't go buy a little cheap course or something like that. All I'm saying is I preach this and I sell courses and I'm revamping a lot of my courses to say, hey, go learn the basics for free. And once you come to my course you have a better understanding of coding and you have an approach that you can get more out of my courses. Instead of coming to my courses don't know the fundamentals and I'm just trying to get, you know, you're just getting money from me. Yeah, my stuff is good but I still want you to know the fundamentals coming in so we can get to what we're gonna put you over the top versus your competitors who still aiming for those freelance gigs you're trying to get as well guys. So it's so important that you guys do that. Number four, first of all find a plan. You gotta get a plan. My seven step guide below is gonna do that for you guys. It's gonna really put you in a position to win and the best thing about it is it's free. It really put the anxious perspective for you so that you can start your career as freelance software developer and really put yourself in a position to win regardless if you're PHP, SQL, JavaScript or Python we got something for you. So link's in below to get that free guide and if you already signed up for the free guide and downloaded your copy go ahead and support the channel and buy some courses or either just do donations. Link below for everything guys so pick that up. That being said guys, let's get to the bread and butter here which is the coding projects. You guys probably gonna get tired of me talking about coding projects. Projects, projects, projects and not just these lab calculator apps or something that you're doing straight out of a textbook or something like that. I'm talking about a real world project and this is where it's gonna take you from being a potential programmer or a junior developer to a senior level lead developer. This one thing right here guys because a lot of you guys get wrong what you guys get wrong is and we'll talk about our resume and our next step but at the end of the day if you can't showcase your skills and how you gonna make that client better or make their life a little better as far as just making more money or saving them time doing a specific function with software where's the money? Where value you bring to the table and that's the type of mindset I wanna get you guys to freelance developers because you need it the most. Unfortunately, W2 employees can hide behind other people don't necessarily deliver value every day and get paid every week or every two weeks or every month whatever the interval of your paycheck. Freelance developers, the minute a client determine that you're not providing value and you cut just like that. So we have to be on our toes and make sure we consistently provide value so that we can demand that higher and higher pay and actually start that recurrent revenue from that client so that once we get about three or four of those clients we are rolling in the dope. So that's gonna be our strategy here guys in the real world projects. We talk about that in the seven step guide as well so that you can position yourself with a niche that's gonna allow you to stand up stand out from the competition. It's getting so bad guys. When your resume, people looking at your resume they're looking straight at the experience in the projects because we can be picky now. The hiring managers, we can be picky. We can say, hey, you know, you got a boot camp you got a CS degree but I'm not seeing that you can apply those skills in the real world. And if you can demonstrate that in your resume you're definitely gonna get an interview. And if you can confirm that in interview you guaranteed almost to get a job. So it's very important that you guys showcase your skills the right way and put you in a position so that you can stand out from everybody else guys. Number six is programming, resume and interview prep. Like I was telling you guys before all these projects, you're gonna hear project, project, project real world business project. You see that? Even as a freelancer, it matters because it really separates you from all the inexperience I call them boot camp developers who know about programming who can write code but they don't know how to apply it in real world and solve problems. So this is gonna be important for you guys. We talk about, it's so sad guys. Let me put it to you like this. You can have a senior level developer in writing code writing code. Me personally, I don't necessarily consider you a senior level developer based off your time. I'm looking at the impact of the projects because you can have somebody who just come in and hit the ground running on business project and get to that senior level within a year. And you can have people who, you know be in that for 10 years and still doing just basic scripting. And I don't necessarily categorize that my personal self as senior level developer because of the impact of the project. But I digress. But at the end of the day guys, you can have these people who know a ton about programming writing code and get an interview and won't get the job and lose it over a person who don't have nearly the same amount of experience but they showcase the projects and the business projects that they solve and they come in and say, oh, you use a software like this. Man, we can put in a couple of scripts in there that automate that process so that we can more get you focused on the revenue generating processes so that you can identify this with your clients, your drivers and all that, your business join. That's the kind of stuff they want to hear guys. That's the stuff they know, hey, you know, I got this problem. He gonna put in code. That's gonna fix it and gonna get me more money and more time. That's gonna get you the money guys. I can't stress that enough guys. So I'm gonna hit that home as well. And last but not least guys is finding programming gigs. I'm gonna probably save that for the seven step guide going to detail. So go ahead and go to that. But at the end of the day guys, you got Fiverr, you got Upwork, you got all these online platforms that are very competitive. In my seven step guide, I cover how to stand out and there's a better way to get clients instead of going to these platforms exclusively. So go to my seven step guide and it's actually number five, I think. Step number five is gonna allow you to find the best way to attract and find these freelance clients. So guys, just to cover everything again, make sure you start with that first business project. Let's get that on that resume so that we can get that interview and we're gonna pretty much spend most of that interview talking about how we're gonna solve their problems instead of can you do the job, instead of if you're a good fit. The conversation of your interview when you're doing freelance work should be the amount of money you're gonna charge. They already know the value. They wanna confirm what you put on your resume and how much you're gonna charge and come up with some terms and make sure everything's good to go. So like, subscribe to the content. If you have additional questions, comment below. Guys, tell me what you like about what I said or do you disagree with me? Comment below in the comment section. Let's start a conversation. Like, subscribe to the content. I'll put a link to my seven step guide here so go ahead and get that, it's free. I'll see you guys in the next video. Peace.


What you might want to do right now is turn on the project summary task to show summary of the entire project. I can do this with the Gantt chart format tab. Show hide section of the ribbon and there's a feature called project summary task which I'm going to now click on and turn it on. And there we go, we've got the car servicing project. It's taking 27 days at present.


One second. OK, hello everybody. Apologize for, I need to apologize for my voice. I've been to Bangkok and I got a, like a sore throat, some kind of infection. It's over now, but you may not hear me well. So just shut out. Oh, there's a mic. OK. So that might be easier. So in this talk, I want to tell you a story which we kind of engage with one of our customers. And this story is basically describing what we've done and why we've done it. So the title says it's a good quality code with Drupal 7. But you could actually apply it to any framework or any software or any CMS or any platform you want. It's mainly about writing good code with some examples using symphony components as well in Drupal 7. I know that Drupal 8 came out a couple of months ago and everybody's already buzzing to use Drupal 8. But in real life, we have still many projects which we have to maintain in Drupal 7. So this idea I'm going to present here may give you some tips how to start doing things in the right way, but still with Drupal 7 and then migrate easily to Drupal 8. First words about me. I work for Sensual Apps UK. Sensual Apps is a company behind the symphony framework. You can find me on Twitter as SuperMarek. I work for the company, which is actually a group of companies. It's important. In Vika Group, as a group, has three companies inside. Session, which is a Magento company delivering Magento products, solutions, then Sensual Apps, which looks after symphony, and ICOS, which is a Drupal CMS little agency. So we work as kind of like a shared resources team. So the fact I'm working for Sensual Apps doesn't mean I won't be involved in the Drupal project or Magento project. So we had a customer who came to us and said, we have a mission, a mission for you. A mission for us was that it was a Magento platform they kept using for years. But they were kind of strapped with cash. So they didn't want to upgrade. They didn't want to patch it much. They just wanted to leave it as it is. That was an old version of Magento. And they were using it as a CMS. It was a business-to-business customer. So they didn't pay too much attention to how the content for customers looked like. But at some point, they realized that actually the way they present the data, information to the customers, even though they're business customers, it's actually important. So they came up to us with a challenge. They wanted to have a proper CMS, but they didn't want to spend too much money. So typical scenario, they want all the features, but they have no money, right? So if you know Magento, Magento is a great e-commerce platform, but it's not a good CMS platform. And what they wanted, they wanted to manage the corporate websites, but they also wanted to manage to be able to build macro sites, not necessarily tightly coupled to what they're doing right now. So the broad of uses they wanted was quite big. So we decided, we suggested that the best solution for them would be Drupal. At the time, that was Drupal 7. Drupal 8 was not out yet. And our in-house Drupal team said Drupal 8 beta was not ready yet. But why did we decided to go for Drupal? It's open source, CMS, it's there, it's done. All the features they wanted, most of them, they were already out of the box. So the only cost they were actually paying was to configure the platform for them and just give it to them so they can work with it by themselves. They were happy to look after timing that by themselves, building micro sites by themselves. They just wanted to have a platform which would deliver all those features. At the same time, they wanted to have some kind of connections with Magento. And they operated on a very limited budget. The project eventually went live, but thanks to the customer, it got delayed by almost a year. That always comes when you have a limited budget. And when you say, yeah, right now I need to stop. And let's wait a couple of months till we get a budget to carry on. But anyway, project went live. So whatever I'm going to talk about in here, it's live and it's working. So we decided to build kind of like a connection between Magento and Drupal. And this connection was being managed by Composer. Do you know what's Composer? It's like an awesome tool to manage dependencies. Drupal 7 doesn't use it. But you can use it with Drupal 7. We use symphonic components to build mini tasks, which I explain a bit later. So next step. So before I explain you what we've done, let me talk a bit about clean code. So this is the thing which we love to do at my company. We pride ourselves in being software engineers where we write beautiful code we can be proud of. So at what point we can decide that code is beautiful and that we're proud of this code? So Eric Evans, the guy who's created a brilliant book about the domain-driven design, said something like that in order to create a good software, you have to know what the software is all about. So basically in order to write a good software, you have to learn what the business you're talking to is all about. If you want to build a software which represents what business is doing, it's great if you can translate that directly to your code. So how do we learn about those processes? So first of all, when you talk about projects, you have to find stakeholders, owners of the project who know what exactly needs to be delivered. The bigger project, the bigger company you deal with, the more people they have. So it becomes difficult to pinpoint those people you want to talk to. Most of the time you get Project Manager who doesn't care and just works as a proxy between business and developers without paying attention. That's the problem. Sometimes you have stakeholders who don't care who just say, this needs to be done on this date and I don't care. So these are difficulties you may face. The best way to get stakeholders involved is just to bring them to all discussions the developers have. It doesn't have to be all stakeholders. Just find the person who's the most interested in the project and involve them as much as you can. So when you talk to the stakeholder, ask them to describe using examples how the system should behave. Ask them to describe using simple stories how they want the system to work. And the examples should be, I'll get to examples, and ask them to describe the behavior of how the system should behave. And by engaging the stakeholder in doing so, they will start using language you want to use as well. You start building a vocabulary of the same words. So when you talk about product, you know what product means. It's not a product item or it's not a catalog item. It's not an inventory item for the stakeholder. It's a product. I've been in a couple of projects where in one of my projects where we did a big mess up with namings was selling courses. So the customers had on the website a list of courses. And each course had events, which you can book into. So let's say there was a course, Symphony Training, which had a couple of dates. Those dates were events. In a code base, we call them course types and courses. That led to many confusions. Because when we talk to the customer, and then we look at the code, or even thinking about that, we were thinking about two different things. Once you have a common language, ubiquitous language, ubiquitous language is like a common language you have between all the parties. And it's good to keep that language, the same language, between all the parts involved in building your application. So if you talk to developer tester analysis to developer or domain expert or stakeholder to developer, all parties should use exactly the same language. And the same language should land in your code, acceptance criteria, specs, and documentation. So avoid a translation cost as much as possible. And if you talk to stakeholder and you ask them for examples, ask them to give examples in a form like that, in a form of a feature with a scenario written ideally by the domain expert or written by the business analyst with the domain expert or stakeholder. And this scenario is quite simple. As you see, have you ever used BHAT? So some of those scenarios people use to describe how the browser should be clickable. So whenever you write those examples, don't try to write scenarios when I click that button and enter this field and fill that field and enter this button. And I go to another page. That's not a behavior. Behavior is like, given I'm visiting a product page for the first time, and I got prompted to locate my nearest depot, when I enter my postcode, then I should see my local depot information. It's as little concrete information about the browser behavior as possible. Sometimes you cannot avoid it in some stories. So when you have this little example, you can extract keywords. You have an actor of your story. So in order to see correct prices as a visitor, I need to be able to locate nearest depot. So visitor is your actor. Then you have some actions. Those actions you can translate directly to your code. So in our example, basically customers were business to business customers. They were based all around UK. Whenever they were logging or coming to the website, they wanted to see the local warehouse prices. And unfortunately, the prices were not the same across the UK, so they had to enter the location. They were only allowed to use one warehouse, which they belonged to, so they could see the prices. And that was the simple story which we had to implement. And that translated into a code base, into a code. So we built an interface depot locator, which basically describes a system service, which has just one method, locate depot by postcode, and returns depot information. So having interface is a good idea, because for testing, you can implement a test adapter for your final code base. You can implement final solution. This is an example how we then implemented Magento depot locator. So this was basically calling Magento service to map the postcode back to depot in our system. It was behind the scenes. It was calling Magento API, retrieving JSON, and just retrieving. But because this was hidden by the interface, that was easy to stab in a test. One interface describes communication. Interfaces, the more interfaces you use, the better. The slimmer interfaces are the better. They describe how your objects communicate with each other. Robert C. Martin, Uncle Bob, said that high level modules should not depend on a lower level implementation. What that means is when you think about your application, your application has different levels of engagement, let's say.  So whatever your domain does, your domain should not know about the user interface. So you shouldn't have in your domain, you shouldn't use language, which is about clicking, feeling fields, or something like that. It should be user interface agnostic, or even framework agnostic. So in our example, when we had interface, so our domain said that I want to communicate with the port location via this interface. So the infrastructure is the layer which implements that interface, and it's basically used by your domain or application. So it's basically something like that. You've got policy layer which uses some policy service, then it's implemented by mechanism layer, which may use some mechanism service which is provided by utility layer. So this is your interface, which can be implemented by many other, many different objects. You can replace them for testing, for stabbing. So if you look at this, the higher level you are, you should only talk to the lower level of abstraction. So if you look at the Drupal in Magento in here, from our perspective, from this exercise perspective, Drupal was the user interface. Magento was the infrastructure. Our code, what we've written, was the application domain. Drupal was just displaying what was coming from Magento. Clean architecture. So it's basically a similar view, but just different take on it, what I said. So you have entity use cases, controllers, and web. I'll just skip it quickly. Another take on it is a hexagonal architecture, which is basically the same what I showed you before with a layer architecture, but slightly different view. Your application domain is in the center, and everything what doesn't belong to your application domain should be hidden behind the port or interface. So in our example is Acme Deput Locator Interface. It's our port. Magento Deput Locator is our adapter. OK, why clean architecture? You end up writing less code. And the code is less complex. If you start doing those exercises, it may sounds like you keep writing more classes. You keep creating more objects. And it may sounds like it's not really less complex.  And if you have to debug it, it's much easier to unit test your free line object than to debug your 60 line spaghetti code. They can be decoupled. After this exercise, we had a Magento guys trying to use modern tools, PHP spec, to write a module for Magento. So what they did, they created a mage spec extension to PHP spec so they can use all the goodies from Magento inside PHP spec. They created a module and they realized, actually, we don't need all those add-ons from Magento because our module is already decoupled. So they removed that and just made it work with a clean PHP spec. And then they realized that, actually, this is not related to Magento. It works with my Magento project, but it could be released as an open source project. And other people could use it. So if you use the coupled code, you can reuse it with other frameworks as well. Whenever you need a framework, hide it behind the interface. So it doesn't work if you're just adding pages in Drupal because you're just using the built-in functionality. But if you have to write custom code, then it makes sense to do it this way. And Zen Framework 3 is just around the corner. Maybe it's going to be better than Symphony. And next year, everybody will be moving to Zen Framework 3. It might happen. Raiseable components, easy to test. Who's writing tests? Right. The good pro tip, write tests before you write code. It seems impossible at first. Once you start doing that and you get used to it, you won't be able to go back. Easy to maintain, easy to change. The biggest problem with legacy applications is that we are afraid to change them, right? So if you have a nice, clean code, it's a lot easier to change. Good books to read. So we have a clean code and a clean code there by Uncle Bob, Robert C. Martin. These are highly recommended. Domain-driven design. After you go through those two, then it might be a bit boring, the domain-driven design at times. But it's a really, really good knowledge. OK, so the impossible. How we did it. First, we started with dependence injection. So long story short, we basically created our own micro framework using symphony components which sit between Magento and Drupal. And this is how you do it most of the time. There are people like Tyler Otwell who create micro frameworks and then give them fancy names and then try to sell them. But you don't have to buy anything. You don't have to follow someone's solutions. You can do it by yourself every time. Symphony is so flexible that you can just cherry pick which component you want and you can do it. With Zend Framework 3, you've got exactly the same. They have now fully decoupled components. If you want to use symphony dependence injection with a router from Zend Framework, there is nothing which stops you from doing that now. So dependence injection standardized way of loading dependencies, a pretty cool feature. So we created our kernel, which this container builder is a standard class from the dependence injection container component in symphony. Why we started like that? We wanted this to be run without Drupal. Why? I get to that in a second. Container loads configuration from YAML or XML file. It's very handy. Services loaded from XML. We use XML because some of our colleagues insist of using PHP Storm. Some people find it useful. And PHP Storm can autocomplete your service names from XML files. So it's useful. You can register extensions, application extensions to modify parameters from the configuration. We extracted it into a method, private method. So we have a boot method with just builds container. And the build container just returns that. Yeah, then we added caching. So we only need to build the whole container and all dependency injection once when we install application. We don't need to rebuild it every time we want to use it, right? Although if we end up, we actually want to rebuild it. So our parameters.yaml had all the configuration for Database, Soap Client, which had to talk to Magento, some configuration for the product operator. We created services XML. I would prefer YAML, but some people insist on XML. So let's build first console command. Our first command was built to import products from Magento and then save them to a source. So short story, why? The problem with Magento was that it was very slow. That's standard for Magento, right? So we didn't want to hit Magento every time someone was searching for products on a Drupal site. So we wanted to keep a cache of information. So this was a command line tool which would import products from Magento and just dump them somewhere. So it takes interfaces if you wondered what were product imported and product persisted. These are just interfaces. So in tests, we can replace them with something which is useful for tests, mock them, or whatever. So yeah, simple command. That's an import and persist command. That's a symphony command, which you can run from the command line. So you have to register it. And the import and persist handler is injected as a service in here. And it displays simple execution time. And our console file, very simple. We have an autoloader from vendors, from Composer. Use our kernel we just built. Use console application from symphony. Boot our kernel, register application, register commands, and run. And this is 10 minutes. And symphony sorted out as a couple of commands. All the infrastructure for microservice app was done. OK, so persisting products. So in the first attempt, we decided to use XML feed importer. It's a module in Drupal. The purpose of this module is it can take a feed, import it, and leave it, right? Problem was, it didn't work. So in our case, we decided to, in our product persister, we just dump XML product information to the file. And feed importer in Drupal should take it on. It should import all product information. Thing was, it had to be run every day at around 5 AM, because the data, the master record for products was still in Magento. But Drupal site had to be updated every day. And customer decided that one day delay in getting updates is enough, is OK. So yeah, fetching that data from Magento was quick. Then we can import it to Drupal. Why didn't it work? Feed imported was very slow. And it was very slow. 10,000 products imported in four and a half hours. Whatever way we wanted to configure it, it was just not working. Scheduling import with Elysia Kron worked and then didn't work. And then started going three times in a row. And it was resources hungry. It was, it basically didn't work for us. So we decided to save directly to the database. And yeah, so we just needed to create a new database product per system. Instead of XML, now we write to the database. We just, yeah, repository is interfacing here and just saves products. So why direct database write? Drupal says that the data structure would be always the same. We didn't want to keep history of the changes in products. We just, the only thing which mattered was the product information was up to date. So it was fine. Then it was fast. 40,000 products imported within less than two minutes. And we didn't have doubles. We didn't have problems with Elysia Kron. So we didn't have a problems with normal problems with feed importer and normal problems with resources. So we were happy. Yeah, so our Composer JSON file at the end of the exercise. Very simple. We installed Drush using Composer. You can install it globally. But we have a preference to have a project version tools rather than global tools. Symphony console, config file system, doctrine double. We didn't go for the full doctrine bridge. Just database abstraction layer was enough to perform saves. Yeah. So now we wanted to make one of the services to be available in Drupal. But the service was written as a decoupled component used with Symphony application. So we created a click called container.php, which would load the Composer autoloader, instantiate our kernel, boot it, and set it as a viable DA container. It's a nasty hack. But if you deal with nasty applications, this is the way to do it. So thanks to that, we could have the same database configuration across both applications. Because in our database.php, we just take the database configuration from our DA container. Perfect for our deployment. Yeah, remember that container had to be included before database. Then we wrote our depot locator module, which is very simple. Takes postcode, then takes container, takes our service, depot locator, dumps postcode that gets depot to array, sets a cookie, returns. So this depot locator thing is here. It's a decoupled service, which we just inject here, use, and forget about it.  And you could use it with any framework you wanted. Yeah, project folder structure. This is the thing people usually ask, how we manage that. Drupal has its own folder structure. So Drupal was in a folder called public, as it's always, and messes with the files and stuff. So our spec files, which we use PHP spec to write unit tests, was in the spec folder. Features, we had features, are in the features folder. Sources, when the source is, vendor is where the symphonic components went. App, application, bin, some random stuff. Composer, build. Pretty simple. OK, let's rack up Drupal. Whenever I speak about Drupal, people say, oh, you symphonic guy, you don't like Drupal. I love Drupal. Drupal is great. And don't let people tell you that Drupal isn't great. Every project, it's like Drupal is not the greatest project. It's the code, especially in Drupal 7. It's not the greatest. But if you don't need to write any code for it, or if you just want to use it, it's great. It works. It does the job.  No, I would use WordPress or something like that. Use the tools which are available for you. Don't try to reinvent the wheel. Unless you're really good and you really want to impress people and you want to build a new awesome platform and you have an idea for it, then yes, go for it. Symphonic components. Cherry pick what you want. Just use what you want. Symphonic, full symphonic framework is huge. It's pre-configured for you. If you build a huge application from the scratch, it's awesome. But if you want something small, something tiny, better, just pick a couple of components you need, configure it, and that's it. Decoupled code. Highly recommended. Unit tests at the unit code level. Highly recommended. Write tools. That's all. Any questions? So you said you decided not to use the Drupal Feet module because it's too slow for your purpose. And you create some symphony code to write these nodes into Drupal Directly. Were you able to call the Drupal functions within your symphony code, or were you writing directly to the database tables? So we're writing directly to the database. So then I have a bit of an issue with that type of architecture because Drupal has a function that would save you a populated object and then you save it. And then Drupal would then do the inserts into the table. And oftentimes, unless you know intimately which tables get updated when you're creating a new product on Drupal, how are you certain that you're getting all the right tables through your custom inserts? Well, first of all, we have an in-house Drupal knowledge. And so we consulted that with them. And that was their recommendation. We didn't want to use Drupal functions because that would require to spin up the Drupal stack. And that would slow down the import massively. So that's why we went for that this way. We had a clear way to identify which products we basically created a field to identify them. And knowing the content structure, the database structure for product information, we were able to update the product information basically in seconds. I know it's a nasty hack. But given the requirements, that was the way we had to do it. Just on a side note, I'm actually using speeds extensively now. I'm able to process 1,000 XML files in about three or four minutes, I think on a local. Yeah, so you might want to revisit that if you ever get a chance. So it could be other. So we found that it's not necessarily the import process that's slowing it down. But in our particular case, it was connected to a third party module that was delaying the node save that was slowing the process down. So once you disable that module, then it's super fast. So yeah, so sometimes these kind of things may look slow. But yeah, no. Probably in our case, it was something similar. The problem was that the customer had a limited budget. So we basically, to deliver this, we had free sprints. So six weeks, including building the whole. Yeah, I understand how it goes sometimes with customers. Thanks. More questions?


I'm Michael Morris. I'm the superintendent of the Amherst Pellum Regional School District, and thank you for watching today. I'm thrilled to talk math today with two math educator experts, so thank you for joining us. Jane from the high school and department chair and curriculum leader Tiffany, and so before we get into the math of it so to speak, could you just introduce yourself a little more than I did and maybe talk a little bit about how you came to be a math educator? I'm sure.  I teach a variety of classes. As a math educator, I really, I think I was born knowing I wanted to be a teacher, but the math piece came much later. My brother had some special needs, and so trying to figure out how to support him in learning in the mathematics was always really interesting to me, so I think that sort of, I didn't quite go into it right away, but and diverted myself a little bit, but I think I came back to it because really that's what I always wanted to do. That's awesome. Yeah, so I didn't think that I would become a teacher when I was younger. I had many different interests, and it was really hard to narrow down on one, but one of the things that I found is that all of my part-time jobs sort of led me back to cheerleading coaching, tutoring, and back into a classroom in some form or another, so it turns out that being in a classroom and working with students and helping others learn is really what I like to do. And just a little introduction of who you are, sorry. Oh, sure. So I am the currently eighth grade teacher for Team Bolt at the middle school. We sort of alternate between seventh and eighth grade, so this year I'm teaching math eight and several sections of that class right now. Previously, before coming to the middle school, I think seven years ago, I was an elementary school teacher, and so I taught elementary, second grade, fourth grade, fifth grade math and science primarily in those areas, and then it was an encouragement of someone in this district that said, maybe you should try the middle school, and I got to the middle school and I fell in love, and so here I am. So I want to note that we're taping this in mid-September, so we are two and a half weeks in, something like that, to the school year, and so as we'll talk about later, there's been some changes in the math curriculum, and we'll talk more about that, but separate from the nuts and bolts of your day-to-day job, what at a vision level would you say math education should look like in 2019? Something that we often hear from families and something that many of us experience who haven't been learning math in a kid of 12 environment in many years is kind of what we learned, the way we learn mathematics perhaps is different than the way our children are learning mathematics, and you know it can lead to a lot of wondering as to why that is or where my math teacher is doing it the wrong way, and all sorts of conversations that go on in many people's homes, particularly in the area of mathematics, and wondered if either of you could shed a little light on what your vision of what high-quality instruction in math looks like at a kid of 12 or 7 through 12 level, and a little bit of why that distinction is of 2019 versus, I won't mention the year, but you're in fire. Yeah, I think this is a really exciting time to be a student in a math class. There are so many bits of research that teachers and just the community in general are aware of now in terms of best ways to learn, you know, of being able to explore and test things out and ask questions and discussion being like the foundation of what we do in our math class, which I think is a little bit different from the traditional way that most people experience math where you just sort of sit there and you do problems and it was about how many you could do rather than the quality of discussion that came out of the problems that you were working on. So I think now we really do have a focus on being able to explore and test and ask questions and be able to justify your thinking more so than just getting an answer right. Yeah, I think that, you know, the world has changed obviously since I was in the math classroom as a student. And just, you know, jobs and careers really are looking for do you understand? Can you apply? Can you problem solve so much that I think in the math classroom those are sort of the skills that we need to foster as well as all the other, you know, procedural fluency, you know, but I would like that to come from conceptual understanding. It's not just a rote memorization that students really understand what they're doing and if they don't quite know they can find a resource to help them move forward. And part of that is, you know, there's a lot, there was a lot of math anxiety and I'm not good at math and so I think we're well aware of the growth mindset and what that can do for a student who doesn't think that they can do math, that you're not there yet but we got to keep trying and that students talking about math is just a wonderful window into learning about their understanding because if they're just taking it all in as a teacher you're not able to really see where their misconceptions are or where they're having challenges. So really that, you know, discovering mathematics and talking about it really helps the teacher help the student learn better. Another thing I've noticed from my vantage point is the level of engagement that math educators in our district are being very intentional about. It feels different than when I was a child. I mean just very bluntly that it was sort of you got it or you didn't and engagement wasn't actually part of the equation and it does feel different in the classrooms you know that we have currently at the 7 through 12 level and I you know some research I've done in a different setting looked at successful countries, countries that have successful math education programs and they weren't doing the just skill and drill work endlessly that didn't seem like it netted future mathematicians or students who felt competent in mathematics and to your point raised earlier that you know avoid the math anxiety piece so I appreciate your leadership on that in our district.  What's fun for you about your job? Oh it's so fun every day. No it really is. You know I think if you're into math you're a problem solver by nature and so the classroom is just a wealth of problems like you know how can I get this kid to move forward in this area? How can I challenge this student? So it's just it's very exciting every day and kids sort of speak their truth and so it's wonderful to see someone you know change their attitude about math and move forward in it. Yeah and have that in light bulb go on. That's great. I would say the same really similar in that I love it when I can hear the different opinions and thoughts that my students share with me. They share some really unexpected really insightful ideas and questions and strategies and things that you may not have thought of on your own and so it's really nice to just have that discussion and just be able to talk about math. I mean the problem solving aspect is definitely one of the places that I love being able to do math puzzles and and try out different patterns with my students and getting to see sort of the aha moment when they they light up and they're like oh yeah I get that it's exciting. Yeah and I think that the problem solving really reveals for students that there isn't always just one right way and that can be a real you know positive way for students to engage in mathematics because it's like oh I didn't quite get what the teacher was saying but I have my own strategy to get there so it's pretty exciting. One of the neat things that I got to see so I taught fifth and sixth grade as a teacher and I love teaching mathematics for a lot of the reasons that you both cited and one of the neat things last year when we were doing some professional development and Tiffany remember this was more at the sixth grade and then seventh eighth grade level was someone who was coming in working with staff presented a problem and it was an algebraic problem but it was a kind of a picture problem of there were scales and there were multiple balls on each scale and the question was you know how would you go about solving this and how would you go about teaching your students to solve this and I got to see it twice I got to see it with seventh eighth grade teachers as well as the sixth grade teachers and position with that problem the level of excitement and enthusiasm in the room to not only solve the problem which was fairly easy for the teachers but to talk about how you would approach it it was just it was really exciting and what came through so clearly was our teachers both dedication to the craft but also thinking about well they were thinking of specific kids and for this child I would approach it this way and they you know so I was so impressed with how much the math educators knew their children and knew the content and were trying to marry the two of how do we get it but you know that was supposed to be a warm-up activity that the presenter had to say okay we got to move on really things to do today but just the level of enthusiasm of our staff was was fantastic to see what are some of the challenges that you find when students you know come to the secondary level and teaching mathematics that you have to work through. Um do you want me to go? Sure. Well it's such a variety of students that enter at the high school level um so that is a challenge trying to meet all the students needs in in the high school within our resources and trying to um make sure that they can move through to their highest level by the 12th grade so that they are ready for their career or to go to college um and beyond so I would say that's the biggest challenge so intervention throughout is really really important because if a student gets stuck on something and it never recovers from that that can impact their um algebraic learning just because if they don't have number sense then it makes it almost impossible to learn algebra so just the variety of it um we have students that come enter our school district at all levels so we didn't have a lot of control before they got here and so trying to um teach them the way we want want them to learn mathematics is always a challenge. Yeah students come to us at the secondary level with a variety of different backgrounds and experiences with math and so some of those experiences are really positive and others are not so positive and um sometimes trying to counteract those negative experiences and making them see that they can have a more positive experience can be a bit of a challenge and I think the other thing that can be really challenging is just making sure that each student can see themselves as a math student and being able to recognize that even if their love is art that there is still um value and being able to um think through a math problem or think through a math situation and being able to connect it to what they love you know both of you touch on something that I think a lot about and I think it hits acutely at the middle school level but I think there's applications throughout is that what some don't know is that you know our students who enter at seventh grade are coming from multiple districts not just multiple schools but multiple districts not all of them share the same math curriculum and then we have students who come to us just because their family moves here or they may have been in a different school before they hit seventh grade and the nature of math is so cumulative um not that other subjects aren't but I think it's it's more more so perhaps in math than some other subjects taught at the elementary level it creates a real challenge for you all of how to approach incoming students um and I know that hits you at ninth grade too with students coming from different schools as well right and it's really hard to get students to go back into their math education as ninth graders because they don't want to be working on that you know that it feels funny to them to have to go back and relearn something in a different way so that they have a more solid foundation so that's very very challenging yeah for sure it's also really valuable for them to do so and so when they recognize that it's something that really benefits them it's definitely worth it yeah great so there's been significant curricular changes uh this year and so before we get into how's it going um not everyone may have been perhaps attuned to those changes last year so maybe I could start with Tiffany and then and go to Jane just you know what curriculum was being used what curriculum is being used just so people get a sense of that I think it'll help contextualize the next one of their conversations I'll talk primarily about seventh and eighth grade and I know that the sixth grade is also using the open up curriculum um but prior to this year the seventh and eighth grade curriculum was primarily um sort of a whole resource of teacher created materials and the big ideas textbook it really all of our materials were related to the math curriculum frameworks for Massachusetts and um this year we're using the open up curriculum which is a really highly rated program that is available um we have the workbooks but it's also a free um access curriculum for students and families online and uh the foundation of that program is really just to get students to be able to access the curriculum from wherever their background is and think about ways in which they can apply what they already know to a new situation and use rich discussions to promote their thinking so really focuses on those practice standards that we um really want to the math habits that we want students to be able to engage in each day great thank you Jay similar for those yeah so we moved from um an integrated program interactive mathematics program and moved to a more traditional sequence algebra one geometry algebra two and we're using the college preparatory um mathematics program and it's based on the um standards for mathematical practice as well as integrated the content standards from Massachusetts it's been around for a long time and it is um run by teachers there's a lot of teacher input into the changes that are made within the curriculum so and there's been great training with it so that's that's where we are two and a half weeks in yeah and I think it's a challenge to say overall how's it going but I think to the last point you mentioned I was just curious if you could share a little bit of the training and the professional work you know not only with external people but with internal people that we that has been supporting the shift so I think one of the goals of changing the curriculum was that our um teaching practices would be similar through six through twelve so that students would have a common experience moving through um that support the practice standards and the content standards so last spring we had a joint middle school high school math meeting and we shared we had just adopted the program so we shared what we knew about them at that time and we talked a lot about the teaching practices and I know that um people had piloted the open up resources in the middle school and so they were able to talk about their experience and we could tell them how their experience sort of matches what our students will be doing in our program and then um this summer we had the high school met with the curriculum professional development person from the cpm resources and we had four meetings and they will have four more this school year so there's a lot of support professionally for this and they will come in and they'll observe a class and they'll give feedback so it's it's pretty rich resource for professional development and the same at the middle school in terms of receiving professional development in the months leading up through last spring and then over the summer being able to meet as a department both with the high school and with the elementary school sixth grade teachers so that we are as the middle school um ensuring that our curriculum is aligned so that students coming into our school and the students leaving our school feel like their math experiences it's it's more I guess consistent or aligned with what um they will expect to see and what they've already experienced oh and I wanted to add that we have a um six through twelve curriculum coordinator um for the year who's going to oversee sort of making sure the teaching practices are similar throughout the six through twelve making sure teachers that need support implementing the new curricula um there's someone there to help them they have the time to do that answering parents questions um so it's exciting to have that person in place yeah I think it's important to note um that it's someone who has been a teacher at the high school for quite some time in the district and so I think has a local my vision my experience is has the local expertise to understand not just the curricula but also the teachers the environment uh and the community because all those have to match so um thank you for sharing that and what are um I think it's it's a significant significant shift for staff members to be even despite all the support you shared to be taking on a new curricula um and I just didn't know if there was any impressions that you had or that you were comfortable sharing about how staff are you know supporting each other and managing the shift um regardless of their level of enthusiasm it's it's just on a day-to-day level um doing something for the first time can be really challenging there's not some discussion happening at the middle school I bet it's the same at the high school as well um but just daily um we don't have um meetings every day but we do have um department meetings monthly and then we also have grade level meetings every few days on our seven-day rotation and during those meetings we're able to talk about you know how are things going in your class when you did less lesson three um how was it received in each of the classes that you taught that lesson and what are some things that worked really well and we're able to sort of use that to fine-tune our lessons and and have some good discussion and share some resources and there's also a sort of a facebook page where we can get insight from other teachers who may have had more experience of working with this curriculum for the last couple of years and we're sharing ideas that way I would say there's a high level of excitement um among the staff implementing it um that collaboration is high that we really try to um teachers make an effort to meet in course groups if they can't meet all together at least so that students are having again a common experience they can talk about issues that came up we have a page where we everybody writes in like questions um the coach from cpm weighs in occasionally on that as well so that's been a great resource we all share things when we've tried something out you know you might get an email I tried this this is what went really well this wasn't so well you know if you have a comment on it let me know because we we don't have weekly meetings so we kind of just find the time to do that but I would say everybody's enthusiastic and everybody's collaborating on it and really trying to make it work fantastic so one of the last questions I will have time for is a question in every subject when kids at the secondary level but I think it's particularly acute in mathematics which is you know families often struggle of how much support to offer their child um at home when kids are very young and perhaps learning how to read there's a very natural feeling of how that could go I think as students get older based on whether it's the students themselves or also the feeling of not wanting to support adolescents too much and create a dependency model so I don't know if you had any advice of how families can support their children in mathematics at the secondary level and what are some things that are helpful and perhaps what are things that aren't so helpful um that's a tough question sorry um so the program we have online has homework help for every question so that's a great feature because it kind of takes the onus off the parent to do that um but asking the student what they did in class is always a great way to start the conversation um and then if they get stuck on the homework to remind them there is that homework help that they can go to um and really what we're looking for is completion not perfection so if they got stuck they should circle that and we can go over that when they come into the class um but just really keeping a positive attitude and not you know if they weren't good at math don't say that just you know be positive about it and say you can do this you can get it encourage them to come for extra help short times you know not right before the test they didn't get anything like coming continually is really a really important and um in our program the homework is mixed spaced practiced work which means that three of the questions are going to be about what we did in class the rest is review so if they didn't understand one of the review questions they should get in and ask their teacher for some extra help on that that's like more cumulative review that's exactly this is really strategic and and well planned in both curriculums it's also the same with the open up curriculum so having um access to it online there's also there's a student tab but there's also a family tab where um family members can get just a snapshot of what is that unit about and what are some of the key ideas and vocabulary um and i think one of the best things that families can do when they're helping students is rather than trying to be the answer giver but really teaching students how to use the resources that are available to them so what questions can you ask what notes do you have from class that could help you with answering this particular problem tell me something about the strategies that you learned in class and which one of the strategies was really helpful for you let's try using that strategy right now um getting students to really think about how they're approaching the math i think is probably the most valuable thing that families can do for them rather than um necessarily getting a particular problem on the homework correct because again we're looking for completion in effort and the way they're thinking about it rather than accuracy as much when it comes to practice with homework and and i think um just emailing the teacher like if things you know it seems to be a struggle just you know keeping lines of communication open are really important right this was fantastic thank you i know this was a large interest of our community over the last few years and certainly last spring as we were in the curriculum adoption phase of this and um sometimes ironically when you actually adopt the curriculum and it's implemented the interest the public interest goes down but the personal interest of the students the families uh and certainly the staff goes goes up and so i really appreciate the care and time that you all are putting in as leaders in your schools um and we look to see the impact it has on student achievement um as well as staff feeling as you said enthusiastic and collaborative uh about the work and uh you know i say that we'll we'll keep on i'm sure you'll get a lot of questions at open houses and curriculum nights uh and that'll continue uh but really the whole the whole all the changes that could happen and all of our interest in making sure all students needs are met couldn't happen without teacher leadership so i just want to take a moment to thank you both for your role in that there's other teacher leaders as well who i know have been connected but but your roles have been central so thank you thank you so much well thank you for your support and i really want to thank you all the teachers that we work with because they're incredible yeah you know every day thinking about every student so thank you thank you all right so that is our latest episode of window into arps thank you for um spending some time talking about math education we'll be back soon with future topics and have a lovely day